【发布时间】:2012-01-22 19:21:00
【问题描述】:
当用户上传大量文件且 Internet 连接速度较慢时,我会尝试检测 PHP 脚本执行超时:我应该只警告用户超时。
我在我的upload.php 和on_shutdown() 中使用register_shutdown_function() 和connection_status(),我创建了一个$timeout 标志以在complete.php 中使用来检测超时。
问题是结果完全错误:我有一个超时致命错误(没关系),一个需要致命错误(在函数require($require),好像$require 是空的) 和 complete.php 未显示。
太糟糕了,我不知道我哪里错了。这是(短版)upload.php 脚本:
<?php
register_shutdown_function('on_shutdown');
$require = 'complete.php'; // Complete page
sleep(50); // fake timeout for testing
// Do stuff, save files, insert into database...
// This always invoked
function on_shutdown()
{
global $require;
$timeout = connection_status() == 2;
require($require);
}
?>
...这是complete.php:
<!DOCTYPE html>
<html>
<head>
<title>Upload complete</title>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
</head>
<body>
<?php if ($timeout) { ?><!-- is timeout? -->
<p>Upload process took too much time, results are unpredictable.</p>
<?php } ?>
</body>
</html>
【问题讨论】:
-
为什么不在上传页面上使用
set_time_limit(0)让他们上传文件?我只是问... -
顺便说一句,当你第一次声明
$require时,除非我弄错了,否则你应该使用global $require = 'complete.php';。
标签: php file-upload upload timeout