2014-11-05 59 views
-1

我有下面的代碼:

<?php 
if(empty($_FILES)) 
    echo 'vacia'; 
else 
    echo 'con algo'; 
var_dump($_FILES); 

$tempFile = $_FILES['Filedata']['tmp_name']; 
$fileName = $_FILES['Filedata']['name']; 

move_uploaded_file($tempFile, "./" . $fileName); 
?> 

現在,空($ _ FILES)是真的,因爲我顯示了字符串 'vacia'。同時在var_dump()中顯示'array(0){}'。

但move_uploaded_file()仍然完美。有人能解釋我嗎?

的使用error_reporting(E_ALL)說「未定義指數Filedata上」在每個地方我用它行,但我能理解爲什麼move_uploaded_file()以仍然有效:/

+1

您的表單是否包含正確的enctype的post方法?顯示你的HTML表單。 – 2014-11-05 19:43:15

+0

在打開'<?php tag error_reporting(E_ALL)'後立即向文件頂部添加錯誤報告; ini_set('display_errors',1);' – 2014-11-05 19:49:04

+0

@ Fred-ii- POST是默認值。你幾天前告訴我的。她只需要確保它不是明確GET:p – 2014-11-05 19:49:50

回答

2

您應該檢查的move_uploaded_files()返回:

$result = move_uploaded_files($tempFile, "./", $fileName); 

成功時將爲true,或者出現錯誤時爲false。在你的情況下,它應該是false。由於不存在數組索引,PHP會拋出一個E_NOTICE級別的錯誤,並使用一個空字符串,那麼你實際上這樣做:

move_uploaded_file('', "./", ''); 

但是,如果沒有啓用E_NOTICE,不會有明顯的錯誤消息。 (請參閱http://php.net/manual/en/function.error-reporting.php

+0

其實它正在返回真正的D:這裏發生了什麼? – alex 2014-11-05 19:59:11

0

您可能想檢查文件是否存在。僅僅因爲名稱存在並不意味着該文件存在。

if(is_file($_FILES['Filedata']['tmp_name'])){ 
    echo 'vacia'; 
}else{ 
    echo 'con algo'; 
    exit("File doesn't exist, I can't move it so I'm out!"); 
} 
var_dump($_FILES); 

$tempFile = $_FILES['Filedata']['tmp_name']; 
$fileName = $_FILES['Filedata']['name']; 

move_uploaded_file($tempFile, "./" . $fileName); 
+0

is_file()retun false不管我選擇哪個文件,但總是進行上傳。 – alex 2014-11-05 20:53:03

+0

您的HTML表單看起來像什麼? – 2014-11-05 20:55:34