在没有cron的情况下,在外部web服务器上执行脚本


Execute a script at certain times on external web server without cron

我有一个网站,它是托管在一个外部网络托管服务,其中除其他事项,允许用户订阅事件,并被添加到注册列表。

我希望能够在事件发生前一天通过电子邮件提醒这些用户,以更新的位置信息等提醒他们。

目前,我的主机服务不支持cron作业,我认为可以提供一些方法来实现这一点。

我有一个想法,当任何用户访问最接近我发送电子邮件的时间的首页时执行该函数,但这似乎是一个糟糕的选择,让我认为必须有一个更好的方法。

我知道一些公司将执行您的脚本在一个特定的时间收费,但我希望能够更灵活地配置它直接在我的网站。

我想知道PHP中是否有任何API可以让我做到这一点,或者如果我的想法是实现我的目标的最佳方式,或者我错过了一些明显的…

感谢您的帮助。

看看mcrypt_encryptmcrypt_decrypt函数。您可以在外部页面上设置一个PHP脚本,并将get参数作为输入。该输入将用作身份验证,因此未经授权的人不会运行该脚本。使用上述函数对授权密钥进行加密和解密。这可以是您喜欢的任何内容,但我建议您创建一些随机的内容,例如:

$authMessage = 'yourMessage' . date('Y-m-d', time());

进行编码,然后通过get发送。加密的信息每天都会发生变化,因此破解起来会明显困难。

在远程服务器上,您读取来自get的加密消息。使用您用于编码的相同密钥解码它并检查是否一切正常(这意味着,如果字符串被正确解码并且日期是今天的日期)。如果一切正常,可以启动脚本。

您也可以使用更简单的方法,如涉及md5():

在主服务器上使用get参数调用页面,如下所示:

$get = md5('your secret phrase, the longer the better'.date('Y-m-d', time()));
在您的远程服务器上,当带有get参数的请求到来时,执行同样的操作,并检查您生成的md5是否等于来自get的md5。如果是,运行脚本。

当然你必须以某种方式远程调用你的远程服务器…但我假设,您能够在主服务器上运行cron,因此这不会是一个问题。

如果你使用的是MySQL数据库,那么MySQL事件管理可以为你提供一个解决方案;当然,这一切都取决于您的主机提供商是否允许您将MySQL配置为shell执行PHP脚本来处理邮件。