快速业务通道

在PHP中使用命令行工具

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22

如果您使用过PHP,您就会发现它是创建特性丰富的Web页面的出色工具。作为一大脚本语言,PHP:容易学习。

有许多强大的框架(比如 CakePHP和CodeIgniter),让您能够像 Rails 程序员一样高效。

能够与MySQL、PostgreSQL、Microsoft® SQL Server,甚至 Oracle 通信。

能够轻松地与JavaScript 框架集成,比如 script.aculo.us和jQuery。

但有时候,您想做更多的事情,或必须做更多的事情。我的意思是您必须直接与PHP运行的服务器的文件系统打交道。您最终需要处理文件系统上的文件,了解运行的进程或执行其他任务。

首先,您对在PHP 使用 file()命令打开文件很满意。但是在某种程度上,完成某些事情的唯一途径是在服务器上运行shell命令并获得特定的输出。例如,您可能想知道特定目录包含多少个文件。或者您想知道向某组日志文件写了多少行内容。或者您想操作这些文件,将它们复制到另一个目录,或使用 rsync 将它们发送到另一个位置。

在“PHP命令行?是的,您可以!” 这篇文章中,Roger McCoy 演示了如何从命令行直接使用 PHP —— 不需任何 Web 浏览器。在这篇文章中,我从另一个角度看待相同的主题,向您展示如何紧密地与底层 shell命令集成,以及将返回值包含到您的界面和进程中。

仅当您运行在Linux®、Berkeley Software Distribution (BSD) 或一些其他 UNIX® 版本上时,这些操作才有效。我假设您运行在Linux-Apache-MySQL-PHP (LAMP) 堆栈上。如果您运行其他版本的UNIX,具体细节可能不同,因为在每个版本中命令行的可用性都不同。我知道很多人还在Mac OS X(运行某个版本的BSD)从事开发,因此我尽量保持示例命令的通用性,确保移植方便。

命令行概述

PHP Command Line Interface (CLI) Server Application Programming Interface (SAPI) 在PHP V4.2.0开始发布,用于试验目的。到 V4.3.0 时,已经受到完整支持并且默认启用。PHP CLI SAPI 允许您开发 PHP 支持的shell脚本,甚至是基于桌面的脚本。事实上,可以用 PHP 创建可直接从命令行运行的工具。采用这种方式,PHP开发人员可以像 Perl、AWK、Ruby 或shell 程序员一样高效。

本文探究构建到 PHP 中的工具,让您了解 PHP运行的底层 shell 环境和文件系统。PHP 为执行外部命令提供大量函数,其中包括 shell_exec()、exec()、passthru()和system()。这些命令是相似的,但为您运行的外部程序提供不同的界面。所有这些命令都衍生一个子进程,用于运行您指定的命令或脚本,并且每个子进程会在命令输出写到标准输出 (stdout) 时捕捉它们。

shell_exec()

shell_exec()命令行实际上仅是反撇号 (`) 操作符的变体。如果您编写过shell 或Perl脚本,您就知道可以在反撇号操作符内部捕捉其他命令的输出。例如,清单1 显示了如何使用反撇号在当前目录中获取每个文本(.txt)的单词计数。

清单1.使用反撇号计算单词数量

#! /bin/sh
number_of_words=`wc -w *.txt`
echo $number_of_words
#result would be something like:
#165 readme.txt 388 results.txt 588 summary.txt
#and so on....

在您的PHP脚本中,您可以在shell_exec() 中运行这个简单的命令,如清单2 所示,并获取想要的结果。这里假设在同一个目录下有一些文本文件。

清单2.在shell_exec() 中运行相同的命令

<?php
$results = shell_exec(''wc -w *.txt'');
echo $results;
?>

在图1 中可以看到,获得的结果与从shell脚本得到的一样。这是因为shell_exec() 允许您通过shell运行外部程序,然后以字符串的形式返回结果。

图1.通过shell_exec()运行shell命令的结果

注意,仅使用后撇号操作符也会得到相同的结果,如下所示。

清单3.仅使用后撇号操作符

<?ph

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号