ฉันจะติดตั้ง PHP CLI ด้วยพรอมต์แบบโต้ตอบที่ใช้งานได้บน Debian Wheezy อย่างไร


10

เมื่อฉันติดตั้ง php5-cli บน Debian Wheezy (การทดสอบในปัจจุบัน) พรอมต์อินเทอร์แอคทีฟใช้งานไม่ได้มากเนื่องจากขาดการสนับสนุน readline (ข้อผิดพลาด341868 ) วิธีที่ง่ายที่สุดในการติดตั้งเวอร์ชันที่เชื่อมโยงกับ libreadline (สำหรับการแก้ไขบรรทัดที่ใช้งานได้) คืออะไร

คำตอบ:


10

ใช้แพ็คเกจที่เสถียรของDotdeb Debian แม้ว่าเอกสารจะไม่ได้บันทึกสิ่งนี้ แต่แพ็คเกจที่เสถียรใช้งานได้ดีกับ Wheezy / การทดสอบ หลังจากทำตามคำแนะนำแล้วให้ทำ:

apt-get install php5-cli

ในฐานะที่เป็นราก


1
nup ยังไม่php>พร้อมสำหรับฉัน :(
mulllhausen

6

หลังจากติดตั้ง php5-cli จากdotdebให้ติดตั้งแพ็คเกจ php5-readline

apt-get install php5-readline

มีให้เฉพาะใน Jessie (ทดสอบ) - packages.debian.org/…
William Turrell

@williamt ขอบคุณฉันเชื่อว่ามันอยู่ในที่เก็บ dotdeb
cmc

แพ็คเกจphp5-readlineนี้มีอยู่ในไฟล์เก็บถาวรหลักของ jessie และ sid และคุณไม่ต้องการphp5-cliจาก dotdeb
Ortomala Lokni

4

นอกเหนือจากคำตอบของ Gilles ที่แนะนำให้คอมไพล์แพ็คเกจ PHP ใหม่อีกครั้งคุณสามารถรอ PHP 5.4 ได้ ใน 5.4 ฉันปรับโครงสร้างการทำงานของ readline ที่ชิ้นส่วนที่ต้องการทั้งหมดอยู่ในโมดูล readline ดังนั้นคุณสามารถสร้างชิ้นส่วนนั้นได้อย่างอิสระ

$ 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

จากนั้นคุณจะจบลงด้วยmodules/readline.soซึ่งสามารถโหลดได้จาก php.ini ( make installจะย้ายไปที่extension_dir)

อีกทางหนึ่งผู้จัดจำหน่ายอาจจัดส่งโมดูล readline (อาจเชื่อมโยงกับ libedit ไม่ใช่ readline) และโหมดโต้ตอบจะพร้อมใช้งาน

ทั้งหมดนี้จะไม่ช่วยคุณในตอนนี้ (ในฐานะที่เป็น PHP 5.4. ยังไม่ได้ออก) แต่อาจช่วยให้ผู้อื่นค้นหาคำถามนี้ได้ในภายหลัง

รายละเอียดเพิ่มเติมบางอย่างในบล็อกของฉัน: http://schlueters.de/blog/archives/133-Now-in-trunk-Improved-interactive-shell.html

แก้ไข: จริงๆแล้วโพสต์บล็อกเก่ากว่าการเปลี่ยนแปลงนี้ แต่อาจยังน่าสนใจ ข้อมูลเล็ก ๆ น้อย ๆ อยู่ในรายงานข้อผิดพลาด# 53878แต่ไม่มาก ... หลังจากปล่อยhttp://php.net/commandline.interactiveควรมีมากกว่านี้


ขอบคุณที่ช่วย อย่างไรก็ตามพบ 2 ปัญหาบน Ubuntu อย่างไรก็ตาม ไลบรารี libedit ขาดหายไป (แก้ไขโดยการติดตั้ง libedit-dev) และข้อผิดพลาดในการรวบรวมนี้เกิดขึ้น: bugs.php.net/bug.php?id=62612โซลูชันก็มีเช่นกัน
Dziamid

ขำ ๆ ว่าฉันขัดแย้งกับตัวเองยังไง! ที่นี่ฉันแนะนำ phpize ฯลฯ ในข้อผิดพลาดที่ฉันบอกว่ามันไม่ใช่ "เต็มที่" ได้รับการสนับสนุนให้ทำเช่นนั้น ;-)
johannes

3

ติดตั้งและเรียกใช้rlwrap rlwrap php5Rlwrap เป็น wrapper readline ทั่วไปมันให้รุ่นบรรทัดคำสั่งและประวัติสำหรับวนลูป read-eval-print ใด ๆ เนื่องจากมันเป็นเสื้อคลุมทั่วไปคุณจะไม่ได้รับความสมบูรณ์ของ PHP

