2011-03-31 69 views
1

我正在嘗試使用blueimp's jQuery file upload scriptPHP&jQuery文件上傳問題

的文件發送到 「upload.php的」:

if (isset($_FILES['file'])) { 

    $file = $_FILES['file']; 

    // Set variables 
    $file_name = stripslashes($file['name']); 

    if (!is_uploaded_file($file['name'])) { 
     echo '{"name":"'.$file_name.' is not a uploaded file."}'; 
     exit; 
    } 
} 

..但在劇本儘管is_uploaded_file通過isset失敗($ _ FILES [ '文件'])。

什麼可能導致這種情況?

編輯:

我從$file['name']變更爲$file['tmp_name']is_uploaded_file傳遞。現在腳本在move_uploaded_file失敗:

if (move_uploaded_file($file_name, $upload_dir."/".$file_name)) { 
    echo "success"; 
} else { 
    echo "failed"; 
} 
+0

'var_dump($ _ FILES ['file']);'說什麼? – chriso 2011-03-31 09:16:50

回答

3

您應該使用is_uploaded_file($file['tmp_name'])。這是服務器上的實際文件名。

$file['name']是客戶端計算機上的文件名,只有在被上傳後才能重命名文件

欲瞭解更多信息,請閱讀is_uploaded_file()文檔:

爲了正常工作,功能 is_uploaded_file()需要一個自變量 像$ _FILES [ 'userfile的'] [ 'tmp_name的值'], - 在客戶端的機器 $ _FILES [「userfile的」] [「名」]上傳文件的名稱不 工作

另外,你說move_uploaded_file()不工作爲好。正如預期的那樣,這是由完全相同的問題引起的:

您正試圖移動文件$file_name,但$file_name設置爲$file['name'],而不是$file['tmp_name']。請注意,$file['name']只包含一個字符串,該字符串等於計算機上的原始文件名,而$file['tmp_name']包含指向服務器上路徑的字符串,其中文件名不會臨時存儲。

+0

這工作!但是,腳本現在在move_uploaded_file失敗。我會更新這個問題。掛上... – o01 2011-03-31 09:20:18

+1

@Orolin在做之前,請確定這不是*確切*相同的問題:) – 2011-03-31 09:23:29

+0

謝謝。我會嘗試在這裏更改變量... – o01 2011-03-31 09:26:13