2

我正在一个站点上工作,该站点需要在服务器上运行一个 php 脚本而没有任何请求,它是一个 bot 脚本,它保持(不是全职,但至少每天一次)检查客户帐户并在发生某些事情时向客户发送警报消息。

任何想法表示赞赏。

4

6 回答 6

8

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

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

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

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

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

- 编辑 -

看看php执行后台进程PHP:如何将信息返回到等待脚本并继续处理

基本上你想启动一个后台进程,你可以通过在你自己的脚本上使用 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

于 2009-08-27T13:07:31.473 回答
3

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

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

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

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

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

于 2009-08-27T13:05:13.033 回答
1

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

这确实是一个 hack,但如果你绝对不能设置一个 cron 作业,那将是一个选择。

于 2009-08-27T13:09:39.070 回答
1

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

于 2009-08-27T13:09:46.310 回答
1

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

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

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

于 2009-08-27T13:10:47.073 回答
1

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

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

于 2009-08-27T13:10:54.967 回答