Odpowiedzi:
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.
Po zainstalowaniu php5-cli z dotdeb , zainstaluj pakiet php5-readline.
apt-get install php5-readline
php5-readline
jest dostępny w głównym archiwum jessie i sid. I nie potrzebujesz php5-cli
z dotdeb.
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.so
z plikiem, który można załadować z php.ini ( make install
przeniesie 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.
Zainstaluj rlwrap
i 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
rlwrap
wydaje 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.
rlwrap php5
i 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 php5
po prostu nie jest to REPL PHP i powinieneś użyć czegoś takiego jak phpsh .
<?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).
Spróbuj tego:
$ php -a
Interactive mode enabled
<?php echo "hi!"; ?>
Naciśnij Ctrl-d
<?php ?>
bloków. Nie byłam tego świadoma, co pokazuje, że wcześniej źle zrozumiałem Gillesa.
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.
Żadne z tych nie działało dla mnie. Zamiast tego użyj http://www.phpsh.org/ .
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 >
php>
dla mnie monitu :(