通过cron执行PHP - 未指定输入文件

时间:2009-12-04 18:28:53

标签: php cron

我正在使用以下命令通过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?

6 个答案:

答案 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