douwei1921 2017-05-18 20:48
浏览 68
已采纳

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

I have a php script that uploads images to a folder.

It is working locally, but when I put it on the hosting server I get the following error message:

[Thu May 18 21:45:00.833970 2017] [fcgid:warn] [pid 37560] [client 151.229.83.93:44238] mod_fcgid: stderr: PHP Notice: Undefined index: file in /home/linnas01/g/domainname.com/user/htdocs/php/uploadphoto.php on line 9, referer: http://domainname.com/photoupload.html

Can anyone explain why this is happening and how to fix this?

The php looks like this

<?php

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

?>

My html file looks like this

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

The file gets posted with 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条回答 默认 最新

  • dongxing4643 2017-05-18 21:45
    关注

    The problem is that the name you're using in $_FILES doesn't match the name you're giving in formData.append().

    Also, since this is a multiple-file input, you need to use an array-style name to get all the files. So the code should be:

     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);
      }
    

    Then in the PHP code, you need to loop through the array to process all the uploads.

    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]);
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码