首页 > 解决方案 > 为什么使用 move_uploaded_file 函数后图像文件损坏

问题描述

我有一个表格:

<form action='' enctype="multipart/form-data" method="post">
<input type="file" name="image">
<input type="submit" value="send">
</form>

我有php代码:

$file = $_FILES['image']
$ext = explode(",", $file['type'])[0];
$location = "../image/movedimage.$ext";
if(move_uploaded_file($file['tmp_name'], $location)) echo 'moved';
else echo 'internal error';

这与“已移动”相呼应,但问题是当我检查文件移动到的路径时,其中的图像文件已损坏。

我必须通过这样做来更改上传图像的系统:

 $file_content = file_get_contents($file['tmp_name']);
 $file_dump = file_put_contents($location, $file_content);

这种直接使用工作正常放置文件的尝试,file_put_contents图像文件就像上传的一样完美,但使用move_uploaded_file在目标文件夹中留下损坏的文件。我想了解为什么会发生这种情况,因为$file['error']返回值0并且move_uploaded_file函数不返回false

标签: phpformsfileglobal-variables

解决方案


在您的代码中使用

$ext = explode(",", $file['type'])[0];

你得到的扩展名是image/your_image_type. 然后,您将附加文件名,这将创建一个无效的图像。要获取扩展名,您可以执行以下操作

$ext= explode("/", $file['type'])[1];

或者

$ext = strtolower(end(explode('.',$_FILES['image']['name'])));

推荐阅读