Comment installer une CLI PHP avec une invite interactive utilisable sur Debian Wheezy?

10

Lorsque j'installe php5-cli sur Debian Wheezy (en cours de test), l'invite interactive est très inutilisable en raison du manque de prise en charge de la ligne de lecture (bug 341868 ). Quelle est la façon la plus simple d'installer une version liée à libreadline (pour l'édition de ligne utilisable)?

Matthew Flaschen
la source

Réponses:

10

Utilisez les packages stables Debian de Dotdeb . Bien que la documentation ne le note pas, les packages stables fonctionnent actuellement correctement avec Wheezy / testing. Après avoir suivi les instructions, procédez comme suit:

apt-get install php5-cli

en tant que root.

Matthew Flaschen
la source
1
nup toujours pas d' php>invite pour moi :(
mulllhausen
6

Après avoir installé php5-cli à partir de dotdeb , installez le paquet php5-readline.

apt-get install php5-readline
cmc
la source
Ceci est uniquement disponible dans Jessie (testing) - packages.debian.org/…
William Turrell
@williamt Merci, je crois que c'est dans les dépôts dotdeb.
cmc
Le paquet php5-readlineest disponible dans les archives principales de Jessie et Sid. Et vous n'avez pas besoin de la php5-clidotdeb.
Ortomala Lokni
4

En complément de la réponse de Gilles qui suggère de recompiler le package PHP complet, vous pouvez également attendre PHP 5.4. Dans 5.4, j'ai restructuré la fonctionnalité de ligne de lecture pour que toutes les pièces requises se trouvent dans le module de ligne de lecture, afin que vous puissiez créer celle-ci de manière autonome.

$ 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

Ensuite, vous vous retrouverez avec un modules/readline.sofichier qui peut être chargé à partir de php.ini ( make installle déplacera vers extension_dir)

Alternativement, le distributeur peut expédier le module readline (peut-être lié à libedit, pas readline) et le mode interactif sera disponible.

Tout cela ne vous aidera pas maintenant (car PHP 5.4 n'est pas encore disponible) mais pourrait aider d'autres personnes à trouver cette question plus tard.

Quelques détails supplémentaires sur mon blog: http://schlueters.de/blog/archives/133-Now-in-trunk-Improved-interactive-shell.html

Edit: En fait, le billet de blog est plus ancien que ce changement, mais pourrait toujours être intéressant. Un peu d'informations est dans le rapport de bogue # 53878 mais pas beaucoup non plus ... après la publication http://php.net/commandline.interactive devrait en avoir plus.

johannes
la source
Merci, ça a aidé. Problème rencontré sur Ubuntu, cependant. Il manquait la bibliothèque libedit (corrigé en installant libedit-dev) et ce bogue de compilation s'est produit: bugs.php.net/bug.php?id=62612 La solution est également là.
Dziamid
C'est drôle comme je me contredit! ici, je suggère phpize, etc. dans le bogue, je dis que ce n'est pas "entièrement" pris en charge pour le faire ;-)
johannes
3

Installez rlwrapet exécutez rlwrap php5. Rlwrap est un wrapper de ligne de lecture générique, il fournit l'édition et l'historique de la ligne de commande pour toute boucle de lecture-évaluation-impression. Comme il s'agit d'un wrapper générique, vous n'obtiendrez aucune complétion spécifique à PHP.

Vous pouvez également obtenir le package source et le reconstruire avec le support readline. La prise en charge de Readline n'a été omise qu'en raison de problèmes de licence , mais ces problèmes interdisent uniquement la distribution de PHP5 lié à readline, ils ne vous interdisent pas de l'utiliser.

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- arrête d'être méchant'
la source
rlwrapne semble pas beaucoup aider. Lorsque je cours rlwrap php5, saisis echo 1;, puis appuie sur retour puis sur Ctrl-D (fin d'entrée), il sort l'entrée echo 1;au lieu du résultat (1). Merci de noter qu'il s'agit d'un problème de licence.
Matthew Flaschen le
3
@Matthew: Je ne sais rien de PHP, mais en essayant cela sur Lenny, je ne vois aucune différence entre rlwrap php5et juste php5, à part l'ancienne autorisant l'édition en ligne de commande. Si vous entrez <?php echo 1;?>, la sortie est 1, mais elle n'est pas émise immédiatement dans les deux cas. La recherche sur Google suggère que ce php5n'est tout simplement pas un PHP REPL, et vous devriez utiliser quelque chose comme phpsh à la place.
Gilles 'SO- arrête d'être méchant'
1
vous n'entrez pas le <?php ou ?>dans le shell interactif. Je suis d'accord que php n'a pas de REPL complet. Mais en utilisant une version compilée avec un support de lecture en ligne fonctionnel (par exemple le package dotdeb que j'ai lié), il affichera 1 (ou quelle que soit la sortie réelle) immédiatement après avoir appuyé sur Entrée. Je suis d'accord qu'il n'y a pas de différence significative entre rlwrap et pas de ligne de lecture du tout (à part l'édition de ligne et l'historique, qui sont agréables mais pas aussi utiles que la sortie immédiate).
Matthew Flaschen le
@Matthew: Ah, donc le support de readline fait plus que simplement un lien avec readline, cela change aussi le comportement du programme? Cela semble bizarre. Ensuite, vous pouvez reconstruire à partir des sources ou utiliser les packages dotdeb s'ils fonctionnent pour vous.
Gilles 'SO- arrête d'être méchant'
oui, beaucoup de choses en PHP semblent étranges. ;) Mais il semble que le chemin du code de la ligne de lecture soit différent dans ce domaine uniquement lié tangentiellement à la ligne de lecture.
Matthew Flaschen le
3

Essaye ça:

$ php -a
Interactive mode enabled

<?php echo "hi!"; ?>

La presse Ctrl-d

RoboTamer
la source
5
Cela ne semble pas avoir à voir avec l'installation de PHP
Michael Mrozek
1
C'est en fait très utile, même si cela ne répond pas directement à la question. Cela montre que dans le chemin non-ligne de lecture, PHP exécute uniquement le code PHP à l'intérieur des <?php ?>blocs. Je n'étais pas au courant de cela, et cela montre que j'ai mal compris Gilles plus tôt.
Matthew Flaschen
3

Pour les utilisateurs d'Ubuntu, php5-readline est le package supplémentaire que vous devez installer pour avoir une invite de commande php utilisable:

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

Je devais le faire sur mon Ubuntu 14.04.

Wouter Thielen
la source
1

Dans Debian Jessie et dans Debian Sid, utilisez:

sudo apt-get install php5 php5-readline

puis

php -a
Interactive mode enabled

php > echo 1+2;
3
php >
Ortomala Lokni
la source