我有以下PHP文件:
fileUploadForm包含以下输出:
handleUpload.php执行以下操作:
脚本在大文件上传时遇到问题。为了测试目的,我已将有关文件上传的所有php.ini设置设置为非常大。所以我不相信这个问题是配置问题。
以下行为让我感到困惑:
当我看到文件在tmp中增长时,文件上传继续远远超过设置的max_input_time。我的理解是,一旦超过max_input_time,脚本将终止,反过来,文件也会上传。有关为何没有发生这种情况的任何想法?
如果我中途停止文件上传并刷新fileUploadForm(不重新提交),脚本将输出与handleUpload中设置的文件验证相关的错误消息。这似乎表明即使文件上传没有完成,handleUpload中的代码行也在执行。 php是否执行脚本并异步接收表单数据?我原以为脚本会等到所有表单数据都被收到后再执行任何代码。但这种假设与我所看到的行为相矛盾。数据POST /脚本执行的顺序是什么?
当max_input_time以及其余的配置值被设置为非常大以进行测试时,将完成非常大的上传。然而,剧本的其余部分似乎已经死亡。即病毒扫描和文件移动永远不会发生,数据库也不会更新。我为脚本中的每个操作设置了错误处理,但没有抛出任何错误。这个页面似乎已经死了。关于为什么会发生这种情况/如何发现这种错误的任何想法?
提前致谢。 凯特
答案 0 :(得分:0)
第二个问题的引用(至少部分地)回答了另外两个问题:
I would have thought that the script would wait until all form data was received before executing any code.
为了使PHP能够处理所有输入数据,Apache(或您正在使用的任何HTTP服务器)将首先等待文件上载完成,然后才会处理PHP脚本。因此,PHP的max_input_time
检查将在文件上载过程完成后发挥作用。
现在,在这种情况下,你可能会问为什么你的病毒扫描,文件移动和任何其他脚本程序都没有发生,因为任何与PHP相关的计时器应该从脚本的执行开始是合乎逻辑的,这应该是在收到所有输入数据后发生。嗯,应该是这样的,说实话 - 我对此的看法是一种黑暗中的镜头,但是......要么超出一些其他限制,要么脚本是根据请求启动的,但是被暂停httpd直到准备继续并有效地进行 - 其中一些计数器可能会在此期间过期。
我不知道如何回答您的第二个问题,因为刷新意味着所有数据都会重新发布并应重新处理。我怀疑你是否会做另一件事 - 只需加载handleUpload.php而无需重新提交表单,但我有可能提到。如果第一个请求意外终止,那么可能会有一个猜测 - 第二次发生了一些垃圾收集和/或恢复过程。
希望能稍微清理一下。