是否可以序列化$ _FILES?

时间:2010-08-26 13:43:53

标签: php upload

我需要模仿上传表单的工作方式。我需要将文件存储到数据库中并将$ _FILES上传到我们的文件夹中。模型的每个代码和表单本身的问题都基于遗留代码。我没有消除所有代码的直觉并重新开始。我宁愿让它成为

所以,我的目标是如何在不使用前一个表单的情况下上传文件,然后仅序列化/反序列化由filename和url组成的对象。虽然文件本身是通过复制功能而不是上传形式的故事。

3 个答案:

答案 0 :(得分:1)

是的,可以序列化$ _FILES数组;

$upload = serialize($_FILES["file"]);

答案 1 :(得分:1)

如果您的代码依赖于$_FILES变量的内容,则为yes,分配给它(无论内容是来自数据库中的序列化版本还是来自任何地方)应具有预期的行为。

一般来说,设计一个小测试是一种更好的方法,可以找出某些东西是否适合您的特定情况,而不是要求互联网上的人推测。

答案 2 :(得分:1)

任何特定请求的$ _FILES数组的唯一关键部分是...['tmp_name']部分,因为它指向PHP保存上载文件的位置。保存一个$ _FILES的副本,该副本设置为您想要测试的方式(无论您需要多少文件),然后手动将tmp_name更改为指向服务器上的实际文件,而不是PHP自动分配上传的随机垃圾名称,只要您的脚本不移动/删除/删除您指向的文件,您就可以根据需要多次重复使用数据副本。

所以,比如:

$_FILES['file1']['tmp_name'] = '/path/to/file/to/test/with';
$_FILES['file2']['tmp_name'] = '/some/other/path/or/file/for/testing';

$savedfiles = serialize($_FILES);

然后你可以坚持

$_FILES = unserialize($savedfiles);

适用于测试应用的任何地方。