Как отличить вызов командной строки и web-сервера? [дубликат]
есть ли способ отличить, если скрипт был вызван из командной строки или веб-сервер?
(смотрите, каков канонический способ определения командной строки и http-выполнения PHP-скрипта? за лучший ответ и более подробное обсуждение - не нашел, что один перед публикацией)
У меня есть (не сервер) с Apache 2.2.10 и PHP 5.2.6. На нем, в веб-доступном каталоге находится мой PHP скрипт,maintenance_tasks.php. Я хотел бы вызвать этот скрипт из командной строки или через HTTP-запрос (открыть в браузере). Есть ли какая-то переменная, которая позволяет мне надежно определить, как вызывается скрипт?
(Я уже занимался вопросами различных представлений для каждого типа вызова и таймаута ответа HTTP, просто ища способ отличить два типа вызова)
Я буду пробовать разные вещи и добавить свои выводы ниже.
дублирую: Что такое канонический способ определения командной строки и http-выполнения PHP-скрипта?
2 ответов:
при вызове из командной строки серверная переменная HTTP_USER_AGENT не задается. Я использую эту константу, чтобы определить, вызывается ли скрипт из командной строки или нет:define("CLI", !isset($_SERVER['HTTP_USER_AGENT']));обновление: поскольку этот ответ по - прежнему отмечен как "правильный", я хотел бы пересмотреть свое заявление-полагаться на заголовок "User-Agent" может быть проблематичным, поскольку это пользовательское значение.
пожалуйста, используйте
php_sapi_name() == 'cli'илиPHP_SAPI == 'cli', а предложено Евгением / cam8001 в комментариях.Спасибо, что указали на это!
Я сравнил
$_SERVERсуперглобальный в обоих вызовах. Кажется, что$_SERVER['argc'](т. е. количество аргументов, переданных скрипту) устанавливается только при запуске из командной строки/:<?php if (isset($_SERVER['argc'])) { define('CLI', true); } else { define('CLI', false); }это, кажется, работает как на Linux и Windows хостов. (Сначала я подумал о проверке некоторых переменных среды, но они различны для каждой операционной системы. Кроме того, все
$_SERVER['HTTP_*']заголовки отсутствуют в версии CLI, но я не уверен, что это надежно достаточно.)
Comments