Как установить PHP CLI с помощью интерактивного приглашения в Debian Wheezy?

10

Когда я устанавливаю php5-cli в Debian Wheezy (в данный момент тестирую), интерактивная подсказка становится очень непригодной из-за отсутствия поддержки readline (ошибка 341868 ). Какой самый простой способ установить версию, связанную с libreadline (для удобного редактирования строк)?

Мэтью Флэшен
источник

Ответы:

10

Используйте стабильные пакеты Dotdeb Debian. Хотя в документации это не отмечено, стабильные пакеты в настоящее время работают нормально с Wheezy / testing. Следуя инструкциям, выполните:

apt-get install php5-cli

как корень.

Мэтью Флэшен
источник
1
nup до сих пор нет php>для меня :(
mulllhausen
6

После установки php5- cli из dotdeb установите пакет php5-readline.

apt-get install php5-readline
КМЦ
источник
Это доступно только в Джесси (тестирование) - packages.debian.org/…
Уильям Туррелл,
@williamt Спасибо, я думаю, что это в репозиториях dotdeb.
CMC
Пакет php5-readlineдоступен в основном архиве Джесси и Сида. И вам не нужен php5-cliот dotdeb.
Ортомала Локни
4

В дополнение к ответу Жиля, который предлагает перекомпилировать полный пакет 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 должно быть больше.

Johannes
источник
Спасибо, что помогло. Обнаружил 2 проблемы на Ubuntu, однако. Отсутствовала библиотека libedit (исправлена ​​путем установки libedit-dev), и возникла эта ошибка компиляции: bugs.php.net/bug.php?id=62612 Решение также существует.
Дзиамид
Забавно, как я противоречу себе! здесь я предлагаю phpize и т. д. в сообщении об ошибке я говорю, что это не «полностью» поддерживается для этого ;-)
johannes
3

Установить rlwrapи запустить rlwrap php5. Rlwrap - это стандартная оболочка 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, введите echo 1;, затем нажмите Return, затем Ctrl-D (конец ввода), он выводит ввод echo 1;вместо результата (1). Спасибо, что отметили, что это проблема лицензирования.
Мэтью Флэшен
3
@ Мэтью: я ничего не знаю о PHP, но, пробуя это на Ленни, я не вижу никакой разницы между rlwrap php5и просто php5, кроме прежнего разрешения для командной строки. Если вы вводите <?php echo 1;?>, вывод есть 1, но он не генерируется сразу в любом случае. Googling предполагает, что это php5просто не PHP REPL, и вы должны использовать что-то вроде phpsh .
Жиль "ТАК - перестать быть злым"
1
Вы не вводите <?php или ?>в интерактивную оболочку. Я согласен, что php не имеет полного REPL. Но, используя версию, скомпилированную с работающей поддержкой readline (например, с пакетом dotdeb, с которым я связан), он будет выводить 1 (или какой-то реальный вывод) сразу после нажатия клавиши enter Я согласен, что нет существенной разницы между rlwrap и readline вообще (кроме редактирования строк и истории, которые хороши, но не так полезны, как немедленный вывод).
Мэтью Флэшен
@ Мэтью: Ах, так что поддержка readline делает больше, чем просто связь с readline, она также меняет поведение программы? Это кажется странным. Затем вы можете пересобрать из исходного кода или использовать пакеты dotdeb, если они работают на вас.
Жиль "ТАК - перестать быть злым"
да, многие вещи в PHP кажутся странными. ;) Но похоже, что путь кода readline отличается в этой области только тангенциально по отношению к readline.
Мэтью Флэшен
3

Попробуй это:

$ php -a
Interactive mode enabled

<?php echo "hi!"; ?>

Печать Ctrl-d

RoboTamer
источник
5
Похоже, это не имеет ничего общего с установкой PHP
Майкл Мрозек
1
Это на самом деле очень полезно, хотя и не дает прямого ответа на вопрос. Это показывает, что в не- рамочном пути PHP выполняет код PHP только внутри <?php ?>блоков. Я не знал об этом, и это показывает, что я неправильно понял Жиля раньше.
Мэтью Флашен
3

Для пользователей Ubuntu php5-readline - это дополнительный пакет, который необходимо установить, чтобы иметь доступную командную строку php:

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

Я должен был сделать это на моем Ubuntu 14.04.

Воутер Тилен
источник
1

В Debian Jessie и в Debian sid используйте:

sudo apt-get install php5 php5-readline

затем

php -a
Interactive mode enabled

php > echo 1+2;
3
php >
Ортомала Локни
источник