РНР.Вопрос
В PHP нет встроенной функции, которая прямо укажет, был ли скрипт вызван браузером клиента или cronjob’ом на сервере. Однако, можно определить это косвенно, используя некоторые условия:
1. Проверка наличия $_SERVER['HTTP_USER_AGENT']:
• Если скрипт вызван браузером, обычно будет установлена переменная $_SERVER['HTTP_USER_AGENT'], которая содержит информацию о браузере пользователя.
• При запуске через командную строку (например, cronjob) эта переменная обычно не определена.
Пример:
if (php_sapi_name() === 'cli' || empty($_SERVER['HTTP_USER_AGENT'])) {
echo "Скрипт запущен через cronjob или из командной строки\n";
} else {
echo "Скрипт вызван из браузера\n";
}
2. Использование php_sapi_name():
• Функция php_sapi_name() возвращает тип интерфейса, через который запущен скрипт.
• Если скрипт запускается через командную строку или cronjob, php_sapi_name() вернёт 'cli'. Если скрипт вызван через браузер (HTTP-запрос), результат будет отличаться (например, 'apache2handler' или 'cgi-fcgi').
3. Проверка других переменных окружения:
• Переменная $_SERVER['REMOTE_ADDR'] хранит IP-адрес клиента, который делает запрос. Если она пуста, то, скорее всего, скрипт был вызван через командную строку.
Пример:
if (empty($_SERVER['REMOTE_ADDR'])) {
echo "Скрипт запущен через cronjob или командную строку\n";
} else {
echo "Скрипт вызван из браузера\n";
}
Комбинированный пример
Вот пример, который использует сразу несколько проверок:
if (php_sapi_name() === 'cli' || empty($_SERVER['HTTP_USER_AGENT']) || empty($_SERVER['REMOTE_ADDR'])) {
echo "Скрипт запущен через cronjob или командную строку\n";
} else {
echo "Скрипт вызван из браузера\n";
}
Эти проверки помогут вам различить, откуда был вызван скрипт — из браузера или как cronjob.