Cómo ejecutar PHP desde la línea de comandos de Windows en WAMPServer

81

Soy nuevo en php y quería ejecutar php desde la línea de comandos. He instalado WAMP y configuré las "Variables del sistema" en mi carpeta php (que es C:\wamp\bin\php\php5.4.3).

Cuando voy a Run-> CMD-> Escriba php -ay presione enter, dice interactive mode enabled. Pero cuando escribo echo 'Hi';no muestra nada.

Incluso no veo nada como "php>" cuando escribo php -ay presiono enter.

Daman
fuente
Por lo que puedo decir, la única opción adecuada para Windows es usar el excelente psysh , recomendado por esta otra respuesta SO: stackoverflow.com/a/33790472/327074
icc97

Respuestas:

72

La CLI de PHP como se llama (php para la interfaz de línea de comandos) se llama php.exe Vive en c:\wamp\bin\php\php5.x.y\php.exe (donde xey son los números de versión de php que ha instalado)

Si desea crear scripts php para que se ejecuten desde la línea de comandos, es muy fácil y muy útil.

Cree usted mismo un archivo por lotes como este, llamémoslo phppath.cmd:

PATH=%PATH%;c:\wamp\bin\php\phpx.y.z
php -v

Cambie x.y.za un nombre de carpeta válido para una versión de PHP que haya instalado dentro de WAMPServer

Guárdelo en una de sus carpetas que ya está en su RUTA, para que pueda ejecutarlo desde cualquier lugar.

Ahora, desde una ventana de comandos, ingrese en su carpeta de origen y ejecute> phppath.

Entonces corre

php your_script.php

Debería funcionar como un sueño.

Aquí hay un ejemplo que configura PHP Composer y PEAR si es necesario y existen

@echo off

REM **************************************************************
REM * PLACE This file in a folder that is already on your PATH
REM * Or just put it in your C:\Windows folder as that is on the
REM * Search path by default
REM * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
REM * EDIT THE NEXT 3 Parameters to fit your installed WAMPServer
REM **************************************************************


set baseWamp=D:\wamp
set defaultPHPver=7.4.3
set composerInstalled=%baseWamp%\composer
set phpFolder=\bin\php\php

if %1.==. (
    set phpver=%baseWamp%%phpFolder%%defaultPHPver%
) else (
    set phpver=%baseWamp%%phpFolder%%1
)

PATH=%PATH%;%phpver%
php -v
echo ---------------------------------------------------------------


REM IF PEAR IS INSTALLED IN THIS VERSION OF PHP

IF exist %phpver%\pear (
    set PHP_PEAR_SYSCONF_DIR=D:\wamp\bin\php\php%phpver%
    set PHP_PEAR_INSTALL_DIR=D:\wamp\bin\php\php%phpver%\pear
    set PHP_PEAR_DOC_DIR=D:\wamp\bin\php\php%phpver%\docs
    set PHP_PEAR_BIN_DIR=D:\wamp\bin\php\php%phpver%
    set PHP_PEAR_DATA_DIR=D:\wamp\bin\php\php%phpver%\data
    set PHP_PEAR_PHP_BIN=D:\wamp\bin\php\php%phpver%\php.exe
    set PHP_PEAR_TEST_DIR=D:\wamp\bin\php\php%phpver%\tests

    echo PEAR INCLUDED IN THIS CONFIG
    echo ---------------------------------------------------------------
) else (
    echo PEAR DOES NOT EXIST IN THIS VERSION OF php
    echo ---------------------------------------------------------------
)

REM IF A GLOBAL COMPOSER EXISTS ADD THAT TOO
REM **************************************************************
REM * IF A GLOBAL COMPOSER EXISTS ADD THAT TOO
REM *
REM * This assumes that composer is installed in /wamp/composer
REM *
REM **************************************************************
IF EXIST %composerInstalled% (
    ECHO COMPOSER INCLUDED IN THIS CONFIG
    echo ---------------------------------------------------------------
    set COMPOSER_HOME=%baseWamp%\composer
    set COMPOSER_CACHE_DIR=%baseWamp%\composer

    PATH=%PATH%;%baseWamp%\composer

    rem echo TO UPDATE COMPOSER do > composer self-update
    echo ---------------------------------------------------------------
) else (
    echo ---------------------------------------------------------------
    echo COMPOSER IS NOT INSTALLED
    echo ---------------------------------------------------------------
)

set baseWamp=
set defaultPHPver=
set composerInstalled=
set phpFolder=

Llame a este archivo de comando así para usar la versión predeterminada de PHP

> phppath

O para obtener una versión específica de PHP como esta

> phppath 5.6.30
RiggsFolly
fuente
1
Funciona, gracias. ¿Puedes explicar cómo funciona esto? Veo la ruta a la carpeta php, pero ¿cómo la asocia con la variable de línea de comando "php", y qué hace PATH =% PATH%?
TetraDev
PATH=%PATH%dice crear una nueva variable de entorno PATH con la ruta actual, es decir, %PATH%más el nuevo directorio que queremos agregar. Windows busca carpetas en la RUTA para encontrar ejecutables, es decir, 'php.exe' que no puede encontrar en el directorio de trabajo actual.
RiggsFolly
1
Funciona bien en W10. Debes haber hecho algo mal
RiggsFolly
El OP estaba solicitando efectivamente un PHP REPL en Windows. No creo que esto responda a la pregunta
icc97
1
@Cullub no funciona en Power Shell - en shell normal funciona
Johanness
36

