克龙脚本不会在服务器端工作(Cron Script Doesn't Work in Serv

2019-10-20 03:14发布

我有一些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');

Answer 1:

其原因是,当你通过ssh或命令行运行你在CLI模式,因此可以使用无那些CGI变量。 它建议使用getenv()命令来代替它支持一些在CLI模式下定义的变量。 然而,你需要配置在您php.ini中定义它们

您可能需要看看命令行使用文档了解更多详情



Answer 2:

你是如何从cron运行呢? 看来,当你从终端运行不被发现的服务器变量 - 这将使意义,如果你的PHP运行在服务器上的文件。 即什么答案在特定位置上的80端口的请求的文件 - 在PHP服务器变量由Web服务器设定。

下面是PHP的服务器上的变量文档。 http://www.php.net/manual/en/reserved.variables.server.php



Answer 3:

您的Web服务器是谁填补了PHP的$ _SERVER数组的一个。 我从手动(行情http://www.php.net/manual/en/reserved.variables.server.php ):

此数组中的条目由Web服务器创建。 谁也不能保证每一个Web服务器将提供所有的信息; 服务器可能会忽略一些,或者提供其他不在此列。

显然,如果你在命令行调用脚本,没有网络服务器,填补了数组$ _SERVER,那是你的问题的原因。

为了解决这个问题,你可以修改你的config.php加载预设值,你在他们不存在的情况下所需要的变量。 这将是这样的,每UNDEF VAR:

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


文章来源: Cron Script Doesn't Work in Server Side
标签: php ssh