【问题标题】:why do i have a corrupted image file after using move_uploaded_file function为什么使用 move_uploaded_file 函数后图像文件损坏
【发布时间】:2019-05-11 03:18:31
【问题描述】:

我有一个表格:

<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'] 返回值 0move_uploaded_file 函数不返回 false

【问题讨论】:

  • 你知道它是如何损坏的吗?您可以使用文本编辑器打开移动的文件,检查顶部和底部是否有任何异常。
  • 文本编辑器无法打开文件。
  • 关心扩展,有很多未知数你没有分享

标签: php forms file global-variables


【解决方案1】:

在你的代码中使用

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

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

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

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

【讨论】:

  • ummm... 抱歉,explode(",", $file['type'])[0] 实际上是我的语法错误。我确实使用了"/" 并回显了输出../image/movedimage.jpeg 的结果,但这没有明显的变化
猜你喜欢
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多