在没有客户端请求的情况下在服务器上运行的php脚本

时间:2009-08-27 13:02:55

标签: php administration bots

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

任何想法都表示赞赏。

6 个答案:

答案 0 :(得分:8)

假设您需要在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

答案 1 :(得分:3)

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

您可以无限期地自动调用脚本。如果他们是好人,您的托管服务提供商应该支持他们。

您还应该考虑在页面末尾添加一个唯一的密钥

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

然后只在密钥正确时才运行脚本,以防止机器人和其他用户在您不希望它运行时运行该脚本。

答案 2 :(得分:1)

如果你不能创建一个cron作业,那么创建一个能够满足你想要的页面,并在另一台机器(可能是你的PC上)上创建一个计划任务,这个计划就会在每天的特定时间点亮并点击该页面

这真的是一个黑客,但如果你绝对不能设置一个cron工作,那将是一个选择。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:1)

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

您可以尝试的其他方法是查看使用PHP的过程控制函数(link)。这些将允许您创建一个作为deamon的脚本并在后台运行。您可以这样做以使脚本在服务器上运行并以编程的间隔启动命令。你仍然需要一些方法让它第一次运行(浏览器请求或通过命令行)。