将$ _FILES传递给类进行处理

时间:2011-08-23 10:51:10

标签: php file-upload

我目前有一份查询提交表格,只能由注册用户填写。

表单的一部分允许用户上传要附加到他们查询的文件。

我尝试做的是将$_FILES变量传递给类文件进行处理(使用class.upload.php),因为我希望文件名采用以下格式:

enquiryID_userID_fileName.ext

是否可以将表单$_POST数据与$_FILES数据一起传递给某个类?

我试图实现的目标如下:

if (isset($_POST['submit_enquiry'])) {
    $enquiry = new Enquiry();
    $enquiry->newEnquiry($_POST, $_FILES);
}

然后在咨询班:

class Enquiry {

    private function _processFiles($_FILES, $caseID) {
        ...
    }

    private function _processForm($_POST) {
        ...
    }

    public function newEnquiry($_POST, $_FILES) {
        $caseID = $this->_processForm($_POST); // returns caseID
        $this->_processFiles($_FILES, $caseID);
    }
}

$_FILES的印刷品给出了以下内容:

Array
(
    [file] => Array
        (
            [name] => Array
                (
                    [0] => Blue hills.jpg
                    [1] => Sunset.jpg
                    [2] => 
                )

            [type] => Array
                (
                    [0] => image/jpeg
                    [1] => image/jpeg
                    [2] => 
                )

            [tmp_name] => Array
                (
                    [0] => /tmp/phpwyLp86
                    [1] => /tmp/phpKJa4iw
                    [2] => 
                )

            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                    [2] => 4
                )

            [size] => Array
                (
                    [0] => 28521
                    [1] => 71189
                    [2] => 0
                )

        )

)

尝试处理文件时,几乎就像tmp文件已丢失一样,因为它无法处理要上载的文件。我试图实施这个解决方案是否有任何明显的问题?

2 个答案:

答案 0 :(得分:2)

脚本完成后,将删除上传tmp文件。只要它没有完成,文件仍然存在。

但是,如果您移动它们或者表单符合多个请求(例如,多步骤表单,需要重新提交的验证),则需要构建自己的tmp文件。

答案 1 :(得分:0)

您只需将post值添加到文件名:

foreach($_FILES as $file){
   $file['name']=$_POST['enquiryID'].'_'.$_POST['userID'].'_'.$file['name'];
}

// do upload

如果您只有几个$ _POST输入,请将它们保存为已清理的变量,并将它们作为参数单独发送到您的函数中(如Phil所说)。