Chinaunix

标题: [学习] 转: php交互控制台 [打印本页]

作者: yarco2    时间: 2006-06-09 18:20
标题: [学习] 转: php交互控制台
转自:http://blog.thinkphp.de/archives/44-More-PHP-power-on-the-command-line.html#comments

假如你在命令行下使用过php, 那么你可能知道用-r选项来执行代码. 这个特征非常棒, 但是很难正确处理"引用". 你需要知道是"单引"或"双引",还有你所使用的shell, 甚至你需要时刻保持对变量的警惕避免出错. 直接在STDIN中写入代码让php执行是件烦人的事情, 假设你想修改前面已写的代码的话. 在这种情况下,你只好把代码写入文件(即使那只有一行 + <?php)运行它. 为了解决这个问题, Marcus和我在php 5.1 cli sapi中加入了新的特征. 我很荣幸能够在这里介绍给大家: PHP交互控制台.

在你编译了PHP(GNU: --with-readline)或者(BSD: --with-libedit)后,你便能够通过使用PHP的-a选项进入这个控制台.

  1. $ php -a
  2. Interactive mode enabled

  3. php >
复制代码

你可以在这里输入些代码,然后得到反馈. 提示符会根据上下文而改变:

  1. php > $a = 1;
  2. php > $b = 2;
  3. php > echo $a + $b;
  4. 3
  5. php > function foo() {
  6. php {     echo "foo
  7. php " bar";
  8. php { }
  9. php > foo();
  10. foo
  11. bar
  12. php >
复制代码

但是这并非是我们全部拥有的. 更酷的特征是tab自动完成功能. 就象bash或者mysql控制台下你可以只输入前面几个字母,按下tab便获得可能的完成的单词列表. 目前,我们已经能够做到函数, 常量, 类名, 变量, 静态方法调用和类常量的自动完成. 目前我在进行对象方法和属性的自动完成工作.

目前自动完成尚有一些限制, 比如对于变量或对象, 它只能在先前行定义并执行后才会自动完成, 并不能在单行多次使用或在一个函数内很好地工作. 但是大多数情况下,它能避免我们打印很多字母.

请随意测试, 并给我们反馈意见.

--johannes

偶的php版本是5.0, 使用-a选项似乎和介绍有点不同.
则这里需要<?php开始.

  1. [yarco@China x]$ php -a
  2. Interactive mode enabled

  3. <?php
  4.         print PHP_OS;
  5. Linux
  6.         print_r($_POST);
  7. Array
  8. (
  9. )
  10. [yarco@China x]$ php -v
  11. PHP 5.0.4 (cli) (built: May  9 2005 11:21:11)
  12. Copyright (c) 1997-2004 The PHP Group
  13. Zend Engine v2.0.4-dev, Copyright (c) 1998-2004 Zend Technologies
  14. [yarco@China x]$
复制代码


偶翻译的不是很滥吧???

[ 本帖最后由 HonestQiao 于 2006-6-9 18:28 编辑 ]
作者: dolmans    时间: 2006-06-10 15:13
php -a出现Interactive mode enabled而没有出现php >, 不知道怎么回事?
作者: HonestQiao    时间: 2006-06-10 15:36
原帖由 dolmans 于 2006-6-10 15:13 发表
php -a出现Interactive mode enabled而没有出现php >, 不知道怎么回事?



注意版本
作者: dolmans    时间: 2006-06-10 20:11
我的是PHP 5.1.4 (cli) (built: May  4 2006 10:35:22) WinXP,不懂为什么,是XP不支持?
作者: james.liu    时间: 2006-06-10 21:33
你可以直接写了

我今天才知道php的交互模式
作者: dolmans    时间: 2006-06-11 09:26
原帖由 james.liu 于 2006-6-10 21:33 发表
你可以直接写了


直接写是可以,但是不知道如何启动代码的执行。
作者: dz902    时间: 2006-06-11 10:03
原帖由 dolmans 于 2006-6-11 11:26 发表


直接写是可以,但是不知道如何启动代码的执行。


用 <?php 开头。然后就可以了。
LZ 不是专门说了吗……
作者: HonestQiao    时间: 2006-06-11 11:27
Windows下面:

  1. F:\usr\local\php5>php -a
  2. Interactive mode enabled

  3. <?php
  4. $a=1;
  5. $b=2;
  6. echo $a+$b;
  7. 3
  8. function foo() {
  9.         echo "foo bar";
  10. }
  11. foo();
  12. foo bar
  13. ^C
  14. F:\usr\local\php5>php -v
  15. PHP 5.1.4 (cli) (built: May  4 2006 10:35:22)
  16. Copyright (c) 1997-2006 The PHP Group
  17. Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies

  18. F:\usr\local\php5>
复制代码


要点:
输入<?php之后,才开始PHP的解析了,很多Unix的特性没有。
作者: dolmans    时间: 2006-06-11 12:12
原帖由 HonestQiao 于 2006-6-11 11:27 发表
输入<?php之后,才开始PHP的解析了,很多Unix的特性没有。


got it. thx.
作者: james.liu    时间: 2006-06-11 13:31
这个交互一般有什么应用?
作者: HonestQiao    时间: 2006-06-11 14:08
原帖由 james.liu 于 2006-6-11 13:31 发表
这个交互一般有什么应用?


有时候可能有一些用处。

例如当作一个小小的计算器。

这是最简单的例子
作者: james.liu    时间: 2006-06-11 14:42
复杂点的呢
作者: HonestQiao    时间: 2006-06-11 14:58
原帖由 james.liu 于 2006-6-11 14:42 发表
复杂点的呢


这个要看你自己怎么发挥了。
作者: james.liu    时间: 2006-06-11 15:00
原帖由 HonestQiao 于 2006-6-11 14:58 发表


这个要看你自己怎么发挥了。



我想不出,,所以问问拉。
作者: HonestQiao    时间: 2006-06-11 15:11
例如摆酷P
作者: james.liu    时间: 2006-06-11 15:16
原帖由 HonestQiao 于 2006-6-11 15:11 发表
例如摆酷P


[斑竹提示:请勿继续挖坑]

[ 本帖最后由 HonestQiao 于 2006-6-11 15:20 编辑 ]
作者: yarco2    时间: 2006-06-12 10:15
原帖由 HonestQiao 于 2006-6-11 11:27 发表
Windows下面:

  1. F:\usr\local\php5>php -a
  2. Interactive mode enabled

  3. <?php
  4. $a=1;
  5. $b=2;
  6. echo $a+$b;
  7. 3
  8. function foo() {
  9.         echo "foo bar";
  10. }
  11. foo();
  12. foo bar
  13. ^C
  14. ...
复制代码


我估计自动补全特征尚在实验阶段或者需要"在你编译了PHP(GNU: --with-readline)或者(BSD: --with-libedit)后,你便能够通过使用PHP的-a选项进入这个控制台."

原帖由 james.liu 于 2006-6-11 13:31 发表
这个交互一般有什么应用?

用处,你用着用着就知道了.
比如: 偶逛cu, 某位兄弟发段代码问问题,偶不想新建一个文件,直接php -a便可看到效果.
另外偶也总是会打开python的交互口, 偶尔看看字符编码之类的:

  1. [yarco@China ~]$ python
  2. Python 2.4.1 (#1, May 16 2005, 15:19:29)
  3. [GCC 4.0.0 20050512 (Red Hat 4.0.0-5)] on linux2
  4. Type "help", "copyright", "credits" or "license" for more information.
  5. >>> a = '爱'
  6. >>> a
  7. '\xe7\x88\xb1'
  8. >>> a = u'爱'
  9. >>> a
  10. u'\u7231'
  11. >>>
  12. [yarco@China ~]$ php -a
  13. Interactive mode enabled

  14. <?php
  15. print mb_convert_encoding('爱', 'HTML-ENTITIES', 'UTF-8');

  16. printf("%x", 29233);
  17. 7231
复制代码

作者: HonestQiao    时间: 2006-06-12 10:23
原帖由 yarco2 于 2006-6-12 10:15 发表


我估计自动补全特征尚在实验阶段或者需要"在你编译了PHP(GNU: --with-readline)或者(BSD: --with-libedit)后,你便能够通过使用PHP的-a选项进入这个控制台."


用处,你用着用着就知道了.
比如 ...



-a        --interactive       

交互式运行 PHP。如果编译 PHP 时加入了 Readline 扩展(Windows 下不可用),那将会得到一个很好的外壳,包括一个自动完成的功能(例如可以在键入变量名的时候,按下 TAB 键,PHP 会自动完成该变量名)以及命令历史记录,可以用上下键来访问。历史记录存在 ~/.php_history 文件中。

    注: 通过 auto_prepend_file 和 auto_append_file 包含的文件在此模式下会被解析,但有些限制,例如函数必须在被调用之前定义。
作者: pqhdp    时间: 2012-03-19 18:24
我的php 5.3.3, readline模块是后来编译进去的,交互模式用不了,一筹莫展。。。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2