2016-12-16 49 views
1

試圖獲取文件上傳在我的服務器上運行。 文件上傳失敗。到目前爲止我所做的:
我指定了臨時目錄(/ var/tmp/aptemp。)。我將所有權分配給www-data,以便Web服務器可以寫入它。我也在php.ini中設置了它,並在phpinfo()中進行了檢查。到目前爲止這麼好(我認爲)。上傳文件未到達目標文件夾

我在表單提交後看到$ _FILES中的文件,但該文件沒有將其添加到/ uploads文件夾中。

下面是對文件夾的權限:

drwxr-xr-x 2 www-data  forexamplejohn 4096 Dec 16 10:52 aptemp 

這裏上傳腳本:

<?php 
$target_dir = "uploads/"; 
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); 
$uploadOk = 1; 
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); 
// Check if image file is a actual image or fake image 
if(isset($_POST["submit"])) { 
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); 
    if($check !== false) { 
     echo "File is an image - " . $check["mime"] . "."; 
     $uploadOk = 1; 
    } else { 
     echo "File is not an image."; 
     $uploadOk = 0; 
    } 
} 
// Check if file already exists 
if (file_exists($target_file)) { 
    echo "Sorry, file already exists."; 
    $uploadOk = 0; 
} 
// Check file size 
if ($_FILES["fileToUpload"]["size"] > 500000) { 
    echo "Sorry, your file is too large."; 
    $uploadOk = 0; 
} 
// Allow certain file formats 
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" 
&& $imageFileType != "gif") { 
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; 
    $uploadOk = 0; 
} 
// Check if $uploadOk is set to 0 by an error 
if ($uploadOk == 0) { 
    echo "Sorry, your file was not uploaded."; 
// if everything is ok, try to upload file 
} else { 
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { 
     echo "The file ". basename($_FILES["fileToUpload"]["name"]). " has been uploaded."; 
    } else { 
     echo " Sorry, there was an error uploading your file."; 
    } 
} 
var_dump($_FILES); 
?> 

這裏是形式:

<!DOCTYPE html> 
<html> 
<body> 

<form action="upload.php" method="post" enctype="multipart/form-data"> 
    Select image to upload: 
    <input type="file" name="fileToUpload" id="fileToUpload"> 
    <input type="submit" value="Upload Image" name="submit"> 
</form> 

</body> 
</html> 

這裏後輸出嘗試失敗:

File is an image - image/png. Sorry, there was an error uploading your file. 
array (size=1) 
    'fileToUpload' => 
    array (size=5) 
     'name' => string '1ERJFa2kBsjhxssQb6gdhu9AtwYQwA7Xhd.png' (length=38) 
     'type' => string 'image/png' (length=9) 
     'tmp_name' => string '/var/tmp/aptemp/phpf2NewO' (length=25) 
     'error' => int 0 
     'size' => int 11063 
+1

http://stackoverflow.com/a/13841017/1415724 *「臨時文件; PHP在成功上傳後自行清理」*。如果臨時文件保持堆疊狀態,則意味着上傳失敗。 –

+0

好的,但是我應該在表單提交之前看不到臨時文件嗎? – user3738926

+0

這將是很難跟蹤。 –

回答

1

move_uploaded_file()將返回false時:

一)的文件名尚未通過POST

b)該文件不能被複制到目標目錄

它看起來您上傳的b是這裏最有可能是罪魁禍首。在這種情況下,還應該有一個警告in your server logs解釋問題。檢查目標目錄的權限,並確認您已將SELinux/AppArmor配置爲允許Web服務器寫入目錄。

+0

該文件通過郵件上傳,如顯示在表單和輸出中。另外,我將權限更改爲777,重新啓動服務器,結果相同。很快會在這裏檢查日誌。 – user3738926

+0

這是目標文件夾。現在改變所有權和上傳工作。大聲笑 – user3738926