Php 将$\u文件传递到类中进行处理

Php 将$\u文件传递到类中进行处理,php,file-upload,Php,File Upload,我目前有一份只能由注册用户填写的查询提交表 表单的一部分允许用户上传一个文件,将其附加到查询中 我试图做的是将$\u FILES变量传递给类文件进行处理(使用),因为我希望文件名采用以下格式: 查询ID\u userID\u fileName.ext 是否可以将表单$\u POST数据与$\u文件数据一起传递给类 我试图实现的一个例子如下: if (isset($_POST['submit_enquiry'])) { $enquiry = new Enquiry(); $enqu

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

表单的一部分允许用户上传一个文件,将其附加到查询中

我试图做的是将
$\u FILES
变量传递给类文件进行处理(使用),因为我希望文件名采用以下格式:

查询ID\u userID\u fileName.ext

是否可以将表单
$\u POST
数据与
$\u文件
数据一起传递给类

我试图实现的一个例子如下:

if (isset($_POST['submit_enquiry'])) {
    $enquiry = new Enquiry();
    $enquiry->newEnquiry($_POST, $_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
                )

        )

)
然后在问询课上:

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);
    }
}
打印
$\u文件
可提供以下信息:

if (isset($_POST['submit_enquiry'])) {
    $enquiry = new Enquiry();
    $enquiry->newEnquiry($_POST, $_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文件丢失一样,因为它无法处理要上载的文件。在尝试实现此解决方案时,我是否错过了任何明显的问题?

您只需在文件名前添加post值:

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

// do upload

如果您只有少量的$u POST输入,请将它们保存为净化变量,并通过函数将它们作为参数单独发送(正如Phil所说)。

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


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

变量始终是变量。您发现了什么确切的问题?已使用更多信息更新了问题:)能否检查tmp文件夹中是否仍存在这些文件?请避免将方法参数命名为与任何超级全局参数相同的名称。尝试将其更改为
公共函数newEnquiry(array$postData,array$fileData)
或类似的内容(对于您的三种方法)@Phil-我忽略了这一点,但很可能就是答案。你应该这样贴。