【问题标题】:php script that runs on the server without a client request在没有客户端请求的情况下在服务器上运行的 php 脚本
【发布时间】:2010-11-23 09:07:58
【问题描述】:

我正在开发一个需要在服务器上运行 php 脚本而无需任何请求的网站, 它是一个机器人脚本,它会(不是全职,但至少每天一次)检查客户帐户,并在发生某些事情时向客户发送警报消息。

任何想法都值得赞赏。

【问题讨论】:

    标签: php administration bots


    【解决方案1】:

    使用 cron 作业来完成它http://www.cronjobs.org/

    您可以无限期地以您喜欢的任何时间间隔自动调用脚本。如果他们很好,您的托管服务提供商应该支持他们。

    您还应该考虑在页面末尾放置一个唯一键

    即。 www.yoursite.com/cronjob.php?key=randomstring

    然后仅在密钥正确的情况下运行脚本,以防止机器人和其他用户在您不希望它运行时运行脚本。

    【讨论】:

    • 我认为要使用 cron 作业,我必须访问我无法访问的服务器,所以我需要在 php 中完成所有操作
    • 由于 PHP 是一种脚本语言,您无法编写代码让它每隔一段时间自动运行。它需要以某种方式调用,最好的调用方式是运行 Cron。
    • @Evernoob - “因为 PHP 是一种脚本语言” - 例如,您可以在“C”中做到这一点吗?怎么样?:)
    【解决方案2】:

    假设您需要在 linux 上执行此操作,您可以从浏览器和 CLI 运行任何 php 脚本。

    你可以运行一个简单的 php 脚本: <? echo "Ana are mere"; ?>

    像这样: php -f ./index.php

    注意文件权限,任何可能潜入代码中的错误、内存泄漏或未分配变量现在都将变得非常明显,因为该进程将连续运行。

    如果您不希望它一直在后台运行,请查看 crontab (http://unixgeeks.org/security/newbie/unix/cron-1.html) 以便能够定期启动作业。

    -- 编辑--

    看看php execute a background processPHP: How to return information to a waiting script and continue processing

    基本上你想启动一个后台进程,你可以通过在你自己的脚本上使用 exec() 或 fsockopen() 或 file_get_contents() 来执行此操作,如果没有权限访问 exec,或套接字函数。 另请查看http://us2.php.net/manual/en/function.session-write-close.php,以便“后台脚本”不会“阻止”请求和http://us2.php.net/manual/en/function.ignore-user-abort.php

    【讨论】:

      【解决方案3】:

      如果您无法创建 cron 作业,请创建一个执行您想要的操作的页面,并在另一台机器(可能是您的 PC?)上创建一个计划任务,该任务每天都会在特定时间出现并点击该页面.

      这确实是一个 hack,但如果您绝对无法设置 cron 作业,那将是一个选择。

      【讨论】:

        【解决方案4】:

        正如EvernoobQuamis 所说,您想要一个cron 作业(UNIX/Linux/Mac OS)或一个计划任务(MS Windows)。此外,您可以使用 PHP 命令行界面 (CLI) 运行 PHP 脚本,在这种情况下,您可以调用 PHP 可执行文件,然后调用您的脚本名称。作为替代方案,您可以使用wget 之类的工具(适用于所有平台)来调用 PHP 脚本,就像有人在 Web 浏览器的位置栏中键入 URL 一样。

        【讨论】:

          【解决方案5】:

          无法像您想象的那样使用 php 脚本。因为它是在某个地方发出请求后通过 apache 执行的。

          即使您在脚本中执行 while(1),apache/php 也会自动停止您的脚本。 回复您的评论,是的,您需要 ssh 访问权限才能执行此操作,除非您的 Web 界面允许您添加 cronjob。

          也许您可以编写一个服务,该服务可以与另一台服务器上的程序一起执行并完成这项工作。

          【讨论】:

            【解决方案6】:

            如果您无法访问服务器,最简单的方法可能是通过浏览器访问它,但这需要您或外部脚本每天以相同的时间间隔访问该 URL。您还可以设置一个Selenium 测试套件,该套件按计划在本地运行并点击页面。不过,如果 Selenium 可以做到这一点,我不是 100%,您可能需要一些 3rd-party 应用程序才能实现。

            您可以尝试的其他方法是了解如何使用 PHP 的进程控制功能 (link)。这些将允许您创建一个作为守护程序并在后台运行的脚本。您可以这样做以保持脚本在服务器上运行并以编程的时间间隔触发命令。不过,您仍然需要一些方法让它第一次运行(浏览器请求或通过命令行)。

            【讨论】:

              猜你喜欢
              • 2011-01-02
              • 2021-06-15
              • 2011-12-23
              • 1970-01-01
              • 1970-01-01
              • 2016-02-28
              • 1970-01-01
              • 2018-05-03
              • 2014-05-11
              相关资源
              最近更新 更多