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-我忽略了这一点,但很可能就是答案。你应该这样贴。