【问题标题】:PHP - File Upload FailPHP - 文件上传失败
【发布时间】:2023-04-02 09:16:01
【问题描述】:

我不明白为什么这不起作用。这应该很容易。

上传.php:

$uploaddir = '/usr/share/nginx/www/pitfax/upload/'; 
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

echo "<p>";

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {   
    echo "File is valid, and was successfully uploaded.\n"; 
} 
else {
    echo "Upload failed"; 
}

echo "</p>"; 
echo '<pre>'; 
echo 'Here is some more debugging info:'; 
print_r($_FILES); print "</pre>";

表单页面:

<form enctype="multipart/form-data" action="upload.php" method="POST">
    <input type="hidden" name="MAX_FILE_SIZE" value="10000000" />
    Send this file: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>

错误输出是:

Upload failed

Here is some more debugging info:Array (
    [userfile] => Array
        (
            [name] => test.pdf
            [type] => application/pdf
            [tmp_name] => /tmp/phptM0p4w
            [error] => 0
            [size] => 1287464
        )

)
  • 网络服务器:NginX
  • upload.php 的权限:644
  • upload 目录的权限:755
  • 以 root 用户在 SSH 中工作。
  • 编辑: upload_max_filesize = 2M
  • 编辑: post_max_size = 8M

另一件事!上传完成后,我想获取上传文件的绝对路径。 (例如:/usr/share/nginx/www/pitfax/upload/test.pdf

【问题讨论】:

  • 你试过设置上传目录为777吗?
  • @LukePittman 是的,它没有用。
  • @zerkms 你指的是什么错误日志?
  • 你确定 basename() 没有影响它吗?在您的调试输出中,也许您可​​以echo $uploadfile; 并仔细检查它不只是尝试作为目录上传。
  • $uploadfile 怎么可能只有upload/test.pdf?那里应该有一条完整的路径!如果脚本执行的地方没有上传目录,说明move_uploaded_file失败。

标签: php file upload permissions


【解决方案1】:

如果 $uploadfile 的值是 upload/test.pdf 但您希望它是 /usr/share/nginx/www/pitfax/upload/test.pdf 比我怀疑那是你的问题。

试试这个代码:

$uploadfile = '/usr/share/nginx/www/pitfax/upload/' . $_FILES['userfile']['name'];

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
  echo "File is valid, and was successfully uploaded.\n";
} else {
  print_r ($_FILES);
}

编辑:代码格式。

【讨论】:

  • 好的,echo $uploadfile; 的输出应该是这样的。但是上传仍然失败。输出为Array ( [userfile] =&gt; Array ( [name] =&gt; test.pdf [type] =&gt; application/pdf [tmp_name] =&gt; /tmp/phpbGRbCg [error] =&gt; 0 [size] =&gt; 1287464 ) )
  • 当我试图帮助别人解决问题时,我被告知这不是调试服务。所以恐怕在这一点上我无能为力。我会检查日志文件(apache 错误日志)以获取提示,回显所有变量,尝试使用固定文件名等...
  • 我再次将上传目录的权限更改为777,突然上传成功了!谢谢!
猜你喜欢
  • 2012-07-24
  • 2011-05-04
  • 2017-01-03
  • 1970-01-01
  • 2023-01-22
  • 2012-04-12
  • 1970-01-01
  • 2013-12-17
  • 2012-01-07
相关资源
最近更新 更多