Невозможно использовать интерпретатор командной строки - программирование
Подтвердить что ты не робот

Невозможно использовать интерпретатор командной строки

Я попытался выполнить простой PHP-код в PHP-интерпретаторе. Когда я выполнил команду php -a, я получаю сообщение

Интерактивный режим включен

Без места для ввода php. Но я могу выполнить php-код с помощью команды php -r. например:

php -r "echo 'Hello stackoverflow!';"

Привет, stackoverflow!

4b9b3361

Ответ 1

Установите это:

php5-readline

затем попробуйте использовать:

php -a

Ответ 2

введите php -m и убедитесь, что у вас есть модуль readline. Если вы этого не сделаете, вы не сможете его использовать.

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

Начиная с PHP 5.1.0, CLI SAPI предоставляет интерактивную оболочку, используя -a, если PHP скомпилирован с опцией - с-readline.

Ответ 3

Кажется, что существует ошибка компиляции/связи между вашим PHP и libreadline. Это описано в PHP Bug # 48759.

  • Вы сами скомпилировали PHP? Вы играли с --configure и не делали правильный make clean до окончательной сборки?
  • Предоставляет ли php -m список readline как включенную функцию? (Встроен ли PHP с опцией --with-readline)
  • Какая у вас версия php?
  • Какое распространение вы используете?
  • У вас установлена ​​libreadline (пакет * -dev)?

Ответ 4

Вы находитесь в интерактивном режиме, но без подсказки, так как у вас может не быть доступного режима чтения. Вам просто нужно начать вводить текст, и ваши команды будут оцениваться после нажатия клавиши ввода. Не похоже, что что-то происходит, но если вы входите, например:

<?php

echo "hello world";

?>

... вы получите результат...

Если вы введете блокированные блоки, они будут оценены после нажатия кнопки ввода после закрытия }

<?php 
for ($i = 0; $i < 5; $i++) {
  echo $i;
}
// prints 12345 after closing }

Обратите внимание, что вы должны начинать с <?php или что-либо введенное не будет оцениваться.

Обновление (годы спустя):

В системе Red Hat (RHEL5), на которой запущена защита поставщика, исправлена ​​PHP 5.3.3, я столкнулся с интерактивным режимом, который не возвращался назад после закрытия скобок.

Вместо этого выходной буфер не был сброшен, пока я не нажал Ctrl d. Эффективно это делает интерактивный сеанс одноразовым. Вставьте весь ввод кода и Ctrl d, чтобы сразу вернуть весь вывод.

Ответ 5

После того как я устал компилировать его на каждой машине, я использовал PHPSH (как упоминалось joey-adams)

Это намного лучше, чем php -a (подсветка синтаксиса и автозаполнение)

Установить python phpsh

посмотрите install-php5-with-readline-support-on-debian-wheezy

$ sudo apt-get install python # this is necessary to run phpsh
$ cd ~/

$ wget https://github.com/facebook/phpsh/zipball/master
$ unzip phpsh-master.zip

$ cd phpsh-master
$ sudo cp -r src /etc/phpsh # phpsh seems to complain unless it resides at /etc/phpsh
$ sudo ln -s /etc/phpsh/phpsh /usr/bin/phpsh # put phpsh on the $PATH

Ответ 6

Чтобы проверить, установлен ли модуль чтения, введите: php -m | grep readline

Если ничего не отображается, установите модуль readline: sudo apt-get install php5-readline

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

Ответ 7

Если вы используете Mac, тогда установите Homebrew (http://brew.sh), затем введите: brew установить phpsh

И затем вы можете запустить phpsh, чтобы получить интерактивную оболочку.

Ответ 8

Поскольку модуль readline не установлен. http://php.net/manual/en/features.commandline.interactive.php

Вот как я устанавливаю модуль, перекомпилируя исходные коды php:

Найти предыдущую команду Configure:

$ php -i | grep configure
Configure Command =>  './configure'  '--prefix=/usr/local/php7' ...

Затем перекомпилируйте:

./configure --prefix=/usr/local/php7 \
--with-readline \

...

$ make clean 
$ make
$ make test 
$ sudo make install

Проверьте, установлен ли модуль readline:

$ php m | grep readline
readline

Затем запустите php Interactive shell:

$ php -a
Interactive shell

php >

Ответ 9

Это то, что вы должны увидеть:

# php -a
Interactive shell

php > echo 1+1;
2
php > echo PHP_VERSION;
5.3.2-1ubuntu4.14
php > exit
#