【问题标题】:PHP Mobile Camera Upload Not WorkingPHP移动相机上传不起作用
【发布时间】:2019-12-05 15:21:27
【问题描述】:

我已经为此工作了几天,从其他人那里查看以前的问题/答案,但我还没有找到答案。这背后的想法是允许移动相机上传照片、压缩照片、存储照片并将文件名记录在数据库中。

如果我在我的 PC 上使用此代码,它可以工作,没问题。如果我使用我的手机摄像头,我会得到页面不工作 - 错误 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 &amp; 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 中增加上传和发布大小限制
  • 在没有压缩功能的情况下上传(有效,但我需要压缩)
  • 在表单的输入中添加“捕获”和“图像/*”
  • 检查 $_FILES 数组是否有错误,无/错误 0
  • 将 $db(连接)添加到 Compress 方法中
  • 在 XAMPP 上尝试了代码,在将 $target 更改为 $target = $_SERVER["DOCUMENT_ROOT"].'/images/uploads/'; 后它工作了,但是,调整后上传到实时服务器后不起作用,仍然得到 ERROR 500。(等待技术支持向我发送服务器副本错误日志,因为我无法通过我的 FTP 或 cPanel 访问它)。
  • 尝试升级到 PHP 7、7.1、7.2。没有运气,所以退回到 PHP 5.6。

【问题讨论】:

  • 在你的代码中你没有做任何检查,所以它会在失败时插入行。你需要做更多。检查服务器错误日志以了解其 500 的原因
  • @LawrenceCherone 感谢您指出这一点,我一定会添加更多检查。
  • 对于初学者来说,你有一个可变范围问题;这很可能是“你”的问题,看到你的 "Uploading without the compression function (Works, but I NEED the compression)" 。将连接添加到方法或使其成为全局。这很可能会解决您的问题。
  • @FunkFortyNiner 我对您的评论感到困惑...您是说将我的数据库连接添加到代码中吗?如果是的话,我确实在 compress 函数上方的代码中有它,但为了安全起见,我把它拿出来但忘了添加一个演示变量来显示它在那里。我将把它添加到问题中。但这就是你的意思吗?
  • 否,将连接添加到方法中。即:function compress($source, $destination, $quality, $db).

标签: php file-upload image-uploading


【解决方案1】:

愚蠢的我...我已经解决了。当我说我更改了 Post 和 Upload 大小时,我并没有考虑增加 memory_limit...

解决办法是将 memory_limit 改为 128M。

【讨论】:

    【解决方案2】:

    我通过更改服务器的配置解决了这个问题,请相对更改。

    post_max_size = 20M
    memory_limit = 2048M
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-08
      相关资源
      最近更新 更多