Есть ли какая-либо функция / глобальная переменная в PHP, которая возвращает текущее состояние скрипта (что-то вроде runnning, terminating)?
Или это единственный способ установить это состояние, используя register_shutdown_function()
?
Эта функция выглядит негибкой для меня, поскольку уже зарегистрированные функции выключения могут быть переопределены. И функция shutdown выполняется, когда пользователь прерывает соединение , и это не то, что я ищу явно, и я не хочу вводить слишком много ограничений.
Существуют ли какие-либо альтернативы register_shutdown_function()
? Или, если нет, как бороться с недостатками этой функции?
ОБНОВИТЬ
Просто уточнить: я не ищу состояние соединения (например, connection_aborted()
), но для состояния выполнения PHP-скрипта (работает, завершается). Функции, чтобы узнать больше о состоянии подключения, о котором я уже знаю, но как насчет текущего состояния скрипта? Из-за этого скрипт уже был прерван и объекты (будут уничтожены)?
UPDATE2
Чтобы уточнить еще больше, я все еще не ищу состояние соединения, но что-то сопоставимое относительно состояния выполнения. Он также должен работать в CLI, который не имеет никакого состояния соединения, поскольку TCP-соединение не связано с выполнением кода – чтобы лучше проиллюстрировать то, что я ищу.
Прочитав большую часть исходного кода PHP, я пришел к выводу, что даже если такие состояния существуют на уровне опыта, они действительно не существуют в интерпретаторе в виде флага или переменной.
Код о бросании Исключения, например, решает разные переменные, если это возможно или нет.
Таким образом, ответ на вопрос нет.
Лучшим обходным решением, которое я смог найти до сих пор, является глобальная переменная для этого, установленная в зарегистрированной функции выключения. Но флаг с PHP, похоже, действительно недоступен.
<?php register_shutdown_function(function() {$GLOBALS['shutdown_flag']=1;}); class Test { public function __destruct() { isset($GLOBALS['shutdown_flag']) && var_dump($GLOBALS['shutdown_flag']) ; } } $test = new Test; #EOF; Script ends here.
Ты ищешь:
Connection_aborted();
http://it.php.net/manual/en/function.connection-aborted.php
или
Connection_status();
http://it.php.net/manual/en/function.connection-status.php
Не может быть никакого статуса Terminated, поскольку, если он завершен, вы не можете проверить его статус lol
Я еще никогда не использовал (практическое) его использование, но вы могли бы использовать:
http://www.php.net/manual/en/function.register-tick-function.php
Используя это означает, что вы можете записать файл или обновить db или что-то во время работы скрипта … т.е. записать сеанс записи / некоторый идентификатор и идентификатор timestamp в файл или что-то еще и проверить время между исполнением, возможно, вы могли бы сказать, если он не обновляется за X секунд, он все еще работает.
Но, как указано, PHP является апатридом, поэтому не следует понимать, что PHP будет знать.
В противном случае вы могли бы установить поле БД каким-то образом, когда скрипт запускается / перед тем, как он «кончится», но на самом деле наложит много накладных расходов.
Есть ли какая-либо функция / глобальная переменная в PHP, которая возвращает текущее состояние скрипта (что-то вроде runnning, terminating)?
Нет, PHP не имеет гражданства.