繁体   English   中英

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

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

我的 TensorFlow 项目只接受 JPEG,因为这是我对其进行训练的。 我使用 PHP 图片上传表单来发布图片。 以下是 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。

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

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

TLDR:在尝试使用文件之前,您必须使用move_uploaded_file()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM