2012-01-05 6 views
20

Muchas veces cuando veo PHP que está destinado a ser corrió desde la línea de comandos, que tendrá esta línea #!/usr/bin/env php en la parte superior del archivo así ...¿Se requiere #!/Usr/bin/env para ejecutar PHP desde la línea de comandos?

#!/usr/bin/env php 
<?php 
    // code 
?> 

yo quería saber si esto ¿Es solo para cuando el archivo se ejecuta en un sistema Linux/Unix o también se necesita para ejecutarlo en Windows?

+10

Por cierto: es una buena práctica omitir '?>' En su código PHP, si aparece al final del archivo. – Tadeck

+0

@Tadeck sí lo es. nunca agregue '?>' a menos que tenga una buena razón para hacerlo. – hanshenrik

Respuesta

22

La línea "hashbang" es necesaria para la autodetección del tipo de script. Permite que este tipo de uso:

[pfisher ~]$ chmod +x run-me.php 
[pfisher ~]$ run-me.php 

Esa línea no es necesario si se pasa el nombre de archivo como argumento al intérprete de PHP, así:

[pfisher ~]$ php run-me.php 
+3

Por supuesto, esto solo funciona en * nix. En Windows, tienes que usar '> php run-me.php' desde la línea de comandos. – ThatOtherPerson

+3

También vale la pena mencionar es que gracias a esta línea puede cambiar el nombre del archivo de script para que no contenga una extensión. De esta forma, podrás ejecutarlo sin siquiera saber qué idioma es: './Run-me'. – Tadeck

+1

@ThatOtherPerson, Windows tiene su propia versión: http://stackoverflow.com/a/6818266/632951 – Pacerier

1

, no lo es, puede utilizar directamente

Ejecutar php (o cualquier otra cosa) a través de la utilidad env es una medida de seguridad débil. Al usar la plataforma, se "arreglará" PATH, LIB y otras variables de entorno de acuerdo con varios archivos de configuración y se eliminarán algunos de los valores peligrosos allí (por ejemplo, env en HPUX).

También limita el alcance de expansiones de shell en ciertos entornos. (Ver man 1 env en Linux).

+4

'#!/Usr/bin/env php' se usa también porque' #!/Path/to/php' es diferente en diferentes sistemas, ¿no? – Tadeck

+0

No, '/ usr/bin/env' no hace nada por el estilo; todo lo que hace en un shebang es buscar php (o lo que sea) en su' $ PATH', para hacer frente a los sistemas donde está el intérprete en algún lugar extraño como '/ usr/local/bin'. – duskwuff

+0

realmente HACE exactamente lo que dije en mi respuesta. ve a leer las páginas man de esos sistemas. –

Cuestiones relacionadas