¿Cómo instalo una CLI de PHP con un mensaje interactivo utilizable en Debian Wheezy?

10

Cuando instalo php5-cli en Debian Wheezy (actualmente en pruebas), el mensaje interactivo es muy inutilizable debido a la falta de soporte de readline (error 341868 ). ¿Cuál es la forma más fácil de instalar una versión vinculada a libreadline (para la edición de línea utilizable)?

Matthew Flaschen
fuente

Respuestas:

10

Utilice los paquetes estables de Dotdeb Debian. Aunque la documentación no toma nota de esto, los paquetes estables actualmente funcionan bien con Wheezy / testing. Después de seguir las instrucciones, haga:

apt-get install php5-cli

como raíz

Matthew Flaschen
fuente
1
nup todavía no hay php>aviso para mí :(
mulllhausen
6

Después de instalar php5-cli desde dotdeb , instale el paquete php5-readline.

apt-get install php5-readline
cmc
fuente
Esto solo está disponible en Jessie (prueba) - packages.debian.org/…
William Turrell
@williamt Gracias, creo que está en los repositorios dotdeb.
cmc
El paquete php5-readlineestá disponible en el archivo principal de jessie y sid. Y no necesitas el php5-clide dotdeb.
Ortomala Lokni
4

Como una adición a la respuesta de Gilles, que sugiere recompilar el paquete PHP completo, también puede esperar PHP 5.4. En 5.4 reestructuré la funcionalidad de línea de lectura de que todas las partes requeridas están en el módulo de línea de lectura, para que pueda construirla de manera independiente.

$ wget ...php-5.4.0.tar.bz2
$ tar xjf php-5.4.0.tar.bz2
$ cd php-5.4.0/ext/readline
$ phpize && ./configure && make

Luego terminará con un modules/readline.soque se puede cargar desde php.ini ( make installlo moverá a extension_dir)

Alternativamente, el distribuidor puede enviar el módulo readline (tal vez vinculado contra libedit, no readline) y el modo interactivo estará disponible.

Todo esto no lo ayudará ahora (ya que PHP 5.4 aún no está disponible), pero podría ayudar a otros a encontrar esta pregunta más adelante.

Algunos detalles más en mi blog: http://schlueters.de/blog/archives/133-Now-in-trunk-Improved-interactive-shell.html

Editar: en realidad, la publicación del blog es anterior a este cambio, pero aún puede ser interesante. Hay un poco de información en el informe de error # 53878 pero tampoco mucha ... después del lanzamiento http://php.net/commandline.interactive debería tener más.

johannes
fuente
Gracias, eso ayudó. Sin embargo, se encontró con 2 problemas en Ubuntu. Faltaba la biblioteca libedit (se solucionó instalando libedit-dev) y se produjo este error de compilación: bugs.php.net/bug.php?id=62612 La solución también está allí.
Dziamid
¡Es curioso cómo me contradigo a mí mismo! Sugiero aquí phpize etc., en el insecto que decir que no es "totalmente" el apoyo para hacerlo ;-)
Johannes
3

Instalar rlwrapy ejecutar rlwrap php5. Rlwrap es un contenedor genérico de línea de lectura, proporciona edición de línea de comando e historial para cualquier ciclo de lectura-evaluación-impresión. Dado que es un contenedor genérico, no obtendrá ninguna finalización específica de PHP.

Alternativamente, obtenga el paquete fuente y vuelva a generarlo con el soporte de readline. El soporte de Readline solo se dejó de lado debido a problemas de licencia , pero estos problemas solo prohíben distribuir PHP5 vinculado con readline, no le prohíben usarlo.

apt-get source php5-cli
apt-get install build-essential fakeroot
apt-get build-dep php5-cli
cd php5-*/
# Edit debian/rules to configure with readline support
# Add an entry to debian/changelog to remember what you did
dpkg-buildpackage -rfakeroot -us -uc -b -nc
Gilles 'SO- deja de ser malvado'
fuente
rlwrapno parece ayudar mucho Cuando corro rlwrap php5, ingreso echo 1;, luego presiono regresar y luego Ctrl-D (final de la entrada), emite la entrada en echo 1;lugar del resultado (1). Gracias por señalar que es un problema de licencia.
Matthew Flaschen
3
@Matthew: No sé nada sobre PHP, pero al intentar esto en lenny, no veo diferencia entre rlwrap php5y solo php5, aparte de la anterior edición de línea de comandos. Si ingresa <?php echo 1;?>, la salida es 1, pero no se emite inmediatamente en ninguno de los casos. Buscar en Google sugiere que php5simplemente no es un PHP REPL, y en su lugar deberías usar algo como phpsh .
Gilles 'SO- deja de ser malvado'
1
no ingresas <?php o ?>en el shell interactivo. Estoy de acuerdo en que php no tiene una REPL completa. Pero al usar una versión compilada con soporte de línea de lectura (por ejemplo, el paquete dotdeb que vinculé), generará 1 (o lo que sea la salida real) inmediatamente después de presionar enter. Estoy de acuerdo en que no hay una diferencia significativa entre rlwrap y ninguna línea de lectura (además de la edición de línea y el historial, que son agradables pero no tan útiles como la salida inmediata).
Matthew Flaschen
@Matthew: Ah, ¿entonces el soporte de readline hace más que solo vincularse con readline, también cambia el comportamiento del programa? Eso parece raro Luego puede reconstruir desde la fuente, o usar los paquetes dotdeb si funcionan para usted.
Gilles 'SO- deja de ser malvado'
Sí, muchas cosas en PHP parecen extrañas. ;) Pero parece que la ruta del código readline es diferente en esta área solo relacionada tangencialmente con readline.
Matthew Flaschen
3

Prueba esto:

$ php -a
Interactive mode enabled

<?php echo "hi!"; ?>

La prensa Ctrl-d

RoboTamer
fuente
55
Esto no parece tener nada que ver con la instalación de PHP
Michael Mrozek
1
En realidad, esto es muy útil, aunque no responde directamente a la pregunta. Muestra que en la ruta sin línea de lectura, PHP solo ejecuta código PHP dentro de <?php ?>bloques. No estaba al tanto de eso, y demuestra que antes había entendido mal a Gilles.
Matthew Flaschen
3

Para los usuarios de Ubuntu, php5-readline es el paquete adicional que necesita instalar para tener un símbolo del sistema php utilizable:

sudo apt-get install php5-cli php5-readline
sudo php5enmod readline

Tenía que hacer esto en mi Ubuntu 14.04.

Wouter Thielen
fuente
1

En debian jessie y en debian sid usa:

sudo apt-get install php5 php5-readline

luego

php -a
Interactive mode enabled

php > echo 1+2;
3
php >
Ortomala Lokni
fuente