Recuerdo una vez cuando me topé con este problema hace unos años, es porque Windows no tiene readline, por lo tanto no tiene shell interactivo, para usar el modo interactivo php sin soporte readline, puede hacer esto en su lugar:

C:\>php -a 
Interactive mode enabled 

<?php 
echo "Hello, world!"; 
?> 
^Z 
Hello, world!

Después de ingresar al modo interactivo, escriba usando la etiqueta php de apertura ( <?php) y cierre ( ?>), y termine con el control Z ( ^Z) que indica el final del archivo.

También recuerdo que encontré la solución en el comentario del usuario del sitio de php: http://www.php.net/manual/en/features.commandline.interactive.php#105729

Hendra Uzia
fuente
PHP 7.1 se ha readlinehabilitado en la compilación de Windows. Hacerlo php -alo llevará al Interactive Shelly permitirá la ejecución de comandos cuando presione enter, no es necesario escribir, <?phpetc., vea este comentario para ver la diferencia: be2.php.net/manual/en/…
superphonic
12

Intenta usar un archivo por lotes

  1. Bloc de notas abierto
  2. tipo php -S localhost:8000
  3. guardar archivo como .batextensión,server.bat
  4. ahora haga clic en el server.batarchivo en el que su servidor está listohttp://localhost:8000

Dependencia

si tiene un error, php no reconoce ningún comando interno o externo, vaya a la variable de entorno y edite la ruta a php.exe "C:\wamp\bin\php\php5.4.3"

Nishchit Dhanani
fuente
Con WAMPServer nunca debe agregar nada a la ruta. Destruye la capacidad de cambiar fácilmente entre múltiples versiones de PHP
RiggsFolly
11

El problema que está describiendo parece que a su versión de PHP le puede faltar el módulo PHP readline, lo que hace que el shell interactivo no funcione. Baso esto en esta presentación de error de PHP .

Intenta correr

php -m

Y vea si aparece "readline" en la salida.

Puede haber buenas razones para omitir readline de la distribución. PHP normalmente lo ejecuta un servidor web; por lo que no es realmente necesario para la mayoría de los casos de uso. Estoy seguro de que puede ejecutar código PHP en un archivo desde el símbolo del sistema, usando:

php file.php

También está el proyecto phpsh que proporciona un (mejor) shell interactivo para PHP. Sin embargo, algunas personas han tenido problemas para ejecutarlo en Windows (no lo probé yo mismo).

Editar : De acuerdo con la documentación aquí , readlineno es compatible con Windows:

Nota: esta extensión no está disponible en plataformas Windows.

Entonces, si eso es correcto, sus opciones son:

  • Evite el shell interactivo y simplemente ejecute el código PHP en archivos desde la línea de comandos; esto debería funcionar bien
  • Intente hacer que phpsh funcione en Windows
