如何将 imagejpeg() 与 $_FILES["file"]["tmp_name"] 一起使用

How do I use imagejpeg() with $_FILES["file"]["tmp_name"]

我的 TensorFlow 项目只接受 JPEG,因为这是我对其进行训练的依据。我使用 PHP 图片上传表单来 post 图片。下面是图像如何被 PHP 文件接收,然后在我的 Python 脚本中使用。

 $uploaded_file = $_FILES["file"]["tmp_name"];
  move_uploaded_file($_FILES["file"]["tmp_name"], "/tmp/classify-img");

 $output = shell_exec("/usr/bin/python3 /var/www/html/classify.py /tmp/classify-img");

我过去曾使用 imagejpeg() 将任何图片文件扩展名转换为 .jpeg

当我尝试这个时,它就是行不通。

$uploaded_file = imagejpeg($_FILES["file"]["tmp_name"]);
  move_uploaded_file($_FILES["file"]["tmp_name"], "/tmp/classify-img");

帮助我干得好。谢谢。

更新和工作代码

#move the uploaded file somewhere temporary
$uploaded_file = $_FILES["file"]["tmp_name"];
move_uploaded_file($_FILES["file"]["tmp_name"], "/tmp/classify-img");

#Is WEBP image?
if (exif_imagetype("/tmp/classify-img".$_FILES["tmp_name"]) == IMAGETYPE_WEBP) {

    //create from webp temp image to be converted
    $im = imagecreatefromwebp("/tmp/classify-img".$_FILES["tmp_name"]);

    // Set the content type header - in this case image/jpeg
    header('Content-Type: image/jpeg');

    // Output the image
    imagejpeg($im, "/tmp/classify-img".$_FILES["tmp_name"], 100);
}

$output = shell_exec("/usr/bin/python3 /var/www/html/classify.py /tmp/classify-img");

当您使用 $_FILES["tmp_name"] 时,问题如下评论中所述,当您使用 $_FILES["file"]["tmp_name"] 时,它会为您提供文件临时文件名,您会将 tmp/ 部分添加到您的文件路径。

谢谢大家的帮助。未来的读者我希望这有助于解释临时文件如何使用 $_FILES 以及如何检查图片以及如何将其转换为 JPEG 而不将其保存到磁盘。

因为处理临时文件的常用方法是创建文件,打开它,然后 unlink/delete 它而不关闭句柄。这使您能够使用磁盘,同时确保进程结束时文件为 deleted/unlinked。这就是正在发生的事情,为什么 move_uploaded_file() 存在,以及为什么你 必须 在对该文件进行任何其他操作之前使用它。

还有一个附加层“你真的希望这个文件真的存在吗?”因为否则任何人都可以 POST 到任何 PHP 脚本并在文件系统中创建文件。

TLDR:必须使用move_uploaded_file()才能尝试使用该文件。