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');
答案 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了解更多详情