Как стать автором
Обновить

Интерактивная консоль PHP

Время на прочтение2 мин
Количество просмотров7.1K
Идея этого лежит на поверхности, но почти все, кому я показывал эту штуку, удивлялись и просили дать им ссылку. Хотя идея простая, а про stdin и readline знают почти наверное все.

Так вот, интерактивная консоль — это просто и очень полезно. С историей и автодополнением.

такие дела

Есть, однако, три вопроса и две проблемы.

1) windows. В windows никакого readline нет, нет, соответственно, и автокомплита. Только stdin. Для него враппер написан, но esc-последовательности смены цвета, к сожалению, не работают (но нужно это просто пофиксить).

2) readline+libedit/libreadline. Их нужно (желательно, вернее) установить. Последняя библиотека и может у вас уже стоять (если нет — то у меня она установилась по команде «emerge libedit»), то php-расширение readline нужно собрать. Делается это примерно так: cd php-5.x.x/ext/readline && phpize && ./configure && make && make install

3) libedit мне лично пришлось настраивать. Файл ~/.editrc выглядит у меня как-то так:

bind "^R" em-inc-search-prev
bind "^[O5C" vi-next-word
bind "^[O5D" vi-prev-word
bind "^[[1~" ed-move-to-beg
bind "^[[4~" ed-move-to-end
bind "^[[3~" ed-delete-next-char


Теперь о проблемах. Первая заключается в том, что код, находящийся внутри eval'а, можно контролировать на parse error, но на fatal error — нельзя. Соответственно, при фатальных ошибках валится вся консоль. Справедливости ради скажу, что у меня fatal error выпадала всего пару раз, большинство ошибок — или notice, или parse error.

Вторая проблема — это кривое расширение readline, которое не принимает ответ «нет вариантов» от функции автокомплита. Я не смог это побороть, и теперь, если нажать Tab сразу же или после пробела, без ввода символа, то будет выводиться список файлов, а это иногда мешает.
Но в целом такая консоль довольно полезна.

Исходники лежат на гуглокоде, прошу.

PS (для тех кому скучно): что выведет строка for ($i='a';$i<='z';$i++) echo $i.' ';?
Теги:
Хабы:
Всего голосов 101: ↑78 и ↓23+55
Комментарии88

Публикации

Истории

Работа

PHP программист
113 вакансий

Ближайшие события

Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
OTUS CONF: GameDev
Дата30 мая
Время19:00 – 20:30
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область