driis
fuente
No, no aparece? ¿Qué significa?
Daman
Significa que el modo interactivo no funciona en su distribución PHP. Creo que es mejor poner el código en archivos .php y ejecutarlos desde la línea de comandos o mediante un servidor web, eso debería funcionar. El enlace en mi respuesta menciona que podría compilar PHP desde la fuente e incluirlo readlinepara que esto funcione, pero eso podría ser un poco complicado en Windows si no tiene la experiencia necesaria y toda la cadena de herramientas instalada.
driis
@driis Había instalado Python para usar phpsh desde Facebook, pero después de mucha investigación descubrí que phpsh no es compatible con Python 3 :( ¿Algo similar a phpsh que sea compatible con Python 3?
Daman
@Daman, lo siento, no tengo conocimiento de nada. ¿Quizás instalar Python 2? Además, creo que la gente también ha tenido problemas para ejecutar phpsh en Windows, nuevamente, no lo probé yo mismo.
driis
10

Si solo desea ejecutar un fragmento de código rápido, puede usar la opción -r:

php -r "echo 'hi';"

-r permite ejecutar código sin usar etiquetas de script <?..?>

James Lock
fuente
4

Puede ejecutar páginas php usando php.exe, cree algún archivo php con código php y en el cmd escriba "[PATH to php.ext]\php.exe [path_to_file]\file.php"

Adidi
fuente
¿Cuál es la ruta de su php.exe?
Adidi
C: \ wamp \ bin \ php \ php5.4.3 \ php.exe
Daman
1
así que cree, digamos el nombre de la página php test.php con <? php echo ('prueba'); ?> - colóquelo en c: / abra su línea de comando y escriba "C: \ wamp \ bin \ php \ php5.4.3 \ php.exe" "c: \ test.php" - ¿qué ve?
Adidi
2

ACTUALIZADO Después de algunas investigaciones, la mejor solución fue usar esa información en otro hilo de stackoverflow para evitar la entrada ctrl + z y también de la salida de pantalla. Entonces, en lugar de php -adebería usarcall "php.exe" -f NAMED_SCRIPT.php

ANTIGUO Readline no es posible en Windows, por lo que ninguno de los shells php existentes escritos en php funcionará. Pero hay una solución al usar -a modo interactivo.

2 problemas comunes aquí. No puede ver el resultado hasta que ejecute el comando CTRL Z para indicar el final del código / archivo como EOF. Cuando lo hace, el resultado en la mayoría de los casos es un resultado impreso y una ventana cerrada rápidamente. De todos modos, volverá a cmd, no al modo interactivo -a.

Guarde este contenido en un archivo .bat y defina su PATH PHP en las variables de Windows, o modifique php.exe a "ruta completa a exe" en su lugar:

::
:: PHP Shell launch wrapper
::
@ECHO off
call "php.exe" -a

echo.
echo.

call "PHP Shell.bat"

Este es un modo simple de ejecución por lotes -a de php.exe. Cuando se inicia php, se detiene el script aunque no se escriba una pausa porque está "en" el interactivo esperando entrada. Cuando presiona CTRL Z, obtiene el SIGSTEP (siguiente paso) no el SIGSTOP (cerrar, CTRL + C generalmente), luego lee la siguiente instrucción, que es una llamada recursiva a .bat. Porque siempre está en modo PHP -a, sin comando de salida. Debe usar CTRL + C o presionar la cruz de salida con el mouse. (Sin alt + f4)

También puede utilizar el convertidor "Bat to Exe" para facilitar su uso.

m3nda
fuente
1

simplemente siga estos pasos si no necesita su versión anterior de php:

  • abra wamp y haga clic derecho en el administrador de wamp y luego vaya: herramientas / Cambiar la versión de PHP CLI y luego cambiar la versión de php a la última
  • en otro momento, haga clic derecho en el administrador de wamp que vaya: herramientas / Eliminar versiones no utilizadas y elimine la versión más antigua que su sistema insiste en que sea la versión de php de su pc: D
  • vaya al panel de control / cuenta de usuario / cambie mis variables de entorno y en la variable PATH, haga clic en editar y agregue la ruta de la última versión de php que se encuentra en la carpeta bin del servidor wamp
  • cierre todas las líneas de comando o IDE y reinícielas y verifique php -v

esto funciona bien

Mohammad Hadi
fuente
0

Eso es porque estás en 'Modo Interactivo' donde php evalúa todo lo que escribes. Para ver el resultado final, haz 'ctrl + z' y Enter. Debería ver el resultado evaluado ahora :)

ps ejecuta el cmd como administrador!

saan
fuente
0

La siguiente solución es específicamente para entornos wamp:

Esto me confundió por un tiempo, probé todas las otras sugerencias, $ PATH, etc.incluso busqué en el registro de Windows en busca de pistas:

La GUI (wampmanager) indica que he seleccionado la versión 7 y sí, si phpinfo () en una página del navegador me dirá su versión 7.xx, pero php -v en el símbolo del sistema informa un 5.xx

Si hace clic derecho en la cabeza de wampmanager para icono-> herramientas-> eliminar versiones no utilizadas y eliminar la versión anterior, deje que reinicie los servicios y luego el símbolo del sistema devolverá un 7.xx

Esta solución significa que ya no tiene la versión anterior si desea cambiar entre versiones de php, pero hay un archivo de configuración en C: \ wamp64 \ wampmanager.conf que parece especificar la versión para usar con CLI (el parámetro se llama phpCliVersion) . Lo cambié, reinicié el servidor ... pensé que lo había resuelto, pero sin efecto, tal vez estaba un poco impaciente, así que tengo la sensación de que puede haber algo de kilometraje en eso.

Espero que ayude a alguien

BudaLincoln
fuente
1
La versión anterior, como usted la llama, es la versión de PHP con la que se prueban todos los scripts internos de WAMPServer. Si elimina PHP5.xx significa que corre el riesgo de que estos scripts no funcionen.
RiggsFolly
-1

En Windows, coloque su archivo php.exe en windows / system32 o en cualquier otra carpeta ejecutable del sistema y luego vaya a la línea de comando y escriba php y presione enter a continuación, si no genera ningún error, entonces está listo para usar PHP en la línea de comando . Si ha configurado su php.exe en otro lugar que no sea las carpetas del sistema predeterminadas, entonces debe establecer la ruta en las variables de entorno. Puedes llegar por el siguiente camino ....

panel de control -> Sistema -> Edith las variables de entorno de su cuenta -> Environment Vaiables -> ruta -> editar, luego configure la ruta absoluta de su php.exe allí y siga el mismo procedimiento que en el primer párrafo, si no hay nada en el error departamento, entonces está listo para usar php desde la línea de comando.

usuario3308965
fuente
Nunca ponga PHP en la RUTA cuando use WAMPServer. WAMPServer puede tener muchas versiones de PHP instaladas. Poner una versión en el PTH significa que no puede cambiar entre versiones.
RiggsFolly