在PHP中使用命令行工具
p $results = `wc -w *.txt`; echo $results; ?> 清单4 给出了一种更加简单的方法。 清单4.更加简单的方法
通过UNIX命令行和 shell脚本能够完成很多东西,知道这点很重要。例如,您可以使用竖线将命令连接起来。您甚至可以使用操作符在其中创建 shell脚本,并且仅调用 shell脚本(根据需要使用或不使用参数)。 例如,如果您仅希望计算该目录下的前 5 个文本文件的单词数,那么可以使用竖线 (|) 将 wc和head命令连接起来。另外,您还可以将输出结果放到 pre 标记内部,让它能够更美观地呈现在Web 浏览器中,如下所示。 清单5.更加复杂的shell命令
图2 演示了运行清单5 的脚本得到的结果。 图2.从shell_exec()运行更复杂的shell命令得到的结果 在本文的后面部分,您将学习如何使用 PHP 为这些脚本传递参数。现在您可以将它看作运行shell命令的一种方法,但要记住您只能看到标准输出。如果命令或脚本出现错误,您将看不到标准的错误 (stderr),除非您通过竖线将它添加到 stdout。 passthru() passthru() 允许您运行外部程序,并在屏幕上显示结果。您不需要使用 echo 或return 来查看结果;它们会显示在浏览器上。您可以添加可选的参数,即保存从外部程序返回的代码的变量,比如表示成功的0,这为调试提供更好的机制。 在清单6 中,我使用 passthru()命令运行在前面小节运行的单词计数脚本。如您所见,我还添加一个包含返回代码的$returnval 变量。 清单6.使用 passthru()命令运行单词计数脚本
注意,我不需要使用 echo 返回任何东西。结果会直接显示在屏幕上,如下所示。 图3.使用 return 代码运行passthru()命令的结果 在清单7 中,我通过删除脚本头部的5 前面的短横线 (-) 引入一个小错误。 清单7.在单词计数脚本中引入一个错误
注意,脚本未能按照预期运行。您得到的是一个空白的屏幕,一条水平线和返回值 1,如图4 所示。这个返回代码通常表明发生了某些错误。如果能够测试返回代码,查找和修复错误就容易多了。 图4.使用 passthru() 时查看错误代码 exec() exec()命令与shell_exec() 相似,不同之处是它返回输出的最后一行,并且可选地用命令的完整输出和错误代码填充数组。清单8 展示了当运行exec() 而不捕捉数据数组中的数据时发生的事情。 清单8.运行exec() 而不捕捉数据数组中的数据
为了捕捉数组中的结果,要将该数组的名称作为第二个参数添加到 exec()。我在清单9 中执行了这个步骤,并以 $data 作为数组的名称。 清单9.从exec() 捕捉数据数组的结果
在捕捉数组中的结果之后,您可以对每行进行一些处理。例如,您可以在第一个空格处进行划分,将分离的值存储在数据库表中,或对每个行应用特定的格式或标记。 system( |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |