PHP静态变量持续多长时间,即“PHP运行”持续多长时间?比如一个命令行程序,有一个定义的开始和结束,但在web w / AJAX中,我不知道如何定义它。
以下是我看到PHP脚本启动的3种方法。
在我的实际应用程序中,我有javascript通过AJAX调用php脚本,脚本使用header()重新加载网站。这将被视为两个不同的运行。每个都有自己的静态变量,不相关。
答案 0 :(得分:19)
PHP变量在通过解释器运行的脚本的生命周期内持续存在。对于Web请求,这是处理请求的生命周期。您的三种情况都是对服务器的请求,因此处理相同:静态变量一直存在,直到脚本在处理请求后终止。
PHP(及其变量)对请求的生命周期:
答案 1 :(得分:2)
在命令行中有一个已定义的开始和结束。
在服务器上运行的PHP没有区别。当对脚本发出Web请求时,脚本会一直运行到脚本结束,或直到它崩溃或超时(可能还有其他类似问题)。
AJAX不运行服务器端。 AJAX是另一个客户端异步调用服务器资源。对于第一个请求,就身份验证,验证,输入检查等所做的一切都必须在每个后续请求中完成。 AJAX响应的不同之处在于PHP脚本很可能只返回所请求的内容。
一个程序“坚持”的唯一时间就是它被告知继续前进。可以告诉PHP等待,并通过Web套接字执行操作,但这似乎超出了您的问题的范围。
答案 2 :(得分:2)
“PHP运行”总是从执行开始直到脚本结束。因此,如果您使用ajax调用PHP脚本或PHP通过header()调用另一个PHP,则每次调用都是单次运行。之前实例化的静态变量没有持久状态,将被重新定义。
静态变量与否......如果您希望在这些请求中拥有持久的数据状态,则必须将其保存在会话,cookie,数据库或缓存中。
答案 3 :(得分:2)
这取决于服务器设置。通常,当您发出请求时,会加载PHP解释器,解析脚本,服务器会吐出结果并销毁解释器。每个请求都会发生这种情况,无论它是来自用户浏览还是AJAX。这意味着“静态”变量仅在解释器被销毁之前有效,这又是每个请求的结尾。 (HTTP是无状态的)
“PHP通过标题()调用更多PHP是什么意思?”你指的是重定向吗?在这种情况下,这是一个新的请求。如果你的意思是“PHP通过include调用更多的PHP”,它通常不是一个新请求(边缘情况是你包括来自第三方的PHP脚本......危险而不推荐)。使用include,PHP只需在与原始脚本相同的上下文中加载和执行文件。
答案 4 :(得分:1)
这三个都是一样的。
在每种情况下,用户的浏览器都在为网址发出http请求。运行时是从服务器接收请求到完成填充的时间。
答案 5 :(得分:1)
PHP静态(在程序上可以被视为“全局”)在任何情况下都不会持久存在。
在每个中都执行一个新的HTTP请求,并且Php变量状态丢失。
答案 6 :(得分:1)
当您退出,到达脚本末尾或失败时,PHP脚本会停止。