Как долго сохраняются статические переменные PHP? - PullRequest
11 голосов
/ 15 июля 2011

Как долго сохраняются статические переменные PHP, т. Е. Как долго сохраняется "PHP run"?С помощью, скажем, программы командной строки есть определенные начало и конец, но в сети с AJAX я не знаю, как это определить.

Вот 3 способа, которыми я видел запуск сценария PHP.

  1. Пользователь (запрашивая страницу PHP)
  2. Javacript вызывает PHP (AJAX)
  3. PHP вызывает больше PHP через заголовок ()

В моем реальном приложении я использую JavaScript сценарий php через AJAX, который использует header () для перезагрузки сайта.Это будет считаться двумя различными прогонами.У каждого есть свои статические переменные, которые не связаны между собой.

Ответы [ 7 ]

19 голосов
/ 15 июля 2011

Переменные PHP сохраняются в течение всего времени жизни скрипта, выполняемого через интерпретатор.В случае веб-запроса это время обработки запросов.Все три ваших случая - это запросы к серверу, и поэтому они обрабатываются одинаково: статические переменные сохраняются до тех пор, пока сценарий не завершится после обработки запроса.

Срок службы PHP (и его переменных) над запросом:

  1. Запрос отправляется на сервер, будь то пользователь, ajax, curl через PHP или что-то еще ... 1006 *
  2. Соответствующий скрипт PHP выполняется, как модуль на вашем веб-сервере., рабочий процесс CGI или другие параметры
  3. Сценарий выполняется, ответ на запрос (если есть) создается и отправляется
  4. (необязательно) сценарий продолжает выполнять некоторые другие задания до возможного завершения, когда все его переменные умирают вместе с ним.
2 голосов
/ 15 июля 2011

Зависит от настроек сервера. Как правило, когда вы делаете запрос, интерпретатор PHP загружается, анализирует скрипт, ваш сервер выплевывает результаты, и интерпретатор уничтожается. Это происходит для каждого запроса, независимо от того, происходит ли он от просмотра пользователя или AJAX. Это означает, что «статические» переменные действительны только до тех пор, пока интерпретатор не будет уничтожен, что опять же происходит в конце каждого запроса. (HTTP не имеет состояния)

Что вы подразумеваете под "PHP, вызывающим больше PHP через header ()"? Вы имеете в виду редирект? В этом случае это новый запрос. Если вы имели в виду «PHP вызывает больше PHP через include», это, как правило, не новый запрос (в крайнем случае, если вы включаете скрипт PHP от стороннего производителя ... опасно и не рекомендуется). При включении PHP просто загружает и выполняет файл в том же контексте, что и исходный скрипт.

2 голосов
/ 15 июля 2011

«Выполнение PHP» всегда начинается с начала выполнения и до конца сценария.Итак, если вы вызываете скрипт PHP с помощью ajax или PHP вызывает другой PHP через header (), каждый вызов выполняется за один раз.Статические переменные, созданные ранее, не имеют постоянного состояния и будут переопределены.

Либо статические переменные, либо нет ... если вы хотите иметь постоянное состояние данных во время этих запросов, вам придется либо сохранить егов сеансе, cookie, базе данных или в кэше.

2 голосов
/ 15 июля 2011

В командной строке заданы начало и конец.

Нет никакой разницы в том, что PHP работает на сервере.Когда к сценарию делается веб-запрос, сценарий запускается до конца сценария или до его сбоя или истечения времени ожидания (и, возможно, других подобных проблем).

AJAX не запускает сервербоковая сторона.AJAX - это еще один клиентский асинхронный вызов ресурса сервера.Все, что делается для первого запроса в отношении аутентификации, проверки, проверки ввода и т. Д., Должно выполняться с каждым последующим запросом.Разница в ответе AJAX заключается в том, что скрипт PHP, скорее всего, вернет только запрашиваемый контент .

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

1 голос
/ 15 июля 2011

PHP-скрипты останавливаются при выходе, достигают конца скрипта или не работают.

1 голос
/ 15 июля 2011

Статическая PHP (которую можно считать «глобальной» процедурным способом) не сохраняется ни в одном из ваших случаев.

В каждом из них выполняется новый HTTP-запрос и состояние переменных Phpпотерян.

1 голос
/ 15 июля 2011

Все три одинаковы.

В каждом случае браузер пользователя отправляет http-запрос на URL.Время выполнения - с момента, когда сервер получает запрос, до момента его заполнения.

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