Cron脚本在服务器端不起作用

时间:2014-05-16 15:07:44

标签: php ssh

我有一些cron文件。它是在httpdocs下。但我决定搬到cron文件夹下。我改变了剧本。

config.php到../ config.php

当我从浏览器调用脚本时,一切正常。但是当我从ssh调用时,我得到了错误的未定义索引:SERVER_NAME

我无法运行cronjob。我能做什么?

stock.php文件

    include_once '../config.php';

    require_once CLASS_PATH.'class.product.php';
    include_once INC_PATH.'functions.php';

....

config.php文件

    if ( !defined('ABSPATH') ) {
    define('ABSPATH', dirname(__FILE__).'/');
}
define('PROTOCOL',(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') ? 'https' : 'http');

    define('HOST', PROTOCOL.'://'.$_SERVER['SERVER_NAME']);

    define('CLASS_PATH',ABSPATH.'includes/class/');
    define('INC_PATH',ABSPATH.'includes/');

    //if (isset($_SERVER['SERVER_NAME'])){
        define('PRODUCT_IMG_PATH', 'images/product/');
    //}

    define('HEAD_META',ABSPATH.'view/head-meta.php');
    define('NAVBAR',   ABSPATH.'view/navbar.php');
    define('HEADER',   ABSPATH.'view/header.php');
    define('FOOTER',   ABSPATH.'view/footer.php');

3 个答案:

答案 0 :(得分:0)

你是怎么从cron运行它的?从终端运行时似乎找不到服务器变量 - 如果您在服务器上运行php文件,这将是有意义的。 php中的SERVER变量由网络服务器设置 - 即通过端口80将请求应答到特定位置的文件。

这是关于服务器变量的php文档。 http://www.php.net/manual/en/reserved.variables.server.php

答案 1 :(得分:0)

您的网络服务器是填充php $ _ SERVER 数组的人。我引用手册(http://www.php.net/manual/en/reserved.variables.server.php):

  

此阵列中的条目由Web服务器创建。没有   保证每个Web服务器都提供这些服务;服务器可能   省略一些,或提供此处未列出的其他人。

显然,如果您从命令行调用脚本,那么没有Web服务器可以填充 $ _ SERVER 数组,这就是您遇到问题的原因。

要解决此问题,您可以修改 config.php ,以便在不存在的情况下将预定义值加载到您需要的变量中。对于每个undef var来说都是这样的:

if (!isset($_SERVER['SERVER_NAME'])) $_SERVER['SERVER_NAME']="localhost";

答案 2 :(得分:0)

原因是当您通过ssh或命令行运行时,您处于CLI模式,因此不能使用这些CGI变量。建议使用getenv()命令,它在CLI模式下支持一些已定义的变量。但是,您需要在php.ini中配置和定义它们

您可能需要查看Command line usage documentation了解更多详情