Поддержка интерактивной консоли PHP под Debian Linux

в 15:15, , рубрики: Debian, linux, php, readline, метки: , , ,

Наверное, многие сталкивались с вопросом неработающей интерактивной консоли PHP.

Когда вводишь

# php -a

и видишь только надпись «Interactive mode enabled», после которой что ни вводи, интерпретация и исполнение введённых команд не работает. На самом деле это не совсем так. На самом деле это специальный режим, которым надо ещё уметь пользоваться. Описание работы данного режима не входит в задачи моего поста. Для обычного же непосвящённого пользователя он выглядит именно так: ничего не работает. А вот тем, чтобы «работало» так, как мы привыкли в консолях python или node.js, мы и займёмся.


После некоторого гугления большинство ссылок выдают совет перекомпилировать PHP с поддержкой библиотеки readline. Именно она, дескать, отвечает за работу PHP в интерактивном режиме. Да, именно так: в вашей сборке PHP не работает readline. Боле того, в Debian Linux вы никак не сможете установить эту поддержку «из коробки» из-за проблем лицензионного характера дистрибьютора. Пакета php5-readline в нём просто нет. Тем не менее, есть более простой и «легальный» способ заставить PHP-шную консоль работать, нежели пересборка всего PHP и его «ручная» установка, после которой ваш PHP выпадает из стандартного механизма обновлений операционной системы, а в случае последующей случайной установки PHP из пакета чреват конфликтами.

Сразу оговорюсь, что всё сказанное относится к текущей стабильной версии Debian Wheezy. В следующей, нестабильной версии Debian, эту поддержку вроде как вернули. К сожалению, сам я это не проверял, но видел пакет php5-readline в соответствующем репозитории и видел заключения fixed в соответствующих топиках баг-репортов. То есть, насколько я понял, в Debian Jessie и PHP 5.5 эта поддержка будет «из коробки».

Вернёмся к Wheezy и PHP 5.4…
Написанное с некоторыми небольшими модификациями вполне применимо и к другим дистрибутивам Linux, принцип тот же.

Делаем всё из под рута либо предваряем командой sudo.

1. Прежде всего нам понадобятся пакеты dev для PHP и readline

# aptitude install php5-dev libedit-dev libreadline-dev

Пакеты php, libedit, libreadline если не были установлены до этого, установятся автоматически.

2. Далее нам понадобятся исходники PHP. Берём их из репозитория ОС

# apt-get source php5-cli

3. Пересобирать весь PHP мы не будем. нам нужен всего лишь один модуль. Его и соберём

# cd php5-5.4.4/ext/readline/
# phpize
# ./configure
# make

4. Здесь нас ожидает подводный камень: при компиляции компилятор не найдёт sapi.h

# ln -s ../../sapi/
# make

5. Сборка успешно завершилась. Берём новоиспечённый модуль readline.so, кладём его к модулям действующего PHP и правим конфиги

Модуль:

# locate mcrypt.so | grep php
# cp modules/readline.so /usr/lib/php5/20100525+lfs/
# chmod -x /usr/lib/php5/20100525+lfs/readline.so

Здесь команда locate используется для определения пути, где лежат PHP-шные либы на примере mcrypt, который устанавливается автоматом при установке PHP. Если у вас нет команды locate, определите ваш путь по аналогии с моим

Конфиг:

# echo 'extension=readline.so' >/etc/php5/mods-available/readline.ini
# cd /etc/php5/cli/conf.d
# ln -s ../mods-available/readline.ini 20-readline.ini

Всё. Консоль работает.

# php -a
Interactive mode enabled

php >

Автор: TheRoSS

Источник

Поделиться

* - обязательные к заполнению поля