---
title: "Интерактивные shell’ы для PHP"
description: "Программисты python и ruby наверняка не раз пользовались такой замечательной штукой как интерактивна..."
author: "galymzhan"
published: "2010-07-14T21:47:13+00:00"
modified: "2010-07-14T21:47:13+00:00"
locale: "ru"
canonical_url: "https://yvision.kz/post/interaktivnye-shell-y-dlya-php-58571"
markdown_url: "https://yvision.kz/post/interaktivnye-shell-y-dlya-php-58571/markdown"
site_name: "Yvision.kz"
---

# Интерактивные shell’ы для PHP

> Программисты python и ruby наверняка не раз пользовались такой замечательной штукой как интерактивна...

Программисты python и ruby наверняка не раз пользовались такой замечательной штукой как интерактивная консоль. Такая консоль позволяет быстро потестить какой-то код, функцию или класс, да и просто удобно при изучении языка. К сожалению, по непонятной мне причине, авторы php не утрудили себя созданием аналогичной вещи.

Однако недавно, при написании топика про HipHop, я заметил, что фейсбуковцы уже создали такой инструмент – phpsh. Прежде чем его попробовать, я решил поискать в Интернете и другие решения, и вот что мне удалось найти.

### PHP Interactive mode

http://www.php.net/manual/en/features.commandline.interactive.php

Оказывается, в интерпретаторе php уже есть интерактивный режим, для этого надо запустить его с ключом -a.

``` $ php -aInteractive shellphp > echo 5+8;13php > function addTwo($n)php > {php { return $n + 2;php { }php > var_dump(addtwo(2));int(4)php > ```

Появился в версии 5.1.0. Из минусов: в Windows работает очень убого, вылетает при первом fatal error. В *nix-ах работает автодополнение благодаря GNU Readline. Автодополнение работает для функции, констант, названий классов, переменных, статических методов. Подойдет, если вы работаете в линуксе :)

### phpa

http://david.acz.org/phpa/ PHP-скрипт. Достаточно запустить его командой

``` $ php phpa.php ```

Не забудьте поставить права на выполнение. Поддерживает автодополнение функций и констант. Если код печатает что-то в вывод, то это и выводится, иначе выводится значение выражения.

``` >>> $x = pow(2, 10)>>> echo $x1024>>> $x * 44096 ```

Не работает в windows вообще, так как обязательно наличие библиотеки readline (http://www.php.net/readline). Также вылетает при fatal error.

### PHP Shell

http://jan.kneschke.de/projects/php-shell/

Возможности:
- автодополнение tab-ом (если есть readline())

- корректно обрабатывает fatal error

- внутреняя справка

- работает везде где работает php

Работает в php5. Автодополнение работает не только для функции, классов и т.д. но и для экземпляров классов, т.е. типа $object->method(); Также может показать DocComment-ы для классов, методов и функции, для этого надо набрать ? и имя класса.

![PHP Shell](http://storage.yvision.kz/images/user/galymzhan/xN0ae9UBZ0BHU8K4Hx239012zXZ79G.png)

Отлавливание ошибки:

![PHP Shell](http://storage.yvision.kz/images/user/galymzhan/209cD9FEeBwcEUqEuCzRsm8uxNTYsZ.png)

В целом неплохая штука, на мой взгляд более лучше чем два предыдущих.

### phpsh

http://www.phpsh.org/

Был сотворен в недрах facebook. Имеет автодополнение, историю команд даже между сессиями(!), просмотр документации. Более того, phpsh интегрируется с [ctags](http://ctags.sourceforge.net/) - это позволит использовать все его фичи для ваших собственных классов, функции и т.д, т.е. загрузить ваш собственный codebase.

В [анонсе](http://www.webmasterkb.com/Uwe/Forum.aspx/php-language/4865/Announcing-phpsh-an-interactive-shell-for-PHP) разработчики утверждают, что phpsh работает везде, где работает python2.4 с модулем subprocess и, опять же :), GNU readline, т.е. Linux и OSX, но не Windows. Требования для python: pysqlite, readline. Мне удалось запустить phpsh под cygwin, для этого пришлось изрядно постараться:
- Сначала ставим последнюю версию [cygwin](http://www.cygwin.com/).

- В установщике ставим пакеты python и gcc (нужен для сборки pysqlite).

- Запустив cygwin, для python ставим пакеты readline (ставится легко через easy_install) и pysqlite (придется собрать из исходников, что в свою очередь потребует скачать исходники sqlite)

- Устанавливаем php (cli) под windows, т.к. под cygwin мне так и не удалось поставить php (да это и не нужно в принципе).

- Качаем [phpsh](http://www.phpsh.org/phpsh-latest.tgz), распаковываем, меняем кое-что в питоновском файле phpsh, чтобы он использовал виндовый php (иначе виндовый php не найдет cygwin-ский файл /home/galymzhan/phpsh).

Запускается просто: заходим в нужную папку и набираем ./phpsh

Чтобы напечатать значение выражения, надо ставить перед ним знак =

![phpsh](http://storage.yvision.kz/images/user/galymzhan/xDd4iC0gJkW7a6NEJyLgR6M87RFkwH.png)

Работа с ctags:

![phpsh](http://storage.yvision.kz/images/user/galymzhan/52D1IJpZ7C1pFLQzMOPyAcEQDjXzfn.png)

Кстати, при fatal error phpsh просто перезапускается :)

### Итоги...

подводить трудно, так как я так и не смог посмотреть как инструменты работают в linux-е (ввиду отсутствия установленной ОС на работе). Тем более есть еще и другие альтернативы:

- [php interactive console](http://code.google.com/p/php-interactive-console/) - php-скрипт, обязательно наличие readline.

- [phpa-norl](http://www.fischerlaender.net/php/phpa-norl) - тоже что и phpa, только под windows. Автор утверждает, что вырезал все readline-ские функции

На мой взгляд, лучшим является phpsh - единственный, который нормально заработал под windows (хоть и с небольшим шаманством), и обладающий всеми нужными возможностями.

---

Source: [https://yvision.kz/post/interaktivnye-shell-y-dlya-php-58571](https://yvision.kz/post/interaktivnye-shell-y-dlya-php-58571)