假设我有一个send.php
文件,其中包含获取网站URL的功能(例如,取消订阅电子邮件),但电子邮件是由cron命令自动发送的,在这种情况下似乎是siteurl将无法正常工作,因为本地脚本根本没有URL?
当然,我可以在send.php
中准确设置正确的网址,但如果我不想这样做,是否有任何解决方案?
修改
//siteurl in send.php
function siteURL(){
$protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$domainName = $_SERVER['HTTP_HOST'];
return $protocol.$domainName;
}
cron
#cron to excude send.php
*/1 * * * * /usr/bin/php /pathto/send.php
答案 0 :(得分:2)
将URL传递给cron脚本,例如作为环境变量或CLI参数:
*/1 * * * * SITE_URL=example.com /usr/bin/php /pathto/send.php
# or
*/1 * * * * /usr/bin/php /pathto/send.php example.com
在剧本中:
$siteURL = getenv('SITE_URL');
// or
$siteURL = $argv[1];
这是a)更好的替代方案a)通过网络服务器公开展示你的cron脚本,以及b)在非常需要它的情况下通过HTTP请求。
答案 1 :(得分:1)
将curl
或wget
与完整网址一起使用。
e.g:
* * * * * wget http://example.com/send.php
或:
* * * * * curl http://example.com/send.php
<强>更新强>
以下是一些差异:curl vs Wget
顺便说一下,我也使用了fetch
,它缺少上面两个选项中的大多数选项,但它是我最喜欢的操作系统的本机,并且在下载单个页面时完成相同的工作。