Pull to refresh

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

Reading time2 min
Views9.2K
Наверное, многие сталкивались с вопросом неработающей интерактивной консоли 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 >
Tags:
Hubs:
+9
Comments3

Articles