【问题标题】:How does the interactive PHP shell work?交互式 PHP shell 是如何工作的?
【发布时间】:2013-01-25 09:58:22
【问题描述】:

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

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

【问题讨论】:

  • 改用echo 2*2manual 有什么特别不工作的东西吗?
  • @Garry Cairns echo 没有返回任何内容,我也不明白
  • 你的操作系统和php版本是什么?

标签: php console


【解决方案1】:

the documentation for the interactive shell,Ryan P. 的第一条笔记有一些值得注意的信息:

Interactive Shell 和 Interactive Mode 不是一回事,尽管名称和功能相似。

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

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

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

【讨论】:

  • 从 php 5.6 开始,您可以使用 phpdbg 作为很棒的 php 交互式 shell,并在 php 核心中集成了调试器!
  • 如何发送“EOF”?
  • @KolobCanyon:在大多数类 UNIX 系统上,按 control-D。在 Windows 上,按 control-Z。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    从 PHP 5.1.0 开始,CLI SAPI 使用 -a 选项,如果 PHP 是使用 --with-readline 选项编译的。

    PHP 手册页中的示例:

    $ php -a

    交互式外壳

    php > 回声 5+8;

    13

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 是的,但是你如何(优雅地)退出 phpsh?
      【解决方案5】:

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

      【讨论】:

      • 这应该是被接受的答案(而不是被否决)。 Matt Grannary 确实是正确的——“2 + 2”单独是不行的——应该是“2 + 2;”然后输出将是4
      猜你喜欢
      • 2011-03-12
      • 2012-06-01
      • 2013-03-23
      • 2011-08-13
      • 2023-03-27
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      相关资源
      最近更新 更多