Làm cách nào để cài đặt PHP CLI với lời nhắc tương tác có thể sử dụng trên Debian Wheezy?


10

Khi tôi cài đặt php5-cli trên Debian Wheezy (hiện đang thử nghiệm), lời nhắc tương tác rất không sử dụng được do thiếu hỗ trợ đọc đường dẫn (lỗi 341868 ). Cách dễ nhất để cài đặt phiên bản được liên kết với libreadline (để chỉnh sửa dòng có thể sử dụng) là gì?

Câu trả lời:


10

Sử dụng các gói ổn định của Dotdeb Debian. Mặc dù tài liệu không lưu ý điều này, các gói ổn định hiện đang hoạt động tốt với Wheezy / thử nghiệm. Sau khi làm theo hướng dẫn, hãy làm:

apt-get install php5-cli

làm gốc.


1
nup vẫn không php>nhắc tôi :(
mulllhausen

6

Sau khi cài đặt php5-cli từ dotdeb , hãy cài đặt gói php5-readline.

apt-get install php5-readline

Đây là chỉ có sẵn trong Jessie (thử nghiệm) - packages.debian.org/...
William Turrell

@williamt Cảm ơn, tôi tin rằng nó nằm trong kho dotdeb.
cmc

Gói php5-readlinecó sẵn trong kho lưu trữ chính của jessie và sid. Và bạn không cần php5-clitừ dotdeb.
Ortomala Lokni

4

Ngoài ra, Gilles đã đề xuất biên dịch lại gói PHP hoàn chỉnh, bạn cũng có thể đợi PHP 5.4. Trong 5.4 tôi đã cấu trúc lại chức năng readline rằng tất cả các phần bắt buộc đều nằm trong mô đun readline, để bạn có thể xây dựng độc lập đó.

$ 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

Sau đó, bạn sẽ kết thúc với một modules/readline.socái có thể được tải từ php.ini ( make installsẽ chuyển nó sang extension_dir)

Ngoài ra, nhà phân phối có thể gửi mô-đun readline (có thể được liên kết với libedit, không phải readline) và chế độ tương tác sẽ có sẵn.

Tất cả điều này sẽ không giúp bạn bây giờ (như PHP 5.4. Chưa ra mắt) nhưng có thể giúp những người khác tìm thấy câu hỏi này sau.

Một số chi tiết khác trên blog của tôi: http://schlueter.de/blog/archives/133-Now-in-trunk-Improved-interactive-shell.html

Chỉnh sửa: Trên thực tế bài đăng trên blog cũ hơn thay đổi này, nhưng vẫn có thể thú vị. Một ít thông tin có trong báo cáo lỗi # 53878 nhưng cũng không nhiều ... sau khi phát hành http://php.net/commandline.interactive nên có thêm.


Cảm ơn, điều đó đã giúp. Gặp phải 2 vấn đề trên Ubuntu, tuy nhiên. Đã thiếu thư viện libedit (đã được sửa bằng cách cài đặt libedit-dev) và lỗi biên dịch này đã phát sinh: bug.php.net/orms.php?id=62612 Giải pháp cũng có.
Dziamid

Thật buồn cười khi tôi mâu thuẫn với chính mình! Ở đây tôi đề nghị phpize, v.v. trong lỗi tôi nói nó không được "hỗ trợ" đầy đủ để làm như vậy ;-)
johannes

3

Cài đặt rlwrapvà chạy rlwrap php5. Rlwrap là một trình bao bọc dòng đọc chung, nó cung cấp phiên bản dòng lệnh và lịch sử cho bất kỳ vòng lặp đọc-in. Vì nó là một trình bao bọc chung, nên bạn sẽ không nhận được bất kỳ sự hoàn thành cụ thể nào về PHP.

Ngoài ra, nhận gói nguồn và xây dựng lại với sự hỗ trợ của đường dẫn. Hỗ trợ đọc chỉ bị bỏ qua do vấn đề cấp phép , nhưng những vấn đề này chỉ cấm phân phối PHP5 được liên kết với đường đọc, họ không cấm bạn sử dụng nó.

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

rlwrapdường như không giúp được gì nhiều Khi tôi chạy rlwrap php5, nhập echo 1;, sau đó nhấn return rồi Ctrl-D (kết thúc đầu vào), nó xuất đầu vào echo 1;thay vì kết quả (1). Cảm ơn vì đã lưu ý rằng đó là vấn đề cấp phép.
Matthew Flaschen

3
@Matthew: Tôi không biết gì về PHP, nhưng thử điều này trên lenny, tôi thấy không có sự khác biệt giữa rlwrap php5và chỉ php5, ngoài phiên bản dòng lệnh cho phép trước đây. Nếu bạn nhập <?php echo 1;?>, đầu ra là 1, nhưng nó không được phát ra ngay lập tức trong cả hai trường hợp. Googling gợi ý rằng php5đơn giản không phải là REPL của PHP và thay vào đó bạn nên sử dụng một cái gì đó như phpsh .
Gilles 'SO- ngừng trở nên xấu xa'

1
bạn không nhập <?php hoặc ?>trong vỏ tương tác. Tôi đồng ý rằng php không có REPL đầy đủ. Nhưng bằng cách sử dụng một phiên bản được biên dịch với hỗ trợ đường đọc hoạt động (ví dụ gói dotdeb tôi đã liên kết), nó sẽ xuất 1 (hoặc bất kể đầu ra thực là gì) ngay sau khi bạn nhấn enter. Tôi đồng ý không có sự khác biệt đáng kể giữa rlwrap và không có đường đọc nào cả (ngoài chỉnh sửa dòng và lịch sử, rất hay nhưng không hữu ích như đầu ra ngay lập tức).
Matthew Flaschen

@Matthew: Ah, vậy hỗ trợ readline không chỉ liên kết với readline, nó còn thay đổi hành vi của chương trình? Điều đó có vẻ kỳ lạ. Sau đó, bạn có thể xây dựng lại từ nguồn hoặc sử dụng các gói dotdeb nếu chúng hoạt động cho bạn.
Gilles 'SO- ngừng trở nên xấu xa'

Vâng, rất nhiều thứ trong PHP có vẻ kỳ lạ. ;) Nhưng có vẻ như đường dẫn mã readline khác nhau trong lĩnh vực này chỉ liên quan đến tiếp tuyến với đường đọc.
Matthew Flaschen

3

Thử đi:

$ php -a
Interactive mode enabled

<?php echo "hi!"; ?>

Nhấn Ctrl-d


5
Điều này dường như không liên quan gì đến việc cài đặt PHP
Michael Mrozek

1
Điều này thực sự rất hữu ích, mặc dù nó không trả lời trực tiếp câu hỏi. Nó cho thấy rằng trong đường dẫn không đọc, PHP chỉ thực thi mã PHP bên trong <?php ?>các khối. Tôi đã không nhận thức được điều đó và nó cho thấy tôi đã hiểu lầm Gilles trước đó.
Matthew Flaschen

3

Đối với người dùng Ubuntu, php5-readline là gói bổ sung bạn cần cài đặt để có dấu nhắc lệnh php có thể sử dụng:

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

Tôi đã phải làm điều này trên Ubuntu 14.04 của tôi.



1

Trong debian jessie và trong debian sid sử dụng:

sudo apt-get install php5 php5-readline

sau đó

php -a
Interactive mode enabled

php > echo 1+2;
3
php >
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.