php - 为什么使用 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
。
解决方案
在您的代码中使用
$ext = explode(",", $file['type'])[0];
你得到的扩展名是image/your_image_type
. 然后,您将附加文件名,这将创建一个无效的图像。要获取扩展名,您可以执行以下操作
$ext= explode("/", $file['type'])[1];
或者
$ext = strtolower(end(explode('.',$_FILES['image']['name'])));
推荐阅读
- sql - 根据 SQL Server 中给定的条件分配产品名称
- dagger-2 - 为什么在 Dagger 中双重注入 Android 应用程序?
- css - 暂时粘性视差
- python - Python给出ValueError:list.remove(x):从列表中删除元组时x不在列表中
- python - TFLearn 回归损失函数未初始化
- android - 调用改造 2 时避免内存泄漏
- c# - ASP.NET Razor Pages 提交按钮什么都不做
- dynamics-ax-2012 - 如何从 Dynamics AX(财务和运营)获取所有 DataEntity 数据?
- php - PHP 谷歌加域 api 删除帖子和评论
- python - pymongo:[Errno 10013] 尝试以访问权限禁止的方式访问套接字