У меня есть файлы cron. И это было под httpdocs. Но я решил переместиться в папку cron. И я меняю сценарий.
config.php to ../config.php
Когда я вызываю скрипт из браузера, все прекрасно работает. Но когда я звоню из ssh, я получил un undefined index: 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');
Причина в том, что при запуске через ssh или в командной строке вы находитесь в режиме CLI, поэтому ни одна из этих переменных CGI не может использоваться. Вместо этого рекомендуется использовать команду getenv()
которая поддерживает некоторые определенные переменные в режиме CLI. Однако вам нужно настроить и определить их в php.ini
Вам может потребоваться более подробное описание документации по использованию командной строки
Как вы используете его из cron? Похоже, что переменные сервера не обнаруживаются при запуске с терминала – что имеет смысл, если вы выполняли php-запуск файла на сервере. SERVER-переменные в php задаются веб-сервером – то есть ответы на запрос по порту 80 на файлы в определенном месте.
Вот документация php на переменные сервера. http://www.php.net/manual/en/reserved.variables.server.php
Ваш веб-сервер – это тот, кто заполняет массив php $ _SERVER . Я цитирую из руководства ( http://www.php.net/manual/en/reserved.variables.server.php ):
Записи в этом массиве создаются веб-сервером. Нет никакой гарантии, что каждый веб-сервер предоставит любой из них; серверы могут опускать некоторые или предоставлять другим, не перечисленным здесь.
Очевидно, что если вы вызываете свой скрипт из командной строки, для заполнения массива $ _SERVER нет веб-серверов, и это является причиной вашей проблемы.
Чтобы решить эту проблему, вы можете изменить свой config.php для загрузки предопределенных значений в нужные вам переменные, если они не существуют. Это будет что-то вроде этого для каждого undef var:
if (!isset($_SERVER['SERVER_NAME'])) $_SERVER['SERVER_NAME']="localhost";