【发布时间】:2010-11-23 09:07:58
【问题描述】:
我正在开发一个需要在服务器上运行 php 脚本而无需任何请求的网站, 它是一个机器人脚本,它会(不是全职,但至少每天一次)检查客户帐户,并在发生某些事情时向客户发送警报消息。
任何想法都值得赞赏。
【问题讨论】:
标签: php administration bots
我正在开发一个需要在服务器上运行 php 脚本而无需任何请求的网站, 它是一个机器人脚本,它会(不是全职,但至少每天一次)检查客户帐户,并在发生某些事情时向客户发送警报消息。
任何想法都值得赞赏。
【问题讨论】:
标签: php administration bots
使用 cron 作业来完成它http://www.cronjobs.org/
您可以无限期地以您喜欢的任何时间间隔自动调用脚本。如果他们很好,您的托管服务提供商应该支持他们。
您还应该考虑在页面末尾放置一个唯一键
即。 www.yoursite.com/cronjob.php?key=randomstring
然后仅在密钥正确的情况下运行脚本,以防止机器人和其他用户在您不希望它运行时运行脚本。
【讨论】:
假设您需要在 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 process和PHP: 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
【讨论】:
如果您无法创建 cron 作业,请创建一个执行您想要的操作的页面,并在另一台机器(可能是您的 PC?)上创建一个计划任务,该任务每天都会在特定时间出现并点击该页面.
这确实是一个 hack,但如果您绝对无法设置 cron 作业,那将是一个选择。
【讨论】:
无法像您想象的那样使用 php 脚本。因为它是在某个地方发出请求后通过 apache 执行的。
即使您在脚本中执行 while(1),apache/php 也会自动停止您的脚本。 回复您的评论,是的,您需要 ssh 访问权限才能执行此操作,除非您的 Web 界面允许您添加 cronjob。
也许您可以编写一个服务,该服务可以与另一台服务器上的程序一起执行并完成这项工作。
【讨论】: