Как работает интерактивная оболочка PHP?

Я нахожусь в интерактивной оболочке для PHP, используя команду php -a в терминале, но команды не работают. Я даже пробую простой 2 * 2, и я не получаю результатов.

что я делаю неправильно и как это работает?

5 ответов


On документация для интерактивной оболочки, первая записка Райана П. имеет некоторую заметную информацию:

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

Если ты типа php -a и получить ответ "интерактивной оболочки" с последующим php> prompt, у вас есть интерактивная оболочка (PHP был скомпилирован с поддержкой readline). Если вместо этого вы получите ответ "Интерактивный режим включен", у вас нет интерактивной оболочки, и эта статья не относится к вам.

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

Это, наверное, не то, что вы хотите. Вы можете посмотреть в phpsh.


как использовать интерактивную оболочку PHP

на php -a ты говоришь о куске дерьма.

phpsh был сделан facebook.

установите git, перейдите туда, где вы хотите построить phpsh:

sudo apt-get install git
cd /home/youruser;

потяните репозиторий, cd в него и установите:

git clone https://github.com/facebook/phpsh
cd phpsh
sudo python setup.py install

запустить его:

el@apollo:~$ phpsh
Starting php
type 'h' or 'help' to see instructions & features
php> 

назначить час в переменную и распечатать:

php> $t = date("H");
php> echo $t;
04

все любят если заявления:

php> if (false){echo "derp"; } else if(true){ echo "foobar"; } else{echo "moo"; }
foobar

получить длину строки:

php> echo strlen("012345678");
9

сортировка:

php> $numbers=array(4,6,2,22,11);
php> sort($numbers);
php> echo $numbers;
Array
php> print_r($numbers);
Array
(
    [0] => 2
    [1] => 4
    [2] => 6
    [3] => 11
    [4] => 22
)

сортировка по ключам:

php> $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
php> ksort($age);
php> print_r($age);
Array
(
    [Ben] => 37
    [Joe] => 43
    [Peter] => 35
)

Push значения в стек и выскочить их.

php> $a[]="one"
php> $a[]="two"
php> print_r($a);
Array
(
    [0] => one
    [1] => two
)
php> echo array_pop($a);
two
php> echo array_pop($a);
one
php> echo array_pop($a);
php>

Basename получает слово справа:

php> echo basename("http://foobar/helicase");
helicase
php> echo basename("/home/el/polymerase");
polymerase

коснитесь файла и получите последний раз, когда он был изменен:

php> touch("/home/el/myfile.txt");
php> echo filemtime("/home/el/myfile.txt");
1386494608

Люби меня немного json:

php> $myjson = '{"a":1}';
php> var_dump(json_decode($myjson));
object(stdClass)#2 (1) {
  ["a"]=>
  int(1)
}

несколько способов захватить что-то изнутри в JSON:

php> $json = '{"foobar": 123}';
php> $obj = json_decode($json);
php> print $obj->foobar;
123
php> print $obj->{'foobar'};
123

функция, валидатор JSON

php> function isJson($string) {
 ...  json_decode($string);
 ...  return (json_last_error() == JSON_ERROR_NONE);
 ... }

php> echo isJson("");
1
php> echo isJson("{}");
1
php> echo isJson("abc");

php> echo isJson("{'a': 1}");

php> echo isJson('{"a": 1}');
1

у вас есть PHP 5.1.0, скомпилированный с --with-readline?

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

пример со страницы руководства PHP:

$ php-a

интерактивная оболочка

php > echo 5+8;

13

Подробнее: http://www.php.net/manual/en/features.commandline.interactive.php


вы используете print () или echo ()? Ваш пример 2*2 будет выполнен, но вы не увидите никаких доказательств этого, пока не скажете PHP сделать что-то с выходом, например print().

php -a
php > 2 * 2;            #This doesn't return anything.
php > print (2 * 2);
4

убедитесь, что вы заканчиваете каждую команду точкой с запятой.