2017-05-18 97 views
-2

我有一個php腳本將圖像上傳到一個文件夾。PHP注意:未定義的索引:文件上傳的照片

它當地的工作,但是當我把它放在託管服務器,我得到了以下錯誤消息上:

[週四21年5月18日:45:00.833970 2017年] [fcgid:警告] [PID 37560 ] [客戶端 151.229.83.93:44238] mod_fcgid:stderr:PHP注意:未定義索引: /home/linnas01/g/domainname.com/user/htdocs/php/uploadphoto.php文件 第9行,referer: http://domainname.com/photoupload.html

任何人都可以解釋爲什麼發生這種情況,以及如何解決這個問題?

的PHP看起來像這樣

<?php 

if (0 < $_FILES['file']['error']) { 
    echo 'Error: ' . $_FILES['file']['error'] . '<br>'; 
} 
else { 
    move_uploaded_file($_FILES['file']['tmp_name'], 'images/' . $_FILES['file']['name']); 
} 

?> 

我的HTML文件看起來像這樣

<form enctype="multipart/form-data"> 
    <input id="upload-input" type="file" name="file" multiple="multiple" enctype="multipart/form-data"> 
    <input type="submit"> 
</form> 

的文件被公佈阿賈克斯。

var formData = new FormData(); 

for (var i = 0; i < files.length; i++) { 
    var file = files[i]; 
    fileNames.push(file.name); 

    // add the files to formData object for the data payload 
    formData.append("image", file); 
    } 

$.ajax({ 
    url: 'uploadphoto.php', 
    type: 'POST', 
    data: formData, 
    processData: false, 
    contentType: false, 
    success: function(data){ 
     console.log(data); 
    } 
}); 

I have also configured the directories and files as explained here

+4

[PHP: 「注意:未定義變量」, 「注意:未定義指數」 和 「通知:未定義偏移」]的可能的複製(http://stackoverflow.com/questions/4261133/php-notice -undefined-variable-notice-undefined-index-and-notice-undef) – Bytewave

+0

tl; dr對於'name'屬性'file',你沒有任何'POST'文件字段。如果我們知道您的表單看起來像什麼,我們可以提供更多幫助。 – Bytewave

+0

檢查是否在嘗試使用'_FILES ['file']'之前已經填充。 – chris85

回答

1

問題是您在$_FILES中使用的名稱與您在formData.append()中提供的名稱不符。

此外,由於這是一個多文件輸入,因此您需要使用數組樣式名稱來獲取所有文件。因此,代碼應該是:

var formData = new FormData(); 

for (var i = 0; i < files.length; i++) { 
    var file = files[i]; 
    fileNames.push(file.name); 

    // add the files to formData object for the data payload 
    formData.append("file[]", file); 
    } 

然後在PHP代碼,你需要遍歷數組處理所有上傳。

foreach ($_FILES['file']['tmp_name'] as $i => $tmp_name) { 
    if ($_FILES['file']['error'][$i] != 0) { 
     echo 'Error: ' . $_FILES['file']['error'][$i] . '<br>'; 
    } else { 
     move_uploaded_file($tmp_name, 'images/' . $_FILES['file']['name'][$i]); 
    } 
}