2010-11-05 29 views
7

Quiero que los scripts PHP se ejecuten tanto en la línea de comandos como en el sitio web (uso Apache y Nginx) así que puse #!/Usr/bin/php en la primera línea de mis scripts pero eso aparece en el sitio web ...¿Cómo puedo evitar mostrar "#!/Usr/bin/php" en PHP?

+0

Si ya utiliza apache para servir PHP, simplemente configure nginx como proxy inverso para apache. – Qwerty

Respuesta

1

llamada la secuencia de comandos con el comando php

+0

¿Cómo se puede hacer? ¿Te refieres a Nginx? Uso php-fpm en debian – brainsqueezer

+0

Es cierto que puede ejecutar el script usando el comando 'php'. Sin embargo, si desea crear un script ejecutable ('chmod + x yourscript.php'), debe agregar el hashbang (#!) A la primera línea de su script. –

5

no hay necesidad de tener #!/usr/bin/php en su código, basta con ejecutar secuencias de comandos CLI mediante php, por ejemplo php /path/to/file.php o /usr/bin/php /path/to/file.php.

+0

Pero si desea crear un script ejecutable que pueda ejecutarse desde el shell, debe resolver este problema. –

3

Por lo general, me parece una buena idea separar la lógica de la presentación. Cuando hago algo como esto, pongo tanto como sea posible en una biblioteca, y luego escribo interfaces cli y web separadas para ello.

Dicho esto, llamarlo con el comando php es probablemente una solución más fácil.

+1

+1 para la separación de la lógica. Típicamente CLI y web requerirán interfaces separadas (interactuando con '$ argv' en lugar de' $ _GET' por ejemplo). Por lo tanto, no es necesario que se invoque el mismo * archivo * desde ambos. – ircmaxell

17

Resolví el problema usando el buffer de salida. Mi script ahora se ve así:

#!/usr/bin/php 
<?php 
@ob_end_clean(); 
... 

Nota: No hay ?> al final del archivo. Esta es una buena práctica al escribir scripts PHP. Esto evita que cualquier texto basura se imprima accidentalmente.

Nota: La documentación de PHP para ob_end_clean() dice que:

El búfer de salida debe iniciarse por ob_start() con PHP_OUTPUT_HANDLER_CLEANABLE y banderas PHP_OUTPUT_HANDLER_REMOVABLE. De lo contrario, ob_end_clean() no funcionará.

Parece que esto se hace automáticamente cuando PHP se ejecuta desde la línea de comandos.

+1

¡Muy buena solución! Funciona, gracias! – CDR

+1

¿Necesita un 'ob_start();' también? Probablemente vale la pena mencionar. – Floris

+0

Creo que puede marcar esta respuesta como aceptada (ya más de 5 años) :-) –

-1

La solución de almacenamiento en búfer de salida anterior es un hack. No hagas eso.

Lo primero, en realidad se está mejor utilizando el comando env para determinar qué php se utiliza:

#!/usr/bin/env php 

Luego le dan permiso para ser ejecutado por sí mismo:

chmod +x myfile 

Así que en lugar de llamando a 'php myfile', ahora acaba de ejecutar:

./myfile 

De esa carpeta. ¡Espero que esto ayude!

Cuestiones relacionadas