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