หรือรับแพ็คเกจต้นทางและสร้างใหม่ด้วยการสนับสนุน readline การสนับสนุน Readline นั้นถูกทิ้งไว้เนื่องจากปัญหาด้านลิขสิทธิ์แต่ปัญหาเหล่านี้ห้ามการเผยแพร่ PHP5 ที่เชื่อมโยงกับ readline เท่านั้นพวกเขาไม่ได้ห้ามไม่ให้คุณใช้งาน

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ดูเหมือนจะไม่ช่วยอะไรมาก เมื่อฉันรันrlwrap php5ให้กด Enter echo 1;แล้วกดปุ่ม Return จากนั้นกด Ctrl-D (จุดสิ้นสุดของอินพุต) จะแสดงเอาต์พุตecho 1;แทนผลลัพธ์ (1) ขอบคุณที่สังเกตว่านี่เป็นปัญหาด้านลิขสิทธิ์
Matthew Flaschen

3
@ Matewew: ฉันไม่รู้อะไรเกี่ยวกับ PHP แต่ลองทำสิ่งนี้กับ lenny ฉันไม่เห็นความแตกต่างระหว่างrlwrap php5และเพียงแค่php5นอกเหนือจากรุ่นบรรทัดคำสั่งเดิมที่อนุญาต หากคุณป้อน<?php echo 1;?>ผลลัพธ์คือ1แต่จะไม่ถูกปล่อยออกมาทันทีในทั้งสองกรณี Googling แนะนำว่าphp5ไม่ใช่ PHP REPL และคุณควรใช้บางอย่างเช่นphpshแทน
Gilles 'หยุดความชั่วร้าย'

1
คุณไม่ได้ป้อน<?php หรือ?>ในเชลล์เชิงโต้ตอบ ฉันยอมรับว่า php ไม่มี REPL แบบเต็ม แต่การใช้เวอร์ชันที่คอมไพล์ด้วยการรองรับ readline ที่ใช้งานได้ (เช่นแพ็คเกจ dotdeb ที่ฉันเชื่อมโยง) มันจะเอาต์พุต 1 (หรืออะไรก็ตามที่เป็นเอาต์พุตจริง) ทันทีหลังจากที่คุณกด Enter ฉันเห็นด้วยไม่มีความแตกต่างอย่างมีนัยสำคัญระหว่าง rlwrap และไม่มี readline เลย (นอกเหนือจากการแก้ไขบรรทัดและประวัติซึ่งดี แต่ไม่ค่อยมีประโยชน์เท่าการแสดงผลทันที)
Matthew Flaschen

@ Matthew: อ่างั้นการสนับสนุน readline ทำมากกว่าแค่การเชื่อมโยงกับ readline มันเปลี่ยนพฤติกรรมของโปรแกรมด้วยเหรอ? ดูเหมือนว่าแปลก จากนั้นคุณสามารถสร้างใหม่จากแหล่งที่มาหรือใช้แพ็คเกจ dotdeb หากมันเหมาะกับคุณ
Gilles 'หยุดความชั่วร้าย'

ใช่หลายสิ่งใน PHP ดูแปลก ๆ ;) แต่ดูเหมือนว่าเส้นทางโค้ด readline จะแตกต่างกันในพื้นที่นี้เท่านั้นที่เกี่ยวข้องกับ readline
Matthew Flaschen

3

ลองสิ่งนี้:

$ php -a
Interactive mode enabled

<?php echo "hi!"; ?>

กด Ctrl-d


5
ดูเหมือนว่าจะไม่เกี่ยวข้องกับการติดตั้ง PHP
Michael Mrozek

1
สิ่งนี้มีประโยชน์จริง ๆ แม้ว่ามันจะไม่ตอบคำถามโดยตรง มันแสดงให้เห็นว่าในเส้นทางที่ไม่ใช่สายการบิน PHP จะเรียกใช้งานโค้ด PHP ภายใน<?php ?>บล็อคเท่านั้น ฉันไม่ได้ตระหนักถึงสิ่งนั้นและมันแสดงให้เห็นว่าฉันเข้าใจผิด Gilles ก่อนหน้านี้
Matthew Flaschen

3

สำหรับผู้ใช้ Ubuntu, php5-readline เป็นแพ็คเกจเพิ่มเติมที่คุณต้องติดตั้งเพื่อให้พร้อมรับคำสั่ง php ที่ใช้งานได้:

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

ฉันต้องทำสิ่งนี้บน Ubuntu 14.04 ของฉัน



1

ในเดเบียนเจสซีและในการใช้งานเดเบียน:

sudo apt-get install php5 php5-readline

แล้วก็

php -a
Interactive mode enabled

php > echo 1+2;
3
php >
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.