Як встановити PHP CLI з корисною інтерактивною запиткою на Debian Wheezy?


10

Коли я встановлюю php5-cli на Debian Wheezy (зараз тестується), інтерактивний запит дуже непридатний через відсутність підтримки для читання ліній (помилка 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

Це доступно лише в Джессі (тестування) - пакети.debian.org/…
Вільям Террелл

@williamt Дякую, я вважаю, що він знаходиться у сховищах dotdeb.
cmc

Пакет php5-readlineдоступний у головному архіві Джессі та Сіда. І вам не потрібно php5-cliвід dotdeb.
Ортомала Локні

4

Як додаток до відповіді Жилла, який пропонує перекомпілювати повний пакет PHP, ви також можете дочекатися PHP 5.4. У 5.4 я реструктуризував функціональну лінію читання, що всі необхідні деталі є в модулі читання, тому ви можете побудувати цю окрему окрему.

$ 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)

Альтернативно, дистриб'ютор може доставити модуль читання (можливо, пов'язаний з libedit, а не readline), і інтерактивний режим буде доступний.

Це все не допоможе вам зараз (оскільки PHP 5.4. Ще не вийшов), але може допомогти іншим знайти це питання пізніше.

Ще кілька деталей у моєму блозі: http://schlueters.de/blog/archives/133-Now-in-trunk-Improved-interactive-shell.html

Редагувати: насправді публікація в блозі є старшою, ніж ця зміна, але все ж може бути цікавою. Невелика інформація міститься у звіті про помилку № 53878, але не так і багато ... після виходу http://php.net/commandline.interactive повинно бути більше.


Дякую, що допомогло. Однак у Ubuntu зіткнулися з 2 проблемою. Не вистачало бібліотеки libedit (виправлено встановленням libedit-dev), і ця помилка компіляції виникла : bugs.php.net/bug.php?id=62612 Також є рішення.
Дзямід

Смішно, як я суперечу собі! тут я пропоную phpize і т. д. в помилці я кажу, що це не "повністю" підтримується для цього ;-)
johannes

3

Встановити rlwrapта запустити rlwrap php5. Rlwrap - це загальна обгортка для читання ліній, вона забезпечує видання командного рядка та історію для будь-якого циклу читання-друку. Оскільки це універсальна обгортка, ви не отримаєте жодного завершення, що стосується PHP.

Крім того, отримайте вихідний пакет і відновіть його за допомогою підтримки readline. Підтримка Readline була виключена лише через проблеми з ліцензуванням , але ці випуски забороняють поширювати PHP5, пов’язаний із лінією читання, вони не забороняють вам її використовувати.

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, введіть echo 1;, а потім натисніть клавішу return, потім Ctrl-D (кінець введення), вона виведе введення echo 1;замість результату (1). Дякуємо, що зазначили, що це питання ліцензування.
Метью Флашен

3
@Matthew: Я нічого не знаю про PHP, але спробувавши це на lenny, я не бачу різниці між rlwrap php5і просто php5, окрім колишнього дозволу видання командного рядка. Якщо ви введете <?php echo 1;?>, вихід є 1, але він не видається відразу в будь-якому випадку. Гуглінг пропонує, що це php5просто не PHP-відповідь, і вам слід використовувати щось на зразок phpsh .
Жил "ТАК - перестань бути злим"

1
ви не вводите <?php або ?>в інтерактивну оболонку. Я погоджуюся, що php не має повної відповіді. Але використовуючи версію, скомпільовану з робочою підтримкою readline (наприклад, пакет пакетів dotdeb, з яким я пов’язаний), він виведе 1 (або будь-який реальний вихід) відразу після натискання клавіші enter. Я погоджуюся, що між rlwrap і відсутністю ліній читання взагалі немає суттєвої різниці (окрім редагування рядків та історії, які приємні, але не такі корисні, як негайний вихід).
Метью Флашен

@Matthew: А, так що підтримка readline робить більше, ніж просто зв'язок з readline, вона також змінює поведінку програми? Це здається дивним. Потім ви можете відновити з джерела або використовувати пакети dotdeb, якщо вони працюють для вас.
Жил "ТАК - перестань бути злим"

так, багато речей у PHP здаються дивними. ;) Але це виглядає так, що шлях коду для читання рядків відрізняється в цій області лише тангенціально пов'язаним з лінією читання.
Метью Флашен

3

Спробуйте це:

$ php -a
Interactive mode enabled

<?php echo "hi!"; ?>

Преса Ctrl-d


5
Здається, це не має нічого спільного з встановленням PHP
Michael Mrozek

1
Це насправді дуже корисно, хоча це не відповідає безпосередньо на питання. Це показує , що в , НЕ -readline шляху, PHP виконує тільки PHP код всередині <?php ?>блоків. Я цього не знав, і це показує, що я неправильно зрозумів Жилла раніше.
Метью Флашен

3

Для користувачів Ubuntu php5-readline - це додатковий пакет, який потрібно встановити, щоб мати командний рядок, що використовується,:

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

Мені довелося це зробити на своєму Ubuntu 14.04.



1

У debian Джессі та в застосуванні debian sid:

sudo apt-get install php5 php5-readline

тоді

php -a
Interactive mode enabled

php > echo 1+2;
3
php >
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.