Как долго сохраняются статические переменные PHP?
Как долго сохраняются статические переменные PHP, т. е. как долго сохраняется" PHP run"? С помощью программы командной строки есть определенные начало и конец, но в web w/ AJAX я не знаю, как это определить.
вот 3 способа, которыми я видел запуск PHP-скрипта.
- пользователей (Requesing страницу PHP)
- Javacript вызывает PHP (AJAX)
- PHP вызывает больше PHP через заголовок ()
в моем фактическом приложении у меня есть javascript вызовите PHP-скрипт через AJAX, который использует header () для перезагрузки сайта. Это будет consideredt две разные трассы. Каждый из них имеет свои собственные статические переменные, которые не связаны.
7 ответов
переменные PHP сохраняться в течение времени жизни скрипта через переводчика. В случае веб-запроса это время жизни обработки запросов. Все три случая являются запросами на сервер и, следовательно, обрабатываются одинаково: статические переменные сохраняются до тех пор, пока сценарий не завершится после обработки запроса.
срок службы PHP (и его переменных) по запросу:
- запрос отправляется на сервер, будь то пользователь, ajax, curl через PHP или что-нибудь
- выполняется соответствующий PHP-скрипт, будь то модуль на вашем веб-сервере, рабочий процесс CGI или другие параметры
- скрипт выполнен, ответ на запрос (если есть) создан и отправлен
- (необязательно) скрипт продолжает выполнять какое-то другое задание до окончательного завершения, после чего все его переменные умирают вместе с ним.
в командной строке есть определенные начало и конец.
нет никакой разницы в 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 (который можно считать" глобальным " процедурным способом) не сохраняется ни в одном из ваших случаев.
в каждом из них выполняется новый HTTP-запрос и теряется состояние переменных Php.