如何停止加载iframe和php进程

时间:2011-04-18 15:40:55

标签: php iframe

我有一个脚本,它在我自己的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脚本?

1 个答案:

答案 0 :(得分:0)

阻止PHP脚本运行的唯一方法是在服务器端进行人工干预,这是从控制台中删除脚本。但是,如果您可以访问PHP脚本的源代码,则可以自己编写功能。


编辑:

您显然需要做的就是编写脚本,一次下载几封邮件,比如五或十。从iFrame调用一个脚本下载这些邮件,然后在完成后返回一些HTML和AJAX:

  1. 检查父框架是否有隐藏字段,如果该隐藏字段设置为1,则
  2. 重新加载以处理下5-10封邮件。
  3. 然后,您将更改“取消”按钮,以便将隐藏字段设置为0,并且脚本将终止,而不是在下一个周期继续。

    您可以将一次处理的邮件数量设置为较低的数字,例如2或1,这将使取消按钮更具响应性,以换取使用更多的HTTP请求。