代码之家  ›  专栏  ›  技术社区  ›  davewoodhall

PHP$\u文件不使用所有文件输入

  •  -1
  • davewoodhall  · 技术社区  · 7 年前

    我必须修补一个PHP邮件解析器。问题是 $_FILES <input type="file" name="form.steps.0.field.4" /> 问题是,下一个输入与名称递增的输入相同,如下所示: <input type="file" name="form.steps.0.field.5" /> .

    当循环 $\u文件

    foreach($_FILES as $input) {
        ...
    }
    

    $\u文件 <输入类型=“文件”名称=“形式.步骤.0.字段.4“/> ,而第二个文件输入被视为文本,其值为 C:\\fakepath\\ {文件名} .

    <input type="file" name="files[]" /> ,如何实现?

    编辑:

    var_dump 属于 $\u文件

    array(1) {
        ["files"]=>
            array(5) {
                ["name"]=>
                    array(1) {
                        [0]=>
                        string(22) "Checklist-template.pdf"
                    }
                ["type"]=>
                    array(1) {
                        [0]=>
                        string(15) "application/pdf"
                    }
                ["tmp_name"]=>
                    array(1) {
                        [0]=>
                        string(14) "/tmp/phpZxkSFz"
                    }
                ["error"]=>
                    array(1) {
                        [0]=>
                        int(0)
                    }
                ["size"]=>
                    array(1) {
                        [0]=>
                        int(115033)
                }
            }
        }
    

    编辑#2

    添加操作(用于前端和后端):

    add_action('wp_ajax_sp_form_submit', 'spForm_submit', 10, 1);
    add_action('wp_ajax_nopriv_sp_form_submit', 'spForm_submit', 10, 1);
    

    执行数据的PHP:

    function spForm_submit(){
        if(!(is_array($_POST) && defined('DOING_AJAX') && DOING_AJAX)){
            return;
        }
        var_dump( $_FILES );
        die();
    }
    

    带有AJAX调用的JS:

    $('.sp-form .btn-submit').unbind('click').bind('click', function(e){
        e.preventDefault();
        e.stopPropagation();
    
        $('input[type="hidden"]', form).each(function(){
            data[$(this).attr('name')] = $(this).val();
        });
    
        var fd = new FormData(),
            file_inputs = $('input[type="file"]', form);
    
        $.each($(file_inputs), function(i, obj) {
            $.each(obj.files,function(j,file){
                fd.append('files[' + j + ']', file);
            });
        });
    
        function appendFormdata(FormData, data, name, cback){
            name = name || '';
            if (typeof data === 'object'){
                $.each(data, function(index, value){
                    if (name === ''){
                        appendFormdata(FormData, value, index, cback);
                    } else {
                        appendFormdata(FormData, value, name + '['+index+']', cback);
                    }
                });
            } else {
                FormData.append(name, data);
            }
        }
    
        appendFormdata(fd, {form: data}, null);
        fd.append( 'action', 'sp_form_submit' );
    
        $.ajax({
            url         : window.forms_cback, // AJAX URL
            type        : "POST",
    
            data        : fd,
            contentType : false,
            processData : false,
            dataType    : "json",
            success     : function(response) {
                // removed for the purpose of the post
            }
        });
    });
    

    以及 数组:

    [“文件”]=>
    [“名称”]=>
    阵列(1){
    }
    阵列(1){
    [0]=>
    }
    [“tmp\u name”]=>
    阵列(1){
    字符串(14)“/tmp/phpZxkSFz”
    }
    阵列(1){
    [0]=>
    整数(0)
    }
    [“大小”]=>
    阵列(1){
    内景(115033)
    }
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   davewoodhall    7 年前

    正如巴尔马所指出的,我的问题不在我的范围内 $_FILES 数组,但在我的文件数据操作中有一个输入错误。

    Quote :

    你打错了。在 fd.append('files[' + j + ']', file); 变量应为 i j