Как отличить вызов командной строки и web-сервера? [дубликат]



есть ли способ отличить, если скрипт был вызван из командной строки или веб-сервер?



(смотрите, каков канонический способ определения командной строки и http-выполнения PHP-скрипта? за лучший ответ и более подробное обсуждение - не нашел, что один перед публикацией)





У меня есть (не сервер) с Apache 2.2.10 и PHP 5.2.6. На нем, в веб-доступном каталоге находится мой PHP скрипт,maintenance_tasks.php. Я хотел бы вызвать этот скрипт из командной строки или через HTTP-запрос (открыть в браузере). Есть ли какая-то переменная, которая позволяет мне надежно определить, как вызывается скрипт?



(Я уже занимался вопросами различных представлений для каждого типа вызова и таймаута ответа HTTP, просто ища способ отличить два типа вызова)



Я буду пробовать разные вещи и добавить свои выводы ниже.



дублирую: Что такое канонический способ определения командной строки и http-выполнения PHP-скрипта?

445   2  

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

    Ничего не найдено.