2012-08-16 51 views
2

我似乎無法弄清楚爲什麼會發生這種情況。當我運行以下代碼:PHP文件既不移動也不移動

$uref = APACHE_ROOT . UPLOAD_PATH . $applicant . "_ref_{$email}_{$year}"; 

if (!move_uploaded_file($_FILES['file']['tmp_name'], $uref)) { 
    echo "Move failed"; 
} elseif (move_uploaded_file($_FILES['ref']['tmp_name'], $uref))  { 
    echo "Move succeeded"; 
} 

這兩個語句都不會返回。兩條路徑都存在;一個文件已成功上傳,並且僅在第二次上傳嘗試後纔開始。

任何想法,爲什麼? 感謝您的任何建議。

回答

4
if (!move_uploaded_file($_FILES['file']['tmp_name'], $uref)) { 
    echo "Move failed"; 
} elseif (move_uploaded_file($_FILES['ref']['tmp_name'], $uref))  { 
    echo "Move succeeded"; 
} 

如果您的第一次調用返回true,因爲該文件被移動,則第二個將返回false,因爲該文件不再存在。

只需要簡單的if/else即可,第一次調用可以是真或假,所以您不需要重新檢查。

1

首先,是$uref = APACHE_ROOT . UPLOAD_PATH . $applicant . "_ref_{$email}_{$year}";一個目錄?

如果是這樣,那麼您正試圖寫入一個目錄,如果該目錄已經存在,該目錄可能會失敗。

此外,只檢查一次運行。

第一次,move_file_uploaded將被執行以檢查其是否定的。這顯然是真的,所以它到第二個檢查是否是真的,它返回false。

而是執行此操作:

$uref = APACHE_ROOT . UPLOAD_PATH . $applicant . "_ref_{$email}_{$year}"; 

if(move_uploaded_file($_FILES['file']['tmp_name'], $uref)){ 
    echo "Move succeeded"; 
} else { 
    echo "Move failed"; 
}