Php 使用忽略用户中止并设置时间限制(0)

Php 使用忽略用户中止并设置时间限制(0),php,ajax,Php,Ajax,我在page1.php中有一个表单,它会重定向到page3.php,也会在page2.php中触发一个ajax帖子,但没有成功函数,page2.php可能需要运行一个小时,但用户不需要结果。我确实需要用户查看page2.php,但他可能会离开 我需要在page2.php中使用这两个函数吗?或者只是其中一个?还是没有?我想确保page2.php中的脚本一直运行到最后 Page1.php <form id="form" action="page2.php" method="post"&

我在page1.php中有一个表单,它会重定向到page3.php,也会在page2.php中触发一个ajax帖子,但没有成功函数,page2.php可能需要运行一个小时,但用户不需要结果。我确实需要用户查看page2.php,但他可能会离开

我需要在page2.php中使用这两个函数吗?或者只是其中一个?还是没有?我想确保page2.php中的脚本一直运行到最后

Page1.php

    <form id="form" action="page2.php" method="post">
            <!--form input elements with names-->
    </form>
    <script>
            $('#form').submit(function() {
                $.post('page3.php', {
                    var1: $('input[name="name1"]').val(),
                    var2: $('input[name="name2"]').val(),
                });                                 
            });
    </script>
Page2.php

    <?php
            ignore_user_abort(true);  // Allow user to navigate away
            set_time_limit(0);        // Allow script to run indefinitely
            // a lot of code which will run for a while - between 3 minutes and an hour
    ?>
Page3.php

    <html>
            <!--some code here including links to go to page4.php-->
    </html>
我之所以问这个问题,部分原因是我认为这些函数都没有必要,但我被告知要使用它们,但当我尝试使用它们时,即使它们已经失效;脚本停止了,它似乎仍然在处理一些东西,我担心由于这个原因,它在服务器上可能会太多。
因为我不想添加不必要的加载。

是的,为了达到当前的标准,您需要这两个函数,我的建议是将其移出http协议。如果脚本不需要客户端进一步交互,那么最好在命令行中使用,这取决于脚本实际完成的任务

一种使用理论是创建一个cron脚本,在需要的时间间隔调用它,然后它将访问page2.php将填充的队列

如果有可用的队列,cron脚本将按照当前在page2.php上所做的方式处理信息。由于您的脚本运行了很长一段时间,我建议对cron使用锁定机制,请参阅php.net/flock了解简单的文件系统锁定。如果文件已锁定,则检查该文件是否已运行

下面是一个简单的示例,您可以将其放入独立脚本中,以便通过cron进行处理:

$fp = fopen(DATA_PATH . '/locks/isLocked', 'w+');

        if (!flock($fp, LOCK_EX | LOCK_NB)) { //locks the file
            $logger->info('Already Running');
            exit(0);
        }

        fwrite($fp, time()); //write our new time so we can inspect when it ran last if needed

        try {
            if (hasQueue()) { //checks to see if any jobs are waiting in mysql
               run(); //process normally completed by page2.php
            }
        } catch (Exception $e) {
            //something went wrong here could setup a log / email yourself etc..
        }

        flock($fp, LOCK_UN); //unlock the file

哦,哇,这对我来说都是非常新的,你能告诉我一些链接/文档吗?更新了简单的文件锁定示例,介绍了如何通过cron和mysql使用设置php脚本。最好检查您各自控制面板的文档以及使用mysql的php.net/mysql