PHP注意:未定义的索引:文件上传照片

时间:2017-05-18 20:48:14

标签: php

我有一个php脚本,可以将图像上传到文件夹。

它在本地工作,但当我把它放在托管服务器上时,我收到以下错误消息:

  

[Thu May 18 21:45:00.833970 2017] [fcgid:warn] [pid 37560] [客户   151.229.83.93:44238] mod_fcgid:stderr:PHP注意:未定义的索引:文件在   /home/linnas01/g/domainname.com/user/htdocs/php/uploadphoto.php on   第9行,引用者: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>

该文件以ajax发布。

 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

1 个答案:

答案 0 :(得分: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]);
    }
}