繁体   English   中英

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

[英]Cron Script Doesn't Work in Server Side

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

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

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

您的Web服务器就是填充php $ _SERVER数组的服务器。 我引用了手册( http://www.php.net/manual/zh/reserved.variables.server.php ):

该数组中的条目由Web服务器创建。 不能保证每个Web服务器都可以提供其中的任何一个。 服务器可能会省略某些服务器,或提供此处未列出的其他服务器。

显然,如果从命令行调用脚本,则没有Web服务器可以填充$ _SERVER数组,这就是问题的原因。

为了解决这个问题,您可以修改config.php以将预定义值加载到所需的变量中,以防它们不存在。 每个undef变量都将是这样的:

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

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

您可能需要查看命令行用法文档以获取更多详细信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM