Спасибо за ваше время заранее.
У меня есть PHP-скрипт, который должен запускаться один раз в день. Мы настроили запланированное задание на сервере клиента, и он выполняет командный файл, который по существу вызывает следующее:
php-cgi.exe -d short_open_tag=On ".\my_script.php"
Если я перехожу прямо к my_script.php через браузер, все работает нормально. Когда я выполняю пакетный скрипт из командной строки или по расписанию, мне выдается несколько ошибок.
Линии, дающие ошибки:
$document_root = $_SERVER[ 'DOCUMENT_ROOT' ];
$_SERVER[ 'FULL_URL' ] .= $_SERVER[ 'SCRIPT_NAME' ];
Если я использую var_dump () переменную $ _SERVER, я вижу, что и DOCUMENT_ROOT, и SCRIPT_NAME там и заполнены правильно. У меня запланированная задача, выполняющаяся с самыми высокими привилегиями под пользователем SYSTEM.
Что я могу сделать, чтобы остановить эти ошибки из командной строки и запланированной задачи?
Вы должны использовать php.exe
или же php-win.exe
вместо php-cgi.exe
, Увидеть эта страница для получения подробной информации о различиях между SAPI.
Но обратите внимание, что $_SERVER
superglobal заполняется в CLI иначе, чем веб-сервером. (Моя установка возвращает пустую строку, используя php.exe
.)
Если вы хотите получить текущий путь к файлу, используйте __FILE__
, Для текущего каталога используйте __DIR__
,
Быстрый тест для вас, чтобы попробовать; это должно вернуть текущий каталог:
php -r "echo __DIR__;"
При вызове командного файла из хранимой процедуры у меня возникали ошибки, но когда я вызывал php-cgi.exe напрямую и добавлял свои аргументы в текстовое поле аргументов, все работало отлично.
Я предполагаю, что мой командный файл не имел надлежащих разрешений.