问题:填写表单时,我需要能够上传多个文件,然后在提交表单时对其进行处理,以便处理所有下载的文件。
在客户端进行异步文件上传我使用隐藏的iframe(因为IE7支持要求)。成功上传文件后,我会将有关此文件的信息添加到表单中($_FILES["file"]["name"]
和$_FILES["application_add_file"]["tmp_name"]
)。
当表单被提交时,我收到了以下文件的数组:
files[0][file_path]:/tmp/phpR8eHLx
files[1][file_path]:/tmp/phpDVh3Aw
如何获取这些文件进行处理?
我尝试file_get_contents($_POST['files'][0]['file_path'])
,但预期会返回错误
Warning: file_get_contents(/tmp/phpR8eHLx): failed to open stream: No such file or directory
我知道我可以在每个文件上传时使用move_uploaded_file()
,但是如果我这样做,我可以处理用户上传某些文件但不提交表单的情况?据我所知,那些上传的文件将保留在我的服务器上,我需要以某种方式手动删除它们(并且我猜想在tmp目录文件中会在一段时间后自动删除)。
更新:我动态地将<input type="file">
添加到表单并立即提交所有文件。我想将上传的文件转换为base64并将其发送到另一台服务器。我应该使用move_uploaded_file()
(出于安全原因吗?)或者我可以在tmp目录中使用它?
答案 0 :(得分:1)
每次上传文件时都必须move_uploaded_file()
,将这些内容存储在上传目录中,等待表单提交。
然后,您可以在服务器上设置一个cron作业来监视旧文件,因此如果某个用户没有提交表单,该作业将在预定义的时间后清理它。
我还建议您不要将这些文件的服务器路径发送回客户端,而是将它们存储在服务器端,可以放在Session上,也可以存储在数据库中。