Как установить 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 должно быть больше.


Спасибо, что помогло. Обнаружил 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


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.



Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.