Как определить, что PHP-скрипт находится в стадии завершения? - PullRequest
7 голосов
/ 03 июня 2011

Есть ли в PHP какая-либо функция / глобальная переменная, которая возвращает текущее состояние скрипта (что-то вроде выполнения, завершения)?

Или это единственный способ установить это состояние, используя register_shutdown_function()?

Эта функция выглядит для меня негибкой, так как уже зарегистрированные функции выключения могут быть переопределены с ней.И функция отключения запускается, когда пользователь прерывает соединение , что явно не то, что я ищу, и я не хочу вводить слишком много ограничений.

Есть ли какие-либоальтернативы register_shutdown_function() доступны?Или, если нет, как справиться с недостатками этой функции?

ОБНОВЛЕНИЕ

Просто чтобы уточнить: я не ищу состояние соединения (например, connection_aborted()), но для состояния выполнения сценария PHP (работает, завершается).Функции, чтобы узнать больше о состоянии соединения, о котором я уже знаю, но как насчет текущего состояния скрипта?Сценарий уже завершен и объекты (которые будут) будут из-за этого уничтожены?

UPDATE2

Чтобы уточнить еще, я все еще не ищу состояние соединения , но для чего-то сопоставимого в отношении состояния выполнения.Он также должен работать в CLI, который не имеет никакого состояния соединения, так как нет TCP-соединения, связанного с выполнением кода - чтобы лучше проиллюстрировать то, что я ищу.

Ответы [ 4 ]

4 голосов
/ 12 июня 2011

Прочитав большую часть исходного кода 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.
0 голосов
/ 03 июня 2011

Есть ли функция / глобальная переменная в PHP, которая возвращает текущее состояние сценария (что-то как бегущий, заканчивающийся)?

Нет, PHP не имеет состояния.

0 голосов
/ 03 июня 2011

Я еще никогда не использовал (практично) его, но вы можете использовать:

http://www.php.net/manual/en/function.register-tick-function.php

Используя это, вы можете написать файл илиобновить БД или что-то во время выполнения скрипта ... т.е. записать сеанс записи / некоторый идентификатор и идентификатор метки времени в файл или что-то и, возможно, проверить время между выполнением, вы могли бы сказать, если он не обновлялся в течение X секунд, он все ещевыполняется.

Но, как указано, PHP не имеет состояния, поэтому PHP не знает об этом.

Если этого не сделать, вы можете каким-то образом установить поле БД, когда скрипт запускается / простодо того, как это «кончится», но на самом деле будет много накладных расходов.

0 голосов
/ 03 июня 2011

Вы ищете:

Connection_aborted();

http://it.php.net/manual/en/function.connection-aborted.php

или

Connection_status();

http://it.php.net/manual/en/function.connection-status.php

Приложение

Не может быть никакого Прекращенного статуса, потому что, если он прерван, вы не можете проверить его статус. Lol

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...