русский
Germany.ruForen → Архив Досок→ Programmierung

РНР.Вопрос

13.11.24 22:24
Re: РНР.Вопрос
 
in Antwort a1b3c5 13.11.24 22:09

В 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.

 

Sprung zu