Jak zainstalować PHP CLI z użytecznym interaktywnym monitem w Debian Wheezy?


10

Kiedy instaluję php5-cli na Debian Wheezy (obecnie testuję ) , interaktywny monit jest bardzo bezużyteczny z powodu braku obsługi readline (błąd 341868 ). Jaki jest najłatwiejszy sposób zainstalowania wersji powiązanej z libreadline (do edycji linii użytkowej)?

Odpowiedzi:


10

Użyj stabilnych pakietów Debiana Dotdeb . Chociaż dokumentacja tego nie zauważa, stabilne pakiety działają obecnie dobrze z Wheezy / testowaniem. Po wykonaniu instrukcji wykonaj:

apt-get install php5-cli

jako root.


1
nup nadal nie ma php>dla mnie monitu :(
Mulllhausen

6

Po zainstalowaniu php5-cli z dotdeb , zainstaluj pakiet php5-readline.

apt-get install php5-readline

Jest to dostępne tylko w Jessie (testowanie) - packages.debian.org/…
William Turrell

@williamt Dzięki, uważam, że jest w repozytoriach dotdeb.
cmc

Pakiet php5-readlinejest dostępny w głównym archiwum jessie i sid. I nie potrzebujesz php5-cliz dotdeb.
Ortomala Lokni

4

Jako dodatek do odpowiedzi Gillesa, który sugeruje rekompilację pełnego pakietu PHP, możesz także poczekać na PHP 5.4. W 5.4 zrestrukturyzowałem funkcjonalność readline, że wszystkie wymagane części znajdują się w module readline, dzięki czemu możesz zbudować ten samodzielny.

$ 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

Następnie skończysz modules/readline.soz plikiem, który można załadować z php.ini ( make installprzeniesie go do extension_dir)

Alternatywnie dystrybutor może wysłać moduł readline (być może powiązany z libedit, a nie readline), a tryb interaktywny będzie dostępny.

To wszystko nie pomoże ci teraz (ponieważ PHP 5.4 nie jest jeszcze dostępne), ale może pomóc innym znaleźć to pytanie później.

Więcej szczegółów na moim blogu: http://schlueters.de/blog/archives/133-Now-in-trunk-Improved-interactive-shell.html

Edycja: W rzeczywistości post na blogu jest starszy niż ta zmiana, ale może być interesujący. Trochę informacji znajduje się w raporcie o błędzie # 53878, ale też niewiele ... po wydaniu http://php.net/commandline.interactive powinno mieć więcej.


Dzięki, to pomogło. Wystąpił jednak problem 2 w systemie Ubuntu. Brakowało biblioteki libedit (naprawionej przez zainstalowanie libedit-dev) i pojawił się ten błąd kompilacji: bugs.php.net/bug.php?id=62612 Rozwiązanie również tam jest.
Dziamid

Zabawne, jak sobie zaprzeczam! tutaj sugeruję phpize itp. w błędzie Mówię, że nie jest to „w pełni” obsługiwane ;-)
johannes

3

Zainstaluj rlwrapi uruchom rlwrap php5. Rlwrap to ogólne opakowanie readline, zapewnia edycję i historię wiersza poleceń dla dowolnej pętli read-eval-print. Ponieważ jest to ogólne opakowanie, nie otrzymasz żadnego zakończenia specyficznego dla PHP.

Alternatywnie, pobierz pakiet źródłowy i przebuduj go z obsługą readline. Wsparcie Readline zostało pominięte tylko z powodu problemów licencyjnych , ale te problemy zabraniają jedynie dystrybucji PHP5 połączonego z readline, nie zabraniają ci korzystania z niego.

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

rlwrapwydaje się, że niewiele pomaga. Kiedy uruchamiam rlwrap php5, wchodzę echo 1;, a następnie wciskam return, a następnie Ctrl-D (koniec wprowadzania), wypisuje dane wejściowe echo 1;zamiast wyniku (1). Dziękujemy za zwrócenie uwagi na problem z licencjonowaniem.
Matthew Flaschen,

3
@Matthew: Nie wiem nic o PHP, ale próbując tego na Lenny, nie widzę żadnej różnicy pomiędzy rlwrap php5i po prostu php5, oprócz poprzedniej, pozwalającej na edycję z linii poleceń. Jeśli wejdziesz <?php echo 1;?>, dane wyjściowe są 1, ale w żadnym przypadku nie są emitowane natychmiast. Googling sugeruje, że php5po prostu nie jest to REPL PHP i powinieneś użyć czegoś takiego jak phpsh .
Gilles 'SO - przestań być zły'

1
nie wprowadzić <?php lub ?>w interaktywnej powłoki. Zgadzam się, że php nie ma pełnej REPL. Ale używając wersji skompilowanej z działającym wsparciem readline (np. Pakiet dotdeb, który podłączyłem), wypisze 1 (lub cokolwiek to jest rzeczywiste wyjście) natychmiast po naciśnięciu enter. Zgadzam się, że nie ma znaczącej różnicy między rlwrap a brakiem odczytu (oprócz edycji linii i historii, które są ładne, ale nie tak przydatne jak natychmiastowe wyjście).
Matthew Flaschen

@Matthew: Ach, więc obsługa readline nie tylko łączy się z readline, ale także zmienia zachowanie programu? To wydaje się dziwne. Następnie możesz przebudować ze źródła lub użyć pakietów dotdeb, jeśli działają one dla Ciebie.
Gilles „SO- przestań być zły”

tak, wiele rzeczy w PHP wydaje się dziwnych. ;) Ale wygląda na to, że ścieżka kodu readline różni się w tym obszarze tylko stycznie powiązana z readline.
Matthew Flaschen

3

Spróbuj tego:

$ php -a
Interactive mode enabled

<?php echo "hi!"; ?>

Naciśnij Ctrl-d


5
Wydaje się, że nie ma to nic wspólnego z instalacją PHP
Michael Mrozek

1
Jest to w rzeczywistości bardzo pomocne, nawet jeśli nie odpowiada bezpośrednio na pytanie. To pokazuje, że w braku -readline ścieżce, PHP wykonuje tylko kod PHP wewnątrz <?php ?>bloków. Nie byłam tego świadoma, co pokazuje, że wcześniej źle zrozumiałem Gillesa.
Matthew Flaschen

3

Dla użytkowników Ubuntu php5-readline jest dodatkowym pakietem, który musisz zainstalować, aby mieć przydatny wiersz polecenia php:

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

Musiałem to zrobić na moim Ubuntu 14.04.



1

W debian jessie i debian sid użyj:

sudo apt-get install php5 php5-readline

następnie

php -a
Interactive mode enabled

php > echo 1+2;
3
php >
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.