代码之家  ›  专栏  ›  技术社区  ›  Ben

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

  •  4
  • Ben  · 技术社区  · 15 年前

    我使用以下命令通过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";
    }
    

    cron在应该加载实时配置时正在加载本地配置。我试过用http://url来代替绝对路径,但没有找到文件。是否需要更改命令以使用其中的URL?

    6 回复  |  直到 15 年前
        1
  •  5
  •   powtac    15 年前

    用这个 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
  •  7
  •   inakiabt    15 年前

    另一个简单的解决方案:

    克伦:

    php -q /home/seilings/public_html/dvd/cron/mailer.php local
    

    PHP:

    if (!empty($argv[0])) {
        $config["mode"] = "local";
    } else {
        $config["mode"] = "live";
    }
    
        3
  •  0
  •   NawaMan    15 年前

    当使用cron运行php时,很可能是环境变量' HTTP_HOST '将不被设置(或为空),当为 strstr 函数, 字符串查找 收益率 false 这就是为什么模式设置为 "local" .

        4
  •  0
  •   Jim Lewis    15 年前

    当您通过cron执行命令时,可能会得到一组不同的环境变量,而不是命令行。在运行php命令之前,您可能需要编写一个包装脚本,该脚本将环境设置为您想要的方式。

        5
  •  0
  •   Ivan Nevostruev    15 年前

    环境变量,如 HTTP_HOST 只有在Web服务器下运行php scrints时才存在。但您可以在crontab配置中手动添加它:

    ## somewhere in crontab config
    HTTP_HOST=somthing.com
    15 * * * * /path/to/your/script > /dev/null 2>&1
    

    这将使您的脚本认为它在生产环境中运行。

        6
  •  0
  •   pcp    15 年前

    如果您感到懒惰,不想确保所有这些env变量都正常工作,您可能希望尝试使用cron运行:

    lynx -dump http://url.to.your.script > /dev/null