【问题标题】:move_upload_file doesn't work with extension changemove_uploaded_file 不适用于扩展名更改
【发布时间】:2015-11-09 04:03:16
【问题描述】:

这是我的php文件中负责重命名文件并上传的部分

if ( 0 < $_FILES['file']['error'] ) {
    echo 'Error: ' . $_FILES['file']['error'] . '<br>';
}

else {
    $filename=$_FILES['file']['tmp_name'];
    $extension=end(explode('.', $filename));
    $newfilename=$first_name . '_' . $last_name.'.'.$extension;
    move_uploaded_file($filename, 'uploads/' .$newfilename);
}

我不确定为什么没有上传文件?

【问题讨论】:

  • 您是否看到错误,或者文件没有​​在您期望的地方结束?你的 $_FILES 数组的内容是什么?
  • 没有错误。没有上传任何内容

标签: php


【解决方案1】:

您不能在end() 函数中直接传递explode 返回的数组。还要验证uploads 文件夹应该具有有效的read/write 权限。

您尝试从$_FILES['file']['tmp_name'] 获取扩展名,这是错误的。

end() -> 参数¶ 数组。这个数组是通过引用传递的 因为它是由函数修改的。这意味着你必须通过它 实变量而不是返回数组的函数,因为只有 实际变量可以通过引用传递。

请参考this

试试这个:

$filename=$_FILES['file']['name'];   //this param contains name of file
$arr = explode('.', $filename);
$extension=end($arr);
$newfilename=$first_name . '_' . $last_name.'.'.$extension;
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' .$newfilename);

【讨论】:

  • 我使用了您提供的代码,但仍然无法上传。当我不更改 move_uploaded_file 的第二个参数中的名称时,它会上传。当 else 部分只是 move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']); 时,它可以工作
  • 必须分配它们,因为在我的代码的一部分中,我使用 php mail() 并且在消息中我使用 $first_name 和 $last_name 并且它们被发送得很好在电子邮件中填写变量。这是未经您编辑的 PHP 文件pastebin.com/Jpm62xED
  • 我使用硬编码方法时没有上传任何东西
  • 电子邮件通过,但没有上传任何内容
猜你喜欢
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 2019-02-26
  • 2015-08-29
相关资源
最近更新 更多