Come installo una CLI PHP con un prompt interattivo utilizzabile su Debian Wheezy?


10

Quando installo php5-cli su Debian Wheezy (attualmente in fase di test), il prompt interattivo è molto inutilizzabile a causa della mancanza del supporto readline (bug 341868 ). Qual è il modo più semplice per installare una versione collegata a libreadline (per la modifica della linea utilizzabile)?

Risposte:


10

Utilizzare i pacchetti stabili Dotdeb Debian. Sebbene la documentazione non lo noti, i pacchetti stabili attualmente funzionano bene con Wheezy / testing. Dopo aver seguito le istruzioni, procedere come segue:

apt-get install php5-cli

come radice.


1
nup ancora nessun suggerimento php>per me :(
mulllhausen,

6

Dopo aver installato php5-cli da dotdeb , installare il pacchetto php5-readline.

apt-get install php5-readline

Questo è disponibile solo in Jessie (testing) - pacchetti.debian.org/…
William Turrell,

@williamt Grazie, credo che sia nei repository dotdeb.
cmc

Il pacchetto php5-readlineè disponibile nell'archivio principale di jessie e sid. E non hai bisogno di php5-clifrom dotdeb.
Ortomala Lokni,

4

In aggiunta alla risposta di Gilles che suggerisce di ricompilare il pacchetto PHP completo, puoi anche aspettare PHP 5.4. In 5.4 ho ristrutturato la funzionalità readline secondo cui tutte le parti richieste si trovano nel modulo readline, in modo da poterle costruire da sole.

$ 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

Quindi finirai con un file modules/readline.soche può essere caricato da php.ini ( make installlo sposta su extension_dir)

In alternativa, il distributore può spedire il modulo readline (forse collegato contro libedit, non readline) e la modalità interattiva sarà disponibile.

Tutto ciò non ti aiuterà ora (dato che PHP 5.4 non è ancora uscito) ma potrebbe aiutare gli altri a trovare questa domanda in seguito.

Alcuni maggiori dettagli sul mio blog: http://schlueters.de/blog/archives/133-Now-in-trunk-Improved-interactive-shell.html

Modifica: in realtà il post sul blog è più vecchio di questa modifica, ma potrebbe essere comunque interessante. Alcune informazioni sono contenute nella segnalazione bug # 53878, ma non molto ... dopo il rilascio http://php.net/commandline.interactive dovrebbe essercene di più.


Grazie, mi ha aiutato. Incontrato 2 problema su Ubuntu, tuttavia. Mancava la libreria libedit (risolta installando libedit-dev) e si è verificato questo errore di compilazione: bugs.php.net/bug.php?id=62612 C'è anche una soluzione.
Dziamid,

Divertente come mi contraddico! qui suggerisco phpize ecc. nel bug dico che non è "pienamente" supportato per farlo ;-)
johannes

3

Installa rlwraped esegui rlwrap php5. Rlwrap è un wrapper readline generico, fornisce l'edizione e la cronologia della riga di comando per qualsiasi ciclo di lettura-eval-stampa. Dal momento che è un wrapper generico, non otterrai alcun completamento specifico di PHP.

In alternativa, ottenere il pacchetto sorgente e ricostruirlo con il supporto readline. Il supporto di readline è stato escluso solo a causa di problemi di licenza , ma questi problemi vietano solo la distribuzione di PHP5 collegato a readline, non ti vietano di 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

rlwrapnon sembra aiutare molto. Quando corro rlwrap php5, invio echo 1;, quindi premi Invio poi Ctrl-D (fine dell'input), emette l'input echo 1;invece del risultato (1). Grazie per aver notato che si tratta di un problema di licenza.
Matthew Flaschen,

3
@Matthew: Non so nulla di PHP, ma provando questo su Lenny, non vedo alcuna differenza tra rlwrap php5e solo php5, a parte il precedente che consente l'edizione da riga di comando. Se si immette <?php echo 1;?>, l'output è 1, ma non viene emesso immediatamente in entrambi i casi. Google suggerisce che php5semplicemente non è un PHP REPL, e invece dovresti usare qualcosa come phpsh .
Gilles 'SO- smetti di essere malvagio' il

1
non si inserisce la <?php o ?>nella shell interattiva. Sono d'accordo che php non ha un REPL completo. Ma usando una versione compilata con il supporto readline funzionante (ad esempio il pacchetto dotdeb che ho collegato), produrrà 1 (o qualunque sia l'output reale) immediatamente dopo aver premuto Invio. Concordo sul fatto che non esiste alcuna differenza significativa tra rlwrap e nessuna readline (a parte il line-editing e la cronologia, che sono belli ma non utili quanto l'output immediato).
Matthew Flaschen,

@Matthew: Ah, quindi il supporto readline non si limita al semplice collegamento con readline, ma cambia anche il comportamento del programma? Sembra strano. Quindi puoi ricostruire dal sorgente o usare i pacchetti dotdeb se funzionano per te.
Gilles 'SO- smetti di essere malvagio' il

sì, molte cose in PHP sembrano strane. ;) Ma sembra che il percorso del codice readline sia diverso in quest'area solo tangenzialmente correlato a readline.
Matthew Flaschen,

3

Prova questo:

$ php -a
Interactive mode enabled

<?php echo "hi!"; ?>

Premi Ctrl-d


5
Questo non sembra avere nulla a che fare con l'installazione di PHP
Michael Mrozek

1
Questo in realtà è molto utile, anche se non risponde direttamente alla domanda. Mostra che nel percorso non- riga, PHP esegue solo il codice PHP all'interno dei <?php ?>blocchi. Non ne ero a conoscenza e questo dimostra che avevo frainteso Gilles in precedenza.
Matthew Flaschen,

3

Per gli utenti Ubuntu, php5-readline è il pacchetto aggiuntivo che devi installare per avere un prompt dei comandi php utilizzabile:

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

Ho dovuto farlo sul mio Ubuntu 14.04.



1

In debian jessie e in debian sid usare:

sudo apt-get install php5 php5-readline

poi

php -a
Interactive mode enabled

php > echo 1+2;
3
php >
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.