2011-07-14 8 views
9

¿Cuánto tiempo persisten las variables estáticas de PHP, es decir, cuánto tiempo persiste una "ejecución de PHP"? Con decir un programa de línea de comandos hay un inicio y un final definidos, pero en la web w/AJAX no sé cómo definir esto.¿Cuánto tiempo persisten las variables estáticas de PHP?

Aquí hay 3 maneras en que he visto iniciar una secuencia de comandos en PHP.

  1. usuario (Requesing una página PHP)
  2. Javacript llamados a PHP (AJAX)
  3. PHP llamar más PHP a través de una cabecera()

En mi aplicación real que tengo Javascript a llamar a un php secuencia de comandos a través de AJAX ese script utiliza el encabezado() para volver a cargar el sitio. Esto se consideraría dos carreras diferentes. Cada uno tiene sus propias variables estáticas que no se relacionan.

Respuesta

15

Las variables PHP persisten durante el tiempo de vida del script que se ejecuta a través del intérprete. En el caso de una solicitud web, este es el tiempo de vida de manejo de las solicitudes. Sus tres casos son todas las solicitudes a un servidor, y por lo tanto se manejan de la misma manera: las variables estáticas sobreviven hasta que el script finaliza después de manejar la solicitud.

La vida útil de PHP (y sus variables) a través de una solicitud:

  1. solicitud se envía al servidor, ya sea por el usuario, ajax, rizo a través de PHP o lo que usted quiera
  2. PHP Relevante script se ejecuta, ya sea como un módulo en su servidor web, un proceso de trabajo CGI u otras opciones
  3. El script se ejecuta, la respuesta a la solicitud (si existe) se crea y envía
  4. script (opcional) continúa ejecutándose algún otro trabajo hasta la finalización eventual, en ese momento todas sus variables d es decir, con eso.
+0

Por lo tanto, diga My Ajax llame a file1.php, incluye file2.php e instaura un ojbect que envía un encabezado. Esto se consideraría dos carreras. El archivo 1 simplemente incluye File2, por lo que esta es una ejecución, pero llamo a un encabezado() para volver a cargar la página. ¿Es esta una segunda ejecución, la llamada del encabezado()? Se llama desde run1 –

+0

Tu llamada ajax genera una solicitud que ejecuta file1.php, incluido el contenido de file2.php, que envía un encabezado que termina para el final de la ejecución # 1. El encabezado de recarga enviado por la ejecución n. ° 1 genera una nueva solicitud (para la página recargada), y así comienza la ejecución n. ° 2. Si ejecutar # 2 es otra solicitud para file1.php una vez más, ¡NO es la misma ejecución de file1.php que la ejecución # 1! – shelhamer

+0

incluyendo un archivo en PHP es * no * lo mismo que hacer otra solicitud web. las variables persisten en las llamadas 'include' y' require', pero no se pasan a través de llamadas 'curl', a menos que use otro método para compartir datos, como Bases de datos, Cookies y Sesiones. – zzzzBov

1

Los tres son iguales.

En cada caso, el navegador del usuario realiza una solicitud http para la url. El tiempo de ejecución es desde el momento en que el servidor recibe la solicitud hasta el momento en que se completa.

2

En la línea de comandos hay un inicio y un final definidos.

No hay diferencia en PHP ejecutándose en un servidor. Cuando se realiza una solicitud web a la secuencia de comandos, la secuencia de comandos se ejecuta hasta el final de la secuencia de comandos, o hasta que se bloquea o tiene un tiempo de espera (y posiblemente otros problemas similares).

AJAX no funciona en el lado del servidor. AJAX es otra llamada asincrónica del lado del cliente a un recurso del servidor. Todo lo que se hace para la primera solicitud en cuanto a autenticación, validación, verificación de entrada, etc. tiene que hacerse con cada solicitud posterior. La diferencia en una respuesta AJAX es que es probable que el script PHP devuelva solo el contenido solicitado.

La única vez que un programa "persistirá" es si se le ha dicho que continúe. Se le puede decir a PHP que espere y realice acciones a través de sockets web, pero eso parece estar fuera del alcance de su pregunta.

1

El PHP estático (que podría considerarse "global" en un procedimiento) no persiste en ninguno de sus casos.

En cada una de ellas se realiza una nueva solicitud HTTP y se pierde el estado de las variables Php.

2

La "ejecución PHP" es siempre desde el inicio de la ejecución hasta el final del script. Entonces, si llamas un script PHP con ajax o un PHP llama a otro PHP a través de un encabezado(), cada llamada es una sola ejecución. Las variables estáticas instanciadas anteriormente no tienen un estado persistente y se redefinirán.

Variables estáticas o no ... Si desea tener un estado persistente de datos a lo largo de esas solicitudes, deberá guardarlo en la sesión, cookie, base de datos o en un caché.

1

Depende de la configuración del servidor. Normalmente, cuando realiza una solicitud, se carga el intérprete de PHP, analiza el guión, su servidor escupe los resultados y se destruye el intérprete. Esto sucede para cada solicitud, independientemente de si proviene de un usuario que navega o AJAX.Lo que esto significa es que las variables "estáticas" solo son válidas hasta que se destruye el intérprete, que una vez más se encuentra al final de cada solicitud. (HTTP es sin estado)

¿Qué quiere decir con "PHP llamando más PHP a través de un encabezado()"? ¿Te refieres a una redirección? En ese caso, es una nueva solicitud. Si quisiste decir "PHP llama más PHP a través de un include", típicamente no es una nueva solicitud (el caso extremo es que estás incluyendo un script PHP de un tercero ... peligroso y no recomendado). Con un include, PHP simplemente carga y ejecuta el archivo en el mismo contexto que el script de origen.

1

Las secuencias de comandos de PHP se detienen cuando sale, llega al final de la secuencia de comandos o falla.

Cuestiones relacionadas