【问题标题】:How can a PHP script NOT terminate?PHP 脚本如何不终止?
【发布时间】:2014-05-26 04:26:56
【问题描述】:

我在共享主机上并且不断地克服进程限制错误。支持人员说,如果流量很低,那是因为效率低下的脚本没有被终止。由于我在共享主机上并且只创建 .php 文件,因此我并没有真正了解仅提供页面的脚本(即当请求进来时它们由 Apache 调用并且它们创建并显示页面) ) 无法终止。

是否有可能一个脚本即使完成了它的工作也可以继续存在?有没有办法让脚本在到达文件末尾时终止而不是退出?

我的脚本是常规的 PHP 脚本,它们从数据库中获取数据,创建 HTML,然后退出。他们没有做任何特别的事情。

【问题讨论】:

    标签: php apache performance process


    【解决方案1】:

    您可以设置执行限制http://www.php.net/manual/en/function.set-time-limit.php

    如果您的意思是使用大量数据执行结果集并且不希望在所有数据都被执行之前被终止,例如为数据库中的每个用户发送邮件并等到所有用户都收到邮件然后它可以向那个发送新邮件用户 你可以使用 web cron http://www.mywebcron.com 限制仅发送 20 个用户的电子邮件,并将其发送状态更新为 true,以便仅发送为 false 发送状态

    【讨论】:

    • 谢谢,我看看当前的执行限制是多久。没有脚本应该需要 30 秒才能运行。
    【解决方案2】:

    您的 PHP 脚本在创建 HTML 的循环中运行。

    1. 这取决于您的数据库中有多少记录。
    2. 它们可能在您的查询中存在某种泄漏,这使得服务器负担沉重。
    3. 循环只会在其 JOB 完成后结束。

    请粘贴一些代码,以便我们进行调查并为您提供帮助。这个时候,我只能说上面提到的了。

    您可以跟踪脚本运行需要多长时间

    <?php 
        /* Put this first thing before the loop begins */
        echo "Start " . date("Y-m-d H:i:s"); 
    ?>
    
    <?php 
        /* Put this at the end of your script */
        echo "End " . date("Y-m-d H:i:s"); 
    ?>
    

    【讨论】:

    • 是的,有循环,但我当然要注意不要显示太多数据。例如。有 25 项限制并且有分页,所以我从数据库中获取 25 项,然后使用循环创建 HTML 列表。我认为即使在 PHP 中循环 25 也不会花费太长时间,是吗?
    • 查询泄漏是什么意思?
    • 查询泄漏:有时当我们编写查询时,我们会请求在循环中不需要的不必要信息,或者有时我们使用 INNER JOIN 和其他使 PHP 脚本占用大量系统资源的函数。跨度>
    • 您知道如何监控我的哪些 PHP 脚本需要很长时间才能运行吗?我的意思是可以在我没有管理员访问权限的共享服务器上使用的监控解决方案。
    猜你喜欢
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 2011-01-17
    • 2019-03-18
    • 2013-11-15
    • 1970-01-01
    相关资源
    最近更新 更多