我已经做了几天了,在这里查看了其他人以前的问题/答案,但我还没有找到答案。这背后的想法是允许移动相机上传照片、压缩照片、存储照片,并将文件名记录在数据库中。
如果我在我的电脑上使用这个代码,它可以工作,没有问题。如果我使用手机摄像头,我要么页面不工作-错误500,要么表单显示它已经上传,我检查了一下,数据库有名称,但在服务器上,"找不到文件"。我也尝试过从手机上传一张保存的图片,结果也是如此。
以下是PHP脚本:
$db = new PDO('mysql:host=host;dbname=db', 'user', 'pass');
function compress($source, $destination, $quality) {
$info = getimagesize($source);
if($info['mime'] == 'image/jpeg') {
$image = imagecreatefromjpeg($source);
} else if($info['mime'] == 'image/gif') {
$image = imagecreatefromgif($source);
} else if($info['mime'] == 'image/png') {
$image = imagecreatefrompng($source);
}
imagejpeg($image, $destination, $quality);
return $destination;
}
if(isset($_POST['submit'])) {
$target = $_SERVER["DOCUMENT_ROOT"].'/images/uploads/'
$target = $target . basename($_FILES['file']['name']);
$photo_name = ($_FILES['file']['name']);
$imageFileType = pathinfo($target, PATHINFO_EXTENSION);
$file = $photo_name;
$query = "INSERT INTO jrtwall_images (imgurl) VALUES ('$file')";
$result = $db->query($query);
if($result && compress($_FILES['file']['tmp_name'], $target, 50)) {
header("Location: /?pid=1&success=1");
exit();
} else {
header("Location: /?pid=1&error=1");
exit();
}
}
这是我的HTML:
<form action="core/engines/upload-v2.eng.php" method="post" autocomplete="off" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" name="submit" value="Upload & Send" />
</form>
print_r($_FILES['file']);
显示:
Array([name] => 15316729868972697354228305840469.jpg [type] => image/jpeg [tmp_name] => /tmp/phpAvNZZF [error] => 0 [size] => 4649129)
如有任何帮助,我们将不胜感激。我运行的是PHP 5.6。
我尝试过的东西:
- 启用跨原点
- 增加php.ini中Upload和Post的大小限制
- 上传时没有压缩功能(有效,但我需要压缩(
- 将"capture"one_answers"image/*"添加到表单的输入中
- 正在检查
$_FILES
阵列是否存在错误,无/错误0 - 将$db(连接(添加到Compress方法
- 在XAMPP上尝试了代码,并在将
$target
更改为$target = $_SERVER["DOCUMENT_ROOT"].'/images/uploads/';
后工作,然而,一旦上传到实时服务器,调整就不起作用,仍然得到错误500。(等待技术支持向我发送服务器错误日志的副本,因为我无法通过FTP或cPanel访问它( - 尝试升级到PHP 7、7.1、7.2。运气不好,所以又回到了PHP 5.6
我已经修复了。当我说我更改了发布和上传大小时,我没有考虑增加memory_limit。。。
答案是将memory_limit更改为128M。
我通过更改服务器的配置来解决这个问题,请相对更改。
post_max_size = 20M
memory_limit = 2048M