Wie installiere ich eine PHP-CLI mit einer verwendbaren interaktiven Eingabeaufforderung auf Debian Wheezy?

10

Wenn ich php5-cli auf Debian Wheezy installiere (derzeit getestet), ist die interaktive Eingabeaufforderung aufgrund fehlender Readline-Unterstützung (Fehler 341868 ) sehr unbrauchbar . Was ist der einfachste Weg, um eine mit libreadline verknüpfte Version zu installieren (für die nutzbare Zeilenbearbeitung)?

Matthew Flaschen
quelle

Antworten:

10

Verwenden Sie die stabilen Dotdeb Debian-Pakete. Obwohl dies in der Dokumentation nicht erwähnt wird, funktionieren die stabilen Pakete derzeit problemlos mit Wheezy / testing. Nachdem Sie die Anweisungen befolgt haben, gehen Sie wie folgt vor:

apt-get install php5-cli

als Wurzel.

Matthew Flaschen
quelle
1
nup noch keine php>Aufforderung für mich :(
Mulllhausen
6

Installieren Sie nach der Installation von php5-cli von dotdeb das Paket php5-readline.

apt-get install php5-readline
cmc
quelle
Dies ist nur in Jessie (Testen) verfügbar - packages.debian.org/…
William Turrell
@williamt Danke, ich glaube es ist in den Dotdeb-Repositories.
cmc
Das Paket php5-readlineist im Hauptarchiv von Jessie und Sid verfügbar. Und das php5-clivon dotdeb brauchst du nicht .
Ortomala Lokni
4

Als Ergänzung zu der Antwort von Gilles, der vorschlägt, das gesamte PHP-Paket neu zu kompilieren, können Sie auch auf PHP 5.4 warten. In 5.4 habe ich die Readline-Funktionalität so umstrukturiert, dass sich alle erforderlichen Teile im Readline-Modul befinden, sodass Sie diese eigenständig erstellen können.

$ 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

Dann erhalten Sie eine, modules/readline.sodie von php.ini geladen werden kann ( make installwird verschoben nach extension_dir)

Alternativ kann der Distributor das Readline-Modul versenden (möglicherweise mit libedit verknüpft, nicht mit readline), und der interaktive Modus ist verfügbar.

Dies alles wird Ihnen jetzt nicht helfen (da PHP 5.4 noch nicht verfügbar ist), könnte aber anderen helfen, diese Frage später zu finden.

Weitere Details in meinem Blog: http://schlueters.de/blog/archives/133-Now-in-trunk-Improved-interactive-shell.html

Bearbeiten: Eigentlich ist der Blog-Beitrag älter als diese Änderung, könnte aber trotzdem interessant sein. Ein paar Informationen sind im Fehlerbericht # 53878 enthalten, aber auch nicht viel ... nach der Veröffentlichung sollte http://php.net/commandline.interactive mehr enthalten.

johannes
quelle
Danke, das hat geholfen. Unter Ubuntu sind jedoch 2 Probleme aufgetreten. Es fehlte die libedit-Bibliothek (behoben durch die Installation von libedit-dev) und dieser Kompilierungsfehler trat auf: bugs.php.net/bug.php?id=62612 Die Lösung ist ebenfalls vorhanden.
Dziamid
Komisch, wie ich mir widerspreche! hier schlage ich phpize etc. im bug vor ich sage es wird nicht "voll" unterstützt dies zu tun ;-)
johannes
3

Installieren rlwrapund ausführen rlwrap php5. Rlwrap ist ein generischer Readline-Wrapper, der Befehlszeilenausgabe und -verlauf für jede Read-Eval-Print-Schleife bereitstellt. Da es sich um einen generischen Wrapper handelt, erhalten Sie keine PHP-spezifische Vervollständigung.

Alternativ können Sie das Quellpaket herunterladen und mit Readline-Unterstützung neu erstellen. Die Readline-Unterstützung wurde nur aufgrund von Lizenzproblemen ausgelassen. Diese Probleme verbieten jedoch nur die Verbreitung von PHP5 in Verbindung mit Readline. Sie verbieten Ihnen nicht, es zu verwenden.

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 - hör auf böse zu sein'
quelle
rlwrapscheint nicht viel zu helfen. Wenn ich laufe rlwrap php5, gebe ein echo 1;, drücke dann die Eingabetaste und dann Strg-D (Ende der Eingabe), es gibt die Eingabe echo 1;anstelle des Ergebnisses aus (1). Vielen Dank, dass Sie ein Lizenzproblem festgestellt haben.
Matthew Flaschen
3
@Matthew: Ich weiß nichts über PHP, aber wenn ich das auf Lenny versuche, sehe ich keinen Unterschied zwischen rlwrap php5und nur php5, abgesehen von der früheren, die die Befehlszeilenausgabe zulässt. Wenn Sie eingeben <?php echo 1;?>, ist die Ausgabe 1, wird aber in beiden Fällen nicht sofort ausgegeben . Googeln schlägt vor, dass dies php5einfach keine PHP-REPL ist, und Sie sollten stattdessen so etwas wie phpsh verwenden.
Gilles 'SO - hör auf böse zu sein'
1
Sie geben das <?php oder nicht ?>in die interaktive Shell ein. Ich bin damit einverstanden, dass PHP keine vollständige REPL hat. Bei Verwendung einer Version, die mit funktionierender Readline-Unterstützung kompiliert wurde (z. B. das von mir verknüpfte Dotdeb-Paket), wird unmittelbar nach dem Drücken der Eingabetaste 1 (oder eine beliebige tatsächliche Ausgabe) ausgegeben. Ich bin damit einverstanden, dass es keinen signifikanten Unterschied zwischen rlwrap und überhaupt keiner Readline gibt (abgesehen von Zeilenbearbeitung und Verlauf, die nett, aber nicht so nützlich sind wie die sofortige Ausgabe).
Matthew Flaschen
@Matthew: Ah, also Readline-Unterstützung ist mehr als nur eine Verknüpfung mit Readline, sie ändert auch das Verhalten des Programms? Das scheint komisch. Dann können Sie aus dem Quellcode neu erstellen oder die dotdeb-Pakete verwenden, wenn sie für Sie funktionieren.
Gilles 'SO - hör auf böse zu sein'
Ja, viele Dinge in PHP scheinen seltsam. ;) Aber es sieht so aus, als ob der Readline-Codepfad in diesem Bereich nur tangential mit Readline verwandt ist.
Matthew Flaschen
3

Versuche dies:

$ php -a
Interactive mode enabled

<?php echo "hi!"; ?>

Drücken Sie Strg-d

RoboTamer
quelle
5
Dies scheint nichts mit der Installation von PHP zu tun zu haben
Michael Mrozek
1
Dies ist eigentlich sehr hilfreich, obwohl es die Frage nicht direkt beantwortet. Es zeigt, dass PHP im Nicht- Readline-Pfad PHP-Code nur innerhalb von <?php ?>Blöcken ausführt . Ich war mir dessen nicht bewusst und es zeigt, dass ich Gilles früher missverstanden habe.
Matthew Flaschen
3

Für Ubuntu-Benutzer ist php5-readline das zusätzliche Paket, das Sie installieren müssen, um eine verwendbare PHP-Eingabeaufforderung zu erhalten:

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

Ich musste dies auf meinem Ubuntu 14.04 tun.

Wouter Thielen
quelle
1

In Debian Jessie und in Debian Sid verwenden:

sudo apt-get install php5 php5-readline

dann

php -a
Interactive mode enabled

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