PHP 命令行完全解读

时间:2007-04-02 21:42:23   来源:  作者:  点击:次  出处:技术无忧
关键字:命令行 解读 Apache CLI


  更棒了!错误消息已与其他数据分离,并且在做出更改后可以轻松地重新查看页面。在这种情况下,很清楚它在行中某个位置需要 '('。while 语句看似适合用在这里,因此添加一组新括号,得到以下源代码。

#!/usr/bin/php -q
Don<'t>code<?php while (drunk()); ?<


  现在,再次运行代码将得到以下输出:

  清单 1. 再次运行结果

Content-type: text/html
X-Powered-By: PHP/4.3.11

<'t>codePHP Fatal error:  Call to undefined function:
    drunk() in /var/www/html/dont-code-drunk.php on line 2
 


  脚本仍有很多问题,但是您已经取得了一些进展。您已经相对轻松地提取到了所需的错误消息,使您可以快速修正程序中的问题并继续处理下一个问题。

  全然使用 PHP 的任何人都可以以这种方式充分利用 CLI PHP 进行调试。但是为什么不进一步伸展您自己并开始用 PHP 真正实现 shell 脚本?向前迈进,并且您将会看到将 PHP 用于简单或者不那么简单的 shell 脚本的一些可能性。


PHP I/O 通道
  为第一个 PHP 脚本制定一个简单的初始目标:创建一个能读入文件并打乱该文件中各行的脚本。如果要打乱 m3u 文件或类似内容,则使用此功能可能很便利。这样做意味着您必须能够从文件或标准输入读取数据并将数据写回终端。

  这将出现 PHP 中的第一大挑战。PHP 最初不是设计用于与用户直接的键盘输入或文本输出结合使用。了解这一设计是至关重要的,因为如果需要在命令行中执行任何操作,都必须能够与用户来回通信。在诸如 C 之类的传统编程语言中,您将使用 STDIN、STDOUT 和 STDERR 完成此操作。您可以将 PHP 中的相同通道分别用于输入、标准输出和输出到错误通道。

  STDOUT:echo、print、STDOUT 和 php://stdout

  即使 PHP 设计用于输出到浏览器而不是输出到 CLI,从 PHP 创建输出也是非常简单的,它几乎不需要花太多时间思考。记住,PHP 标记外的任何内容都将被直接输出到 CLI,这就是上面的 HelloWorld 程序如此简单的原因。这也是为什么先输出上面的 Don<'t>code 后再输出错误消息的原因。您是否用 HTML 标记圈起文字都没有关系;因为不管怎样都会显示这些文字。事实上,您通常需要避免使用 HTML 标记,因为它们都将直接打印给用户。

  您还可以使用基本函数进行输出。例如,echo 和 print 命令打印到标准输出。

#!/usr/bin/php -q
Output #1.
<?php echo "Output #2.";
print "Output #3."?>


  这将得到:

Output #1.
Output #2.Output #3.


  注:PHP 标记外的新行已被输出,但是 echo 命令或 print 命令中没有暗含的新行。事实上,命令提示符重新出现在 Output #2.Output #3. 所在的行中。PHP 拥有的任何其他打印函数将会像此函数一样运行正常,任何写回文件的函数也是一样的。

#!/usr/bin/php -q
<?php
        $STDOUT = fopen("php://stdout", "w");
        fwrite($STDOUT, "Output #1.");
        fclose($STDOUT);
?>


  以上代码将把 php://stdout 作为输出通道显式打开,并且 php://output 通常以与 php://stdout 相同的方法运行。最新版本的 PHP 可以使用 STDOUT 作为常量而不是定义上面使用的变量 $STDOUT。

  STDERR:STDERR 和 php://stderr

  STDERR 与 STDOUT 十分接近。用于写入此通道的所有技术将镜像 STDOUT 的那些技术,惟一的差别是您将打开 php://stderr 而不是 php://stdout 或 php://error。

  STDIN:STDIN 和 php://stdin技术无忧.net


文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面