我正在使用以下命令通过cron执行PHP文件
php -q /home/seilings/public_html/dvd/cron/mailer.php
问题是我有一个包含在执行中的文件,用于确定要加载的配置....如下所示:
if (!strstr(getenv('HTTP_HOST'), ".com")) {
$config["mode"] = "local";
} else {
$config["mode"] = "live";
}
当应该加载LIVE配置时,cron正在加载LOCAL配置。我尝试使用http:// URL到文件而不是绝对路径,但它没有找到该文件。我是否需要更改命令才能使用其中的URL?
答案 0 :(得分:7)
另一个简单的解决方案:
的cron:
php -q /home/seilings/public_html/dvd/cron/mailer.php local
PHP:
if (!empty($argv[0])) {
$config["mode"] = "local";
} else {
$config["mode"] = "live";
}
答案 1 :(得分:5)
使用此php_sapi_name()
检查脚本是否在命令行上调用:
if (php_sapi_name() === 'cli' OR !strstr(getenv('HTTP_HOST'), ".com")) {
$config["mode"] = "local";
} else {
$config["mode"] = "live";
}
如果要在命令行上使用“live”,请使用以下代码:
if (php_sapi_name() === 'cli' OR strstr(getenv('HTTP_HOST'), ".com")) {
$config["mode"] = "live";
} else {
$config["mode"] = "local";
}
答案 2 :(得分:0)
当您使用cron运行php时,很可能环境变量“HTTP_HOST
”将不会被设置(或为null),并且当为strstr
函数赋予null时,{{1} }}返回strstr
这就是模式设置为false
的原因。
答案 3 :(得分:0)
当您通过cron执行命令而不是命令行时,您可能会获得一组不同的环境变量。您可能需要编写一个包装脚本,在运行PHP命令之前按照您希望的方式设置环境。
答案 4 :(得分:0)
HTTP_HOST
等环境变量仅在您在Web服务器下运行php scrints时才存在。但您可以在crontab配置中手动添加它:
## somewhere in crontab config
HTTP_HOST=somthing.com
15 * * * * /path/to/your/script > /dev/null 2>&1
这将使您的脚本认为它正在生产环境中运行。
答案 5 :(得分:0)
如果你感觉很懒,并且不想确保所有这些env变量都有效,你可能想尝试使用cron运行:
lynx -dump http://url.to.your.script > /dev/null