2017-02-13 81 views
0

我正在研究一个简单的php脚本,允许我上传图片。正确的文件上传,但是当我去打开有一个errore目录上传图片“你无权看到此文件,检查权限,然后重试”Move_uploaded_file()权限

<!DOCTYPE html> 
<html> 
    <head> 
     <title> File upload </title> 
     <meta charset = "UTF-8" /> 
    </head> 
<body> 
    <form action="upload.php" method="post" enctype="multipart/form-data"> 
     Seleziona il file: 
     <input type="file" name="fileToUpload" id="fileToUpload"> 
     <input type="submit" value="Upload Image" name="submit"> 
    </form> 
</body> 
</html> 

    <?php 
    $target_dir = "C:\Users\test\Desktop\upload_succeeded\\"; 
    $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); 
    $uploadOk = 1; 
    $fileType = pathinfo($target_file,PATHINFO_EXTENSION); 

    // Controllo se il file esiste gia 
    if (file_exists($target_file)) 
    { 
     echo "Spiacenti, il file esiste gia'."; 
     $uploadOk = 0; 
    } 

    // Abilitare solo alcuni formati di file 
    if($fileType != "jpg" && $fileType != "png" && $fileType != "jpeg" && $fileType != "gif") 
    { 
     echo "Spiacenti, solo file JPG, JPEG, PNG & GIF sono abilitati."; 
     $uploadOk = 0; 
    } 

    // Controllo se $uploadOk e' settato a 0 da un errore 
    if ($uploadOk == 0) 
    { 
     echo "Spiacenti, il tuo file non e' stato caricato."; 
    // Se tutto e' ok prova a caricare il file 
    } 
    else 
    { 
     if(move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) 
     { 
      echo "Il file ". basename($_FILES["fileToUpload"]["name"]). " e' stato correttamente caricato."; 
     } 
     else 
     { 
      echo "Spiacenti, c'e' stato un errore nel caricamento del file."; 
     } 
    } 
?> 
+1

这里提供的信息稍少一点,但我认为你的web服务器的另一个用户比你的桌面文件夹要多一些......通常最好使用相对路径和像“__DIR__”这样的常量。 – Oliver

回答

1

您正在运行Windows。下载任何FTP客户端并连接到您的服务器,而不是将权限更改为777(rwe)。

+0

0777权限不是一个好主意。并且在本地mashine上不需要ftp-client。如果你不改变父文件夹的权限,只有文件的权限,你永远不会得到它。 – Oliver

1

我想我知道答案,但让我先解释一下这里发生了什么。

浏览器通过包含该文件的帖子发送multipart/form-data。 Apache接收到所述文件并将PHP放入临时目录中。它在文件系统上创建为新文件的位置。 你通过PHP获得的是什么;在$ _FILES变量中经过一些进一步测试之前,通过move_uploaded_file函数复制的标准化已检查文件。

最可能出现的问题是:PHP/Apache使用的用户和写入文件时设置的权限不允许您当前登录的用户打开它。

2级可能的解决方案:

更改Apache/PHP的用户,所以你有权打开写有权限的文件。在事后文件

或更改权限,假设用于创建该文件的用户有足够的权限,可以这样做:

Change permissions of file uploaded by PHP

0

而不是给许可手动您可以使用chmod()功能赋予权限在php当您上传文件后立即上传任何文件,您可以使用file_path/file_name调用此功能,然后可以授予相应权限使用0777进行所有读取/正确权限

chmod(IMAGES_DIR.'/'.'image_name.'.$image_file_type, 0777);