PHP move_uploaded_file()返回FALSE

时间:2016-09-08 20:55:09

标签: php

我现在已经挣扎了8个多小时,所以我希望有人可以帮助我。我想我已经完成了关于这个问题的所有帖子,但是找不到解决方案。

没有错误,/tmp/var/www/test都归apache(www-data)所有,并且设置了775个权限。

这是PHP代码:

$target_dir = $_SERVER["DOCUMENT_ROOT"] . "test/uploads/";
$target_file = $target_dir . basename($_FILES["pic"]["name"]);
$uploadOK = 1;
$image_file_type = pathinfo($target_file, PATHINFO_EXTENSION);

if(isset($_POST['submit'])) {
if($uploadOK === 0) {
    echo "Upload failed!";
} else {
    // This is where it stops...
    // There is definitely something wrong with $target_file
    if(move_uploaded_file($_FILES["pic"]["tmp_name"], $target_file)) {
        echo "Success";
    } else {
        echo "Not uploaded...<br>";
        echo move_uploaded_file($_FILES["pic"]["tmp_name"], $target_file) . "<br>";
        echo $target_file . "<br>";
        print_r($_FILES) . "<br>";
        error_reporting(E_ALL);
    }
}

这些是我得到的结果:

未上传...

/var/www/test/uploads/test.jpg

Array (
    [pic] => Array (
        [name] => test.jpg
        [type] => image/jpeg
        [tmp_name] => /tmp/phpKlzCxc
        [error] => 0
        [size] => 721090
    )
)

那么,我做错了什么?

好的,这是更新:

  • 检查上传是在脚本开头完成的,这就是我没有把它包含在问题中的原因。
  • 这是来自www.w3schools.com的代码,我将查看其他来源(感谢您指出)
  • 在确定了error_reporting(好的通话:)的位置后,终于得到了一大堆“Permission denied”警告,因为我怀疑是问题所在,这里是:

警告: move_uploaded_file(/var/www/test/uploads/test.jpg):无法打开流:第47行/var/www/test/upload.php中的权限被拒绝< / p>

警告: move_uploaded_file():无法在/ var / www / test / upload中将'/ tmp / phpHzvhOA'移动到'/var/www/test/uploads/test.jpg'。第47行的PHP

第47行:

if(move_uploaded_file($_FILES["pic"]["tmp_name"], $target_file)) {

/var/www/test/upload.php的权限设置:

-rwxrwxr-x 1 www-data www-data 2174 Sep  9 00:07 /var/www/test/upload.php

2 个答案:

答案 0 :(得分:0)

  • 我首先会检查file_exists($_FILES["pic"]["tmp_name"])

  • 然后检查路径$target_file是否有效(只是print_r()并检查路径是否正确)。

  • 确保您有权在$target_file路径上书写。

答案 1 :(得分:0)

问题肯定是我们想到的权限。所以,我跑了

所有三个目录的

sudo chown -R www-data.www-datasudo chmod -R 775,因为我之前已经做了20次。只是现在,由于某种原因它起作用。

我使用-R方法,如果我理解正确的话,应该更改/var/www/test目录中所有子文件夹和文件的权限,/uploads文件夹也位于此目录中。

所以只是为了澄清,如果有人也有这个问题,为了给apache授予权限,这就是我做的:

  1. sudo chown -R www-data.www-data /var/www/test

  2. sudo chmod -R 775 /var/www/test

  3. 也为/tmp/var/www/test/uploads目录执行此操作。