2010-07-22 136 views
4

PHP上傳問題獲取錯誤0,但move_uploaded_file()返回false。當我打印出$ _FILES我得到PHP上傳問題獲取錯誤0,但move_uploaded_file()返回false

Array ([uploadedfile] => Array ([name] => flashlog.txt [type] => 
text/plain [tmp_name] => /tmp/php0XYQgd [error] => 0 [size] => 3334)) 

我使用了一個基本的HTML/PHP的教程這讓我相信,這可能是服務器問題。我檢查了php.ini,並且已經upload_max_filesize:2M,post_max_size:8M。所以我很困惑,因爲我認爲0的錯誤告訴我它是成功的。

我正在使用的代碼是

<?php 

// Where the file is going to be placed 
$target_path = 'Test/'; 

$target_path = $target_path. basename($_FILES['uploadedfile']['name']); 

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) 
{ 
echo "The file ". basename($_FILES['uploadedfile']['name']). 
" has been uploaded"; 
} 
else 
{ 
echo "There was an error uploading the file, please try again!"; 
echo print_r($_FILES); 
} 
?> 
+0

到底什麼是給你一個錯誤的代碼?順便說一句,請**將您的代碼縮進4格**以正確格式化。 – deceze 2010-07-22 04:35:03

+0

你提出了錯誤報告級別嗎?如果目的地出了問題,'move_uploaded_file'應該發出警告,告訴你什麼是錯的。 – deceze 2010-07-22 05:04:47

回答

9

move_uploaded_file()也將返回false,如果它不能寫入到目標目錄。

我看到處理上傳的大部分PHP代碼跳過檢查過程的一些主要部分。上傳代碼應該執行以下步驟:

  1. 檢查$_FILES[]是否存在並且填充了正確的條目。
  2. 查看error字段,看看它是否到達服務器 - 很多代碼只檢查它是否爲0,這意味着它不會向用戶返回任何體面的錯誤。
  3. 確定您需要移動文件的目的地實際存在。
  4. 請致電move_uploaded_file()來做這個動作 - 太多的只是做一個文件複製,它繞過安全檢查move_uploaded_file()

這些是離散的步驟:您似乎看到,實際上傳可能會成功,但move_uploaded_file()可能會失敗。你的問題假設如果後者失敗了,前者也是如此。

哦,是的:致電move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $destination)。使用$_FILES['uploadedfile']['name']將不起作用。

+1

這就是我會回答的。檢查您的文件權限。鑑於這是一個移動操作,您可能還需要將其從源目錄中移除的權限。 – thomasrutter 2010-07-22 04:42:22

+1

'move_uploaded_file()'不會有刪除臨時文件的麻煩,因爲它被與上載過程中創建的完全相同的進程調用。 :-) – staticsan 2010-07-22 04:51:06

+0

是啊真的:) ... – thomasrutter 2010-07-22 04:55:27

0

我的項目中出現同樣的錯誤代碼中沒有任何錯誤,但文件名中存在問題,例如我無法上傳名爲的圖像(「IMAG0889.jpg」,「I​​MAG0892.jpg」,「I​​MAG0893。 jpg「等),它給了我錯誤0.重命名文件後像(」Deep2.jpg「,」IMG_20160925_093715_1.jpg「)我成功上傳我的圖像文件。所以嘗試重命名後上傳文件