2017-02-13 51 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);