7

我在 PHP 的交互式 shell 中使用php -a终端中的命令,但没有任何命令有效。我什至尝试了一个简单2 * 2的 ,但我没有得到任何结果。

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

4

5 回答 5

16

交互式 shell 的文档中,Ryan P. 的第一条注释有一些值得注意的信息:

尽管名称和功能相似,但交互外壳和交互模式并不是一回事。

如果您键入php -a并收到“Interactive Shell”的响应,然后出现php>提示,则您可以使用交互式 shell(PHP 是在 readline 支持下编译的)。相反,如果您收到“已启用交互模式”的响应,则说明您没有可用的交互式 shell,并且本文不适用于您。

因此,如果您只获得“启用交互模式”,那么您将只能输入 PHP 代码,然后当您完成后,向 PHP 发送 EOF 以执行它。

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

于 2013-02-09T23:37:40.297 回答
15

如何使用 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> 

将 Hour 赋值给一个变量并打印:

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

爱我一些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
于 2013-12-08T09:44:27.463 回答
3

你有 PHP 5.1.0 编译--with-readline吗?

从 PHP 5.1.0 开始,如果 PHP 使用 --with-readline 选项编译,CLI SAPI 使用 -a 选项提供交互式 shell。

PHP手册页中的示例:

$ php -a

交互式外壳

php > 回声 5+8;

13

更多信息:http ://www.php.net/manual/en/features.commandline.interactive.php

于 2013-02-09T23:40:13.530 回答
1

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

php -a
php > 2 * 2;            #This doesn't return anything.
php > print (2 * 2);
4
于 2013-02-09T23:38:14.663 回答
1

确保以分号结束每个命令。

于 2014-03-07T23:51:29.183 回答