交互式PHP shell是如何工作的?

交互式PHP shell是如何工作的?,php,console,Php,Console,我在交互式shell for PHP中,在终端中使用命令PHP-a,但没有命令工作。我甚至尝试了一个简单的2*2,但没有结果 我做错了什么?它是如何工作的?关于,Ryan p.的第一个注释有一些值得注意的信息: 交互式Shell和交互式模式不是一回事,尽管名称和功能相似 如果您键入php-a并得到“Interactive Shell”的响应,然后是php>提示,则可以使用Interactive Shell(php是使用readline支持编译的)。如果您得到的响应是“Interactive mo

我在交互式shell for PHP中,在终端中使用命令
PHP-a
,但没有命令工作。我甚至尝试了一个简单的
2*2
,但没有结果

我做错了什么?它是如何工作的?

关于,Ryan p.的第一个注释有一些值得注意的信息:

交互式Shell和交互式模式不是一回事,尽管名称和功能相似

如果您键入
php-a
并得到“Interactive Shell”的响应,然后是
php>
提示,则可以使用Interactive Shell(php是使用readline支持编译的)。如果您得到的响应是“Interactive mode enabled”,则您没有可用的Interactive shell,本文不适用于您

所以,如果您只启用了“交互式模式”,那么您将只能键入PHP代码,然后在完成后,向PHP发送一个EOF来执行它

这可能不是你想要的。您可能想改为查看。

您使用的是print()还是echo()?您的2*2示例将执行,但在您告诉PHP对输出(如print())执行某些操作之前,您不会看到任何证据


您是否有PHP5.1.0使用readline编译

从PHP5.1.0开始,CLI SAPI使用 -如果PHP是使用--with readline选项编译的,则为一个选项

PHP手册页面中的示例如下:

$php-a

交互式shell

php>echo5+8

十三,

更多信息:

如何使用PHP交互式shell 你说的
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
每个人都喜欢if语句:

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
)
将值推送到堆栈上并将其弹出

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
爱我一点:

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

确保每个命令都以分号结尾。

请尝试使用
echo 2*2
。有没有什么特别不起作用的东西?@Garry Cairns echo也没有返回任何东西我不明白你的操作系统和php版本是什么?因为PHP5.6你可以作为很棒的php交互shell使用,调试器集成在php内核中!如何发送“EOF”?@KolobCanyon:在大多数类似UNIX的系统上,按control-D。在Windows上,按control-Z。是的,但如何(优雅地)退出phpsh?这应该是公认的答案(而不是被否决)。Matt Grannary确实是正确的-“
2+2
”本身不能做到这一点-它应该是“
2+2
;”,然后输出将是
4
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