2009-12-01 10 views
7

¿Hay alguna manera de hacer que php deje de procesar un archivo y hacer que funcione solo con la parte que ya se analizó? Quiero decir esto:detener el archivo de procesamiento de php

<some data here> 
<?php phpinfo(); [IS THERE ANY THING I CAN PUT HERE] ?> 
<more data> 
[IS THERE ANY THING I CAN PUT HERE] 
<?HOW CAN I MAKE PHP NOT PARSE THIS?> 

¿Hay alguna forma de hacer que php ignore los datos después de la primera parte de php?

+1

Bien Morderé ... Tengo curiosidad, ¿por qué querrías? ¿Qué estás tratando de hacer exactamente? – cletus

+0

¿Desea imprimir el resto del archivo como texto sin formato? – SLaks

Respuesta

2

Puede usar la palabra clave exit para decirle a PHP que termine de procesar el archivo.

+0

¿Esto asegurará que ni siquiera analiza el resto del archivo? – SLaks

+0

Correcto ........ –

+0

Sí ... la palabra clave 'exit' le dice específicamente a PHP que deje de analizar, eliminar el resultado que ya tiene, y devolver el control a lo que lo invocó. – Amber

10

Otra solución podría ser utilizar __halt_compiler:

Detiene la ejecución del compilador. Esto puede ser útil para incrustar datos en scripts PHP, como los archivos de instalación .

posición por tamaño del inicio de datos puede ser determinado por el __COMPILER_HALT_OFFSET__ constante que se define sólo si hay una __halt_compiler() presentado en el archivo .

Un uso típico es para Phar archives, cuando se necesita integrar los datos binarios (posiblemente) y PHP en un solo archivo, y el código PHP necesita tener acceso a esos datos.


Y en realidad hay una diferencia: este código:

blah blah 
<?php phpinfo(); ?> 
glop glop 
<?php exit(); ?> 
<?HOW CAN I MAKE PHP NOT PARSE THIS?> 

me consigue un Parse error: syntax error, unexpected T_STRING
(Probablemente porque tengo short_open_tag habilitado, supongo)


Si bien esto uno:

blah blah 
<?php phpinfo(); ?> 
glop glop 
<?php __halt_compiler(); ?> 
<?HOW CAN I MAKE PHP NOT PARSE THIS?> 

funciona bien - este código PHP no válido se encuentra después de la llamada a __halt_compiler().

+0

buen consejo! ¿Se enviará el resto del archivo al navegador (no recortado/cortado allí)? Si es así, esto puede acelerar el manejo de páginas largas con solo un pequeño código PHP al principio (__halt_compiler(); como última línea), o páginas HTML puras incluidas por PHP (agregando un Como primera línea) . – FrancescoMM

4

Creo que todo lo que necesitas hacer es escribir return 0; (o cualquier otro valor), PHP dejará de analizar este archivo y volverá a lo que invocó. Esto es útil cuando necesita detener la ejecución en un archivo pero no desea die() o exit() por completo.

+0

Por lo que yo entiendo, realmente no detiene * el análisis * del archivo, pero se detiene * ejecutándolo * cuando llega al 'retorno' –

Cuestiones relacionadas