我开发了一个网页,我需要在特定时间自动发送电子邮件给特定用户[取决于数据库值] [无人为干扰]。
例如,我有一个名为Send_mail.php的文件。它将每天通过脚本执行一次[Not by Cron或其他方式]。请指导我们。
提前致谢。
答案 0 :(得分:3)
我能想到的唯一一个不会调用cron
的选项就是拥有一个脚本,一旦触发,它将继续无限期地运行。到目前为止,我同意其他所有人的意见,这不是php脚本的意图, cron
明确要做的事情。
但是用php做这件事会非常棘手。您必须以不是来自浏览器的方式启动脚本(因为关闭浏览器会终止脚本),而不是来自命令行(除非启动脚本的用户始终登录服务器端)。
更不用说以这种方式运行脚本可能会在内存使用方面随着时间的推移而增加,并且可能会使任何其他活动减慢到爬行速度,这不是您想要的,我想。
基本上,当脚本告诉它时,php脚本会运行。如果您希望它每天可靠地运行,则需要打开脚本。如果你不能保证有人会访问网站上的某个页面至少一次(这样你就可以使用Marius的方法),那么你必须有一些服务器端程序为你运行它(听起来很像cron
对我来说。
如果您的问题不在于cron
,而只是让脚本完成所有工作,您可以让cron每天打开脚本。
答案 1 :(得分:2)
你说'不是由cron'。为什么? Cronjobs正是出于这种情况!没有更好的方法可以做到这一点!
答案 2 :(得分:1)
不寻常不使用cron。如果可以通过Web访问,则可以触发http://yourwebsite.com/Send_mail.php的脚本。这可以来自使用计划在任何一天执行GET请求的软件的任何计算机,等等。这是基于客户端的请求。
答案 3 :(得分:1)
如果不是cron,你至少需要一些能让车轮每天旋转一次的东西。
可靠的东西,能够无人值守地运行数天,数月,数年,直到网络服务器热死亡。
你可以写。在PHP中,毫无疑问。这将是您的网络服务器上的守护进程。
必须在每次启动时启动。 它应该检查最后一个工作何时运行并决定是否该运行另一个工作。 每天,它可以睡觉()几个小时(比如1或2)并检查发送时间是否过去,然后运行它的工作然后再回去睡觉。
它无法在apache mod_php或fastcgi中运行。 这些脚本会在一段时间后死掉。说30秒作为经验法则。
它可以通过webserver程序启动,而不是在启动时启动,是的,通过system()
调用php命令行可执行文件上的nohup
,类似于:
<?php system('nohup php jobrunner.php'); ?>
jobrunner应该检查自己的其他副本是否已经运行,并且在这种情况下自杀。如果没有输入密码,Web用户就无法启动或重新启动它。
从头开始重新开发可能会产生新的错误和安全风险。
所以,是的,它可以完成。
并且,不,我认为不应该这样做,如果不是因为需要非常自定义处理日常工作的巨型项目。
一般来说,cron是安全的,快速的,保密的,系统管理员都知道,被广泛接受,已经在运行,并且可以在不提供命令行或系统()访问权限的廉价托管公司中使用。
答案 4 :(得分:0)
您可以使用cronjobs执行此操作。
如果cronjob不可用,并且每天至少访问一次该网站,则将代码放入页面中。每次加载页面时,它都会检查是否应该向用户发送电子邮件,或者当天是否已发送电子邮件。