Как долго сохраняются статические переменные PHP?

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

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

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

в моем фактическом приложении у меня есть javascript вызовите PHP-скрипт через AJAX, который использует header () для перезагрузки сайта. Это будет consideredt две разные трассы. Каждый из них имеет свои собственные статические переменные, которые не связаны.

7 ответов


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

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

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

в командной строке есть определенные начало и конец.

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

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

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


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

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


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

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


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

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


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


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

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