¿Cómo ejecutar el código PHP desde la línea de comando?

163

Me gustaría ejecutar una sola declaración php como if(function_exists("my_func")) echo 'function exists';directamente con la línea de comando sin tener que usar un archivo php separado.

Como es posible ?

Steve
fuente
1
hacer function_exists () sin usar ningún otro archivo que contenga una función definida por el usuario no será muy bueno, excepto para probar la versión de PHP, que puede descubrir de otras maneras. ¿Qué función quieres probar?
Matt Gibson
Estoy buscando probar esta función: sg_load ()
Steve
2
¿Parece que lo que realmente quieres es saber si la extensión php sourceguardian está habilitada?
Matt Gibson
2
entonces phpinfo () debería decirte.
jpic

Respuestas:

256

Si vas a hacer PHP en la línea de comando, te recomiendo que instales phpsh, un shell PHP decente . Es mucho mas divertido.

De todos modos, el comando php ofrece dos interruptores para ejecutar código desde la línea de comando :

-r <code>        Run PHP <code> without using script tags <?..?>
-R <code>        Run PHP <code> for every input line

Puede usar el modificador phr 's como tal:

php -r 'echo function_exists("foo") ? "yes" : "no";'

El comando PHP anterior anterior debería generar no y devuelve 0 como puede ver:

>>> php -r 'echo function_exists("foo") ? "yes" : "no";'
no
>>> echo $? # print the return value of the previous command
0

Otro cambio divertido es php -a :

-a               Run as interactive shell

Es un poco aburrido en comparación con phpsh , pero si no desea instalar el increíble shell interactivo para php hecho por Facebook para completar la pestaña, el historial, etc. , use -a como tal :

>>> php -a
Interactive shell

php > echo function_exists("foo") ? "yes" : "no";
no
php > 

Si no funciona en su caja como en mi caja * es * ( probado en Ubuntu y Arch), entonces probablemente su configuración de PHP es difusa o rota . Si ejecuta este comando:

php -i | grep 'API'

Usted debe ver:

Server API => Command Line Interface

Si no lo hace , esto significa que tal vez otro comando proporcionará la CLI SAPI . Pruebe php-cli, tal vez sea un paquete o un comando disponible en su sistema operativo.

Si ve que su comando php usa la CLI (Interfaz de línea de comando) SAPI (API del servidor), ejecute php -h | grep codepara averiguar qué interruptor loco, ya que esto no ha cambiado durante un año, permite ejecutar el código en su versión / configuración.

Otro par de ejemplos, solo para asegurarme de que funciona en mis cajas:

>>> php -r 'echo function_exists("sg_load") ? "yes" : "no";' 
no
>>> php -r 'echo function_exists("print_r") ? "yes" : "no";' 
yes

Además, tenga en cuenta que es posible que se cargue una extensión en la CLI y no en la CGI o Apache SAPI. Es probable que varios SAPI de PHP utilicen diferentes archivos php.ini , por ejemplo, /etc/php/cli/php.inivs /etc/php/cgi/php.inivs /etc/php/apache/php.inien un cuadro de Gentoo. Averigüe con qué archivo ini se usa php -i | grep ini.

jpic
fuente
Tal vez su configuración de PHP está rota. Actualicé mi respuesta incluyendo sugerencias para resolverlo.
jpic
Se agregó una nota sobre php -a que podría serle útil.
jpic
66
Tenga en cuenta que phpsh ya no es mantenido por su autor (Facebook) y alguien en la página de Grupos de Google dijo en 2012 que "phpsh ya no es compatible o útil" . Puede buscar en Boris REPL para obtener una consola php mejorada.
Ben Creasy
3

En la línea de comando:

php -i | grep sourceguardian

Si está allí, obtendrás algo de texto. Si no, no obtendrás nada.

Matt Gibson
fuente
44
O estoy ciego o esta respuesta no tiene nada que ver con la pregunta. ¿Cómo se supone que esta respuesta responde a la pregunta " Cómo ejecutar el código PHP directamente desde la línea de comandos, sin guardar el código PHP en el .phparchivo? "
trejder
15
@trejder Por un momento, me pregunté si había respondido la pregunta incorrecta, pero luego miré el historial de edición y los comentarios. Esto responde a lo que el OP parecía realmente necesitar: descubrir si se cargó una extensión PHP en particular. Desde entonces, la pregunta se ha reformulado, por lo que no encaja tan bien ahora.
Matt Gibson el
3

Puedes usar :

 echo '<?php if(function_exists("my_func")) echo "function exists"; ' | php

La etiqueta corta " <? = " También puede ser útil:

 echo '<?= function_exists("foo") ? "yes" : "no";' | php
 echo '<?= 8+7+9 ;' | php

La etiqueta de cierre "?>" Es opcional, pero no olvide el final ";" !

fred727
fuente
2
Esto parece ser más problemático que la respuesta aceptada de 7 años. Al php -rusarlo, no necesita preocuparse por abrir etiquetas PHP.
miken32
1

Usando PHP desde la línea de comando

use "en lugar de ' en Windows cuando use la versión cli con -r

php -r "echo 1"

- correcto

php -r 'echo 1'

- incorrecto

  PHP Parse error:  syntax error, unexpected ''echo' (T_ENCAPSED_AND_WHITESPACE), expecting end of file in Command line code on line 1
usuario1942505
fuente