PHP 手机摄像头上传不工作
PHP Mobile Camera Upload Not Working
我这几天一直在研究这个问题,从其他人那里查看以前的 questions/answers,但我还没有找到答案。这背后的想法是让手机相机上传照片,压缩,存储并在数据库中记录文件名。
如果我在我的 PC 上使用此代码,它可以正常工作,没问题。如果我使用我的 phone 相机,我要么页面不工作 - 错误 500,要么表格显示它已上传,我检查,数据库有名称,但在服务器上,'File Not Found'。我也尝试从我的 phone 上传一张保存的图片,结果也是如此。
下面是 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
中增加上传和 Post 大小限制
- 在没有压缩功能的情况下上传(可以,但我需要压缩)
- 将 'capture' 和 'image/*' 添加到表单的输入中
- 正在检查
$_FILES
数组是否有错误,None/Error 0
- 将 $db(连接)添加到 Compress 方法
- 在 XAMPP 上尝试了代码,将
$target
更改为 $target = $_SERVER["DOCUMENT_ROOT"].'/images/uploads/';
后它可以工作,但是,一旦上传到实时服务器,该调整就不起作用,仍然出现错误 500。(等待技术支持向我发送服务器错误日志的副本,因为我无法通过 FTP 或 cPanel 访问它。
- 尝试升级到 PHP 7、7.1、7.2。运气不好,所以恢复到 PHP 5.6.
愚蠢的我...我已修复它。当我说我更改 Post 和上传大小时,我并没有考虑增加 memory_limit...
答案是将 memory_limit 更改为 128M。
我通过更改服务器配置解决了这个问题,请相对更改。
post_max_size = 20M
memory_limit = 2048M
我这几天一直在研究这个问题,从其他人那里查看以前的 questions/answers,但我还没有找到答案。这背后的想法是让手机相机上传照片,压缩,存储并在数据库中记录文件名。
如果我在我的 PC 上使用此代码,它可以正常工作,没问题。如果我使用我的 phone 相机,我要么页面不工作 - 错误 500,要么表格显示它已上传,我检查,数据库有名称,但在服务器上,'File Not Found'。我也尝试从我的 phone 上传一张保存的图片,结果也是如此。
下面是 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 中增加上传和 Post 大小限制
- 在没有压缩功能的情况下上传(可以,但我需要压缩)
- 将 'capture' 和 'image/*' 添加到表单的输入中
- 正在检查
$_FILES
数组是否有错误,None/Error 0 - 将 $db(连接)添加到 Compress 方法
- 在 XAMPP 上尝试了代码,将
$target
更改为$target = $_SERVER["DOCUMENT_ROOT"].'/images/uploads/';
后它可以工作,但是,一旦上传到实时服务器,该调整就不起作用,仍然出现错误 500。(等待技术支持向我发送服务器错误日志的副本,因为我无法通过 FTP 或 cPanel 访问它。 - 尝试升级到 PHP 7、7.1、7.2。运气不好,所以恢复到 PHP 5.6.
愚蠢的我...我已修复它。当我说我更改 Post 和上传大小时,我并没有考虑增加 memory_limit...
答案是将 memory_limit 更改为 128M。
我通过更改服务器配置解决了这个问题,请相对更改。
post_max_size = 20M
memory_limit = 2048M