我得到了一个脚本,它检查我自己的Webmail中的邮件。我想添加取消按钮。因此,如果用户看到检查所有邮件需要太长时间(他有100封新邮件),他可以取消处理(例如,第31封邮件)。
我在iframe中运行这个脚本:
public function checkEmailAction() {
set_time_limit(0);
while (@ob_end_flush()) {
}
ob_implicit_flush(1);
$strError = '';
echo "";
$accountId = Zend_Json::decode($this->_getParam('account_id'));
if (!$this->mail_account->hasAccessToAccount($accountId)) {
$strError = 'Insufficient access rights';
}
if (empty($strError)) {
try {
$this->mail->sync($accountId);
} catch (MailException $e) {
Mail_LoaderDispatcher::change('Error. ', 100, null, true);
if($e->getMessage() != "Can't connect to email account.") {
Zend_Registry::get('log')->debugErrorToFile('Mail Error: ' . $e, '', 'mail');
}
}
} else {
Mail_LoaderDispatcher::change($strError, 100, null, true);
}
echo "";
exit();
}
在取消按钮点击事件,我添加了这样的代码,它破坏iframe, ,但不停止php进程:
<>以前var ifr = $ (' # mail_iframe_check_email ');ifr.remove(); 之前但是php脚本继续工作并且所有的邮件都被下载了:(
也许,有一些方式上取消按钮点击发送一些参数(通过Cookie或Get) iframe和停止php脚本运行?
停止PHP脚本运行的唯一方法(不需要在服务器端进行手动干预)是从控制台终止脚本。但是,如果您可以访问PHP脚本的源代码,则可以自己编写该功能。
编辑:
你显然要做的是编写脚本一次下载几封邮件,比如五封或十封。有一个脚本调用从iFrame下载这些邮件,然后当它完成返回一些HTML和AJAX:
- 检查父帧是否有隐藏字段,如果隐藏字段被设置为1,
- 重新加载自身以处理接下来的5-10封邮件。
然后更改Cancel按钮,使其将隐藏字段设置为0,脚本终止而不是继续下一个循环。
您可以将一次处理的邮件数量设置为较低的数字,例如2或1,这将使取消按钮响应更快,以换取使用更多的HTTP请求。