Bagaimana cara saya menginstal PHP CLI dengan prompt interaktif yang dapat digunakan di Debian Wheezy?

10

Ketika saya menginstal php5-cli pada Debian Wheezy (saat ini sedang diuji), prompt interaktif sangat tidak dapat digunakan karena tidak ada dukungan readline (bug 341868 ). Apa cara termudah untuk menginstal versi yang ditautkan dengan libreadline (untuk mengedit garis yang dapat digunakan)?

Matthew Flaschen
sumber

Jawaban:

10

Gunakan paket stabil Dotdeb Debian. Meskipun dokumentasi tidak mencatat ini, paket stabil saat ini berfungsi dengan baik dengan Wheezy / pengujian. Setelah mengikuti instruksi, lakukan:

apt-get install php5-cli

sebagai root.

Matthew Flaschen
sumber
1
nup masih ada php>prompt untuk saya :(
mulllhausen
6

Setelah menginstal php5-cli dari dotdeb , instal paket php5-readline.

apt-get install php5-readline
cmc
sumber
Ini hanya tersedia di Jessie (pengujian) - packages.debian.org/…
William Turrell
@williamt Terima kasih, saya percaya ini ada di repositori dotdeb.
cmc
Paket php5-readlineini tersedia di arsip utama jessie dan sid. Dan Anda tidak perlu php5-clidari dotdeb.
Ortomala Lokni
4

Sebagai tambahan untuk jawaban oleh Gilles yang menyarankan kompilasi ulang paket PHP lengkap Anda juga dapat menunggu untuk PHP 5.4. Di 5.4 saya merestrukturisasi fungsionalitas readline bahwa semua bagian yang diperlukan ada dalam modul readline, sehingga Anda dapat membangunnya sendiri.

$ 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

Maka Anda akan berakhir dengan modules/readline.soyang dapat diambil dari php.ini ( make installakan dipindahkan ke extension_dir)

Atau distributor dapat mengirimkan modul readline (mungkin terkait dengan libedit, bukan readline) dan mode interaktif akan tersedia.

Ini semua tidak akan membantu Anda sekarang (karena PHP 5.4. Belum keluar) tetapi mungkin membantu orang lain menemukan pertanyaan ini nanti.

Beberapa detail lainnya di blog saya: http://schlueters.de/blog/archives/133-Now-in-trunk-Improved-interactive-shell.html

Sunting: Sebenarnya postingan blog lebih tua dari perubahan ini, tetapi mungkin masih menarik. Sedikit informasi ada di laporan bug # 53878 tetapi tidak banyak juga ... setelah rilis http://php.net/commandline.interactive seharusnya memiliki lebih banyak.

johannes
sumber
Terima kasih, itu membantu. Namun menemukan 2 masalah di Ubuntu. Tidak ada perpustakaan libedit (diperbaiki dengan menginstal libedit-dev) dan bug kompilasi ini terjadi: bugs.php.net/bug.php?id=62612 Solusi juga ada.
Dziamid
Lucu bagaimana saya bertentangan dengan diri saya sendiri! di sini saya sarankan phpize dll di bug saya katakan itu tidak "sepenuhnya" didukung untuk melakukannya ;-)
johannes
3

Instal rlwrapdan jalankan rlwrap php5. Rlwrap adalah pembungkus readline umum, ia menyediakan edisi baris perintah dan sejarah untuk setiap loop read-eval-print. Karena ini pembungkus generik, Anda tidak akan mendapatkan penyelesaian khusus PHP.

Atau, dapatkan paket sumber dan buat kembali dengan dukungan readline. Dukungan Readline hanya ditinggalkan karena masalah perizinan , tetapi masalah ini hanya melarang mendistribusikan PHP5 yang dikaitkan dengan readline, mereka tidak melarang Anda menggunakannya.

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 'SANGAT berhenti menjadi jahat'
sumber
rlwrapsepertinya tidak banyak membantu. Ketika saya menjalankan rlwrap php5, masuk echo 1;, lalu tekan kembali kemudian Ctrl-D (akhir input), itu output input echo 1;bukan hasil (1). Terima kasih telah memperhatikan bahwa ini masalah lisensi.
Matthew Flaschen
3
@ Matthew: Saya tidak tahu apa-apa tentang PHP, tetapi mencoba ini pada lenny, saya tidak melihat perbedaan antara rlwrap php5dan hanya php5, selain yang sebelumnya memungkinkan edisi baris perintah. Jika Anda memasukkan <?php echo 1;?>, hasilnya adalah 1, tetapi tidak segera dipancarkan dalam kedua kasus. Googling menyarankan bahwa php5itu bukan PHP REPL, dan Anda harus menggunakan sesuatu seperti phpsh .
Gilles 'SO- stop being evil'
1
Anda tidak memasukkan <?php atau ?>di shell interaktif. Saya setuju bahwa php tidak memiliki REPL penuh. Tetapi menggunakan versi yang dikompilasi dengan dukungan readline yang berfungsi (mis. Paket dotdeb yang saya tautkan), itu akan menampilkan 1 (atau apa pun output sebenarnya) segera setelah Anda menekan enter. Saya setuju tidak ada perbedaan yang signifikan antara rlwrap dan tidak ada readline sama sekali (selain pengeditan baris dan sejarah, yang bagus tapi tidak berguna sebagai output langsung).
Matthew Flaschen
@ Matthew: Ah, jadi dukungan readline tidak lebih dari sekadar tautan dengan readline, itu juga mengubah perilaku program? Sepertinya aneh. Kemudian Anda dapat membangun kembali dari sumber, atau menggunakan paket dotdeb jika mereka bekerja untuk Anda.
Gilles 'SO- stop being evil'
ya, banyak hal dalam PHP yang tampak aneh. ;) Tapi itu memang terlihat seperti jalur kode readline berbeda di area ini yang hanya berhubungan dengan readline.
Matthew Flaschen
3

Coba ini:

$ php -a
Interactive mode enabled

<?php echo "hi!"; ?>

Tekan Ctrl-d

RoboTamer
sumber
5
Ini sepertinya tidak ada hubungannya dengan menginstal PHP
Michael Mrozek
1
Ini sebenarnya sangat membantu, meskipun tidak langsung menjawab pertanyaan. Ini menunjukkan bahwa di jalur non- garis, PHP hanya mengeksekusi kode PHP di dalam <?php ?>blok. Saya tidak menyadarinya, dan itu menunjukkan saya salah paham terhadap Gilles sebelumnya.
Matthew Flaschen
3

Untuk pengguna Ubuntu, php5-readline adalah paket tambahan yang perlu Anda instal untuk memiliki prompt perintah php yang dapat digunakan:

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

Saya harus melakukan ini di Ubuntu 14.04 saya.

Wouter Thielen
sumber
1

Dalam debian jessie dan digunakan debian sid:

sudo apt-get install php5 php5-readline

kemudian

php -a
Interactive mode enabled

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