Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PHP move_Upload_文件只上载一个文件_Javascript_Php_File Upload - Fatal编程技术网

Javascript PHP move_Upload_文件只上载一个文件

Javascript PHP move_Upload_文件只上载一个文件,javascript,php,file-upload,Javascript,Php,File Upload,我正在我的桌面上测试上传的3个文件test.xlsx,test-Copy.xlsx,以及test-Copy(2).xlsx。我的PHP脚本在我的move\u upload\u files语句所在的行中断。我收到错误move\u uploads\u file(uploads/test-Copy.xlsx):无法打开流:没有这样的文件或目录但是测试-复制(2)。当我检查我的上传文件夹时,会上传xlsx。我的PHP如下所示: foreach($_FILES['file']['name'] as $ke

我正在我的桌面上测试上传的3个文件
test.xlsx
test-Copy.xlsx
,以及
test-Copy(2).xlsx
。我的PHP脚本在我的
move\u upload\u files
语句所在的行中断。我收到错误
move\u uploads\u file(uploads/test-Copy.xlsx):无法打开流:没有这样的文件或目录
但是
测试-复制(2)。当我检查我的上传文件夹时,会上传xlsx
。我的PHP如下所示:

foreach($_FILES['file']['name'] as $key=>$value){
    $fileName = $_FILES['file']['name'][$key];
    $fileTmpLoc = $_FILES['file']['tmp_name'][$key];
    $fileErrorMsg = $_FILES['file']['error'][$key];
    $type = $_FILES['file']['type'][$key];
    if(){
        //validation
    } else{ //if validated
        if(move_uploaded_file($fileTmpLoc, 'uploads/'.$fileName)){
          //do more stuff
        } else{
            echo "Upload failed.";
        }
    }
}
//do more stuff实际上为
测试副本(2.xlsx
(唯一成功上传的文件)运行了一次。下面是我的JS脚本,但我怀疑这是否是正在破坏的部分,因为当我在PHP中打印\r($\u文件)时,所有文件都显示在输出中

var upload = function(event){
    var file = document.getElementById('file').files;
    var data = new FormData();
    for (i=0; i<file.length; i++){
        data.append('file[]', file[i]);
    }
    var request = new XMLHttpRequest();
    request.addEventListener('load', completeHandler, false);
    request.addEventListener('error', errorHandler, false);
    request.addEventListener('abort', abortHandler, false);
    request.open('POST', 'php/excel_upload_read.php');
    request.send(data);
};
var upload=函数(事件){
var file=document.getElementById('file').files;
var data=new FormData();

for(i=0;i看起来您以错误的顺序使用多维数组。请尝试以下操作:

foreach($_FILES['file'] as $key=>$value){
    $fileName = $_FILES['file'][$key]['name'];
    $fileTmpLoc = $_FILES['file'][$key]['tmp_name'];
    $fileErrorMsg = $_FILES['file'][$key]['error'];
    $type = $_FILES['file'][$key]['type'];
    ...
}

问题在于
$\u文件
global的结构,它不允许您轻松迭代

您可以使用这个函数,它的目的是重新组织数据结构

function reArrayFiles(&$file_post) {

    $file_ary = array();
    $file_count = count($file_post['name']);
    $file_keys = array_keys($file_post);

    for ($i=0; $i<$file_count; $i++) {
        foreach ($file_keys as $key) {
            $file_ary[$i][$key] = $file_post[$key][$i];
        }
    }

    return $file_ary;
}
此函数
reArrayFiles
由PHP文档中的某个人发布:

看起来不错,你确定
if
语句或
//do more stuff
中的内容没有把事情弄糟吗?你有没有尝试过使用非ajax的常规表单提交来测试php?嗨,jeroen,你提出了一个很好的观点。我正在用PHPExcel阅读excel文件。当我对脚本进行注释时,所有3个文件都上传了!我想ss我现在的问题是我的PHPExcel脚本:/好吧,至少你知道去哪里看:-)谢谢你的提示meda!我会尝试一下,但我在上面的问题中发表了评论。当我注释掉
//do something
部分时,上传效果很好。
do something
部分正在我上传的excel文件中读取。我会尝试你的方法并让你知道!哦,好吧,那么问题就不是上传部分了
if(isset($_FILES['file']['tmp_name'], $_POST)) {
    $files = reArrayFiles($_FILES['file']);

    foreach ($files as $file) {
        $temp = $file['tmp_name'];
        $path = 'uploads/'.$file['name'];
        if(move_uploaded_file($temp, $path)){
            echo 'Upload succesful';
        }else{
            echo 'failed to upload';
        }
    }
}else{
    echo 'file not uploaded';
}