【发布时间】:2012-01-13 17:41:20
【问题描述】:
我有以下 PHP 文件:
- fileUploadForm.php
- handleUpload.php
fileUploadForm 包含以下输出:
- 输出 $_SESSION['errorMessage'](如果有)
- 输出一个上传到handleUpload.php的文件上传表单
handleUpload.php 执行以下操作:
- 验证会话(如果验证失败,则重定向到登录)
- 验证文件(如果验证失败则设置 $_SESSION['errorMessage'])
- 扫描文件以查找病毒
- 移动文件
- 更新数据库
脚本在上传大文件时遇到问题。出于测试目的,我已将有关文件上传的所有 php.ini 设置设置为非常大。所以我不认为这个问题是配置问题。
以下行为让我感到困惑:
当我看到文件在 tmp 中增长时,文件上传继续远远超过设置的 max_input_time。我的理解是,一旦超过 max_input_time,脚本就会终止,而文件上传也会终止。关于为什么没有发生这种情况的任何想法?
如果我在中途停止文件上传并刷新 fileUploadForm(不重新提交),脚本将输出与在 handleUpload 中设置的文件验证相关的错误消息。这似乎表明即使文件上传没有完成,handleUpload 中的代码行仍在执行。 php是否执行脚本并异步接收表单数据?我原以为脚本会等到收到所有表单数据后再执行任何代码。但是这个假设与我所看到的行为相矛盾。数据 POST / 脚本执行的顺序是什么?
当 max_input_time 以及其他配置值设置为非常大以进行测试时,将完成非常大的上传。但是,脚本的其余部分似乎死了。即病毒扫描和文件移动永远不会发生,数据库也不会更新。我为脚本中的每个操作设置了错误处理,但没有引发错误。该页面似乎已经死了。关于为什么会发生这种情况/如何捕获此类错误的任何想法?
提前致谢。 凯特
【问题讨论】: