我有一个脚本,它在我自己的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脚本?
答案 0 :(得分:0)
阻止PHP脚本运行的唯一方法是在服务器端进行人工干预,这是从控制台中删除脚本。但是,如果您可以访问PHP脚本的源代码,则可以自己编写功能。
编辑:
您显然需要做的就是编写脚本,一次下载几封邮件,比如五或十。从iFrame调用一个脚本下载这些邮件,然后在完成后返回一些HTML和AJAX:
然后,您将更改“取消”按钮,以便将隐藏字段设置为0,并且脚本将终止,而不是在下一个周期继续。
您可以将一次处理的邮件数量设置为较低的数字,例如2或1,这将使取消按钮更具响应性,以换取使用更多的HTTP请求。