在PHP中使用命令行工具

如果您使用过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命令的结果

时间: 2024-09-16 13:13:24

在PHP中使用命令行工具的相关文章

《Android/OPhone开发完全讲义》连载(4):Android SDK中常用命令行工具(二)

本文为原创,如需转载,请注明作者和出处,谢谢! 本文为新书<Android/OPhone 开发完全讲义>的内容连载.<Android/OPhone开发完全讲义>一书现已出版,敬请关注. 购 买:互动网(china- pub) <Android/OPhone开发完全讲义>目录 源代码下载 上一篇:Android SDK中常用命令行工具(一) 一. PC与模拟器或真机交换文件(adb pull和adb push) 在开发阶段或其他原因,经常需要将PC上的文件复制到模拟器或真

Android系列教程(3):Android SDK中常用命令行工具

本文为<Android/OPhone 开发完全讲义>的内容连载,如需转载,请注明作者和出处,谢谢! 本文为新书<Android/OPhone 开发完全讲义>的内容连载.<Android/OPhone开发完全讲义>一书现已出版,敬请关注. <Android/OPhone 开发完全讲义>目录 源代码下载   1.  启动和关闭ADB服 务(adb start-server和adb kill-server)     经作者测试,模拟器在运行一段时间后,adb服务有

新书内容连载(3):Android SDK中常用命令行工具(一)

本文为原创,如需转载,请注明作者和出处,谢谢! 本文为新书<Android/OPhone 开发完全讲义> 的内容连载. <Android/OPhone开发完全讲义>一 书现已出版,敬请关注. 购 买:互动网 (china- pub) <Android/OPhone 开发完全讲义>目录 源代码下载 上一篇:新 书内容连载(2):Android Activity的生命周期 1.  启动和关闭 ADB服 务( adb start-server和 adb kill-server

Linux命令行工具使用小贴士及技巧(一)

相关内容 如果你刚开始在 Linux 系统中使用命令行工具,那么你应该知道它是 Linux 操作系统中功能最强大和有用的工具之一.学习的难易程度跟你想研究的深度有关.但是,无论你的技术能力水平怎么样,这篇文章中的一些小贴士和技巧都会对你有所帮助. 在本系列的文章中,我们将会讨论一些非常有用的命令行工具使用小技巧,希望你的命令行使用体验更加愉快. 但是在开始下一步之前,我得强调一点,这篇文章中的测试实例都是在 Ubuntu 14.04LTS 系统下测试通过的.我们使用命令行 Shell 版本是 b

Linux 命令行工具使用小贴士及技巧(一)

相关内容 如果你刚开始在 Linux 系统中使用命令行工具,那么你应该知道它是 Linux 操作系统中功能最强大和有用的工具之一.学习的难易程度跟你想研究的深度有关.但是,无论你的技术能力水平怎么样,这篇文章中的一些小贴士和技巧都会对你有所帮助. 在本系列的文章中,我们将会讨论一些非常有用的命令行工具使用小技巧,希望你的命令行使用体验更加愉快. 但是在开始下一步之前,我得强调一点,这篇文章中的测试实例都是在 Ubuntu 14.04LTS 系统下测试通过的.我们使用命令行 Shell 版本是 b

终端中的乐趣:6个有趣的Linux命令行工具

终端中的乐趣:6个有趣的Linux命令行工具 之前, 我们展示了一些有关有趣的 Linux 命令行命令的文章, 这些文章告诉我们, Linux 并不像看起来那样复杂, 如果我们知道如何使用的话, 反而会非常有趣. Linux 命令行可以简洁而完美地执行一些复杂的任务, 并且十分有趣. Linux命令及Linux终端的20个趣事 Linux终端的乐趣之把玩字词计数 前者包含了20个有趣的 Linux 命令/脚本(和子命令), 得到了读者的高度赞扬. 而另一篇文章虽然没有之前那篇文章那么受欢迎,包含

Linux系统中下载文件的wget命令行工具

简介 Linux系统中的wget是一个下载文件的命令行工具. 对于Linux用户是必不可少的工具,对于经常要下载一些软件或从远程服务器恢复备份到本地服务器,这个命令尤为重要.wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理. 自动下载 wget支持自动下载,即wget可以在用户退出系统的之后在后台执行.这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,这是个牛气冲天的功能. 完全重建 wget 可以跟踪HTML页面上的链接依次下载

lolcat :一个在 Linux 终端中输出彩虹特效的命令行工具

那些相信 Linux 命令行是单调无聊且没有任何乐趣的人们,你们错了,这里有一些有关 Linux 的文章,它们展示着 Linux 是如何的有趣和"淘气" . Linux命令及Linux终端的20个趣事 终端中的乐趣:6个有趣的Linux命令行工具 Linux终端的乐趣之把玩字词计数 在本文中,我将讨论一个名为"lolcat"的小工具 – 它可以在终端中生成彩虹般的颜色. 为终端生成彩虹般颜色的输出的 Lolcat 命令 何为 lolcat ? Lolcat 是一个针

推荐给开发人员的实用命令行工具

作为一名Web开发者,当程序出现问题时日子总不是那么好过.问题可能无处不在,可能是你发送的请求出了错,可能是回复出了错,可能是你使用的某个第三方库出了问题,又或者是一个外部API调用失败了.优秀的工具对于定位问题出在何处有着无可估量的价值,而且能在一开始就帮助我们阻止问题的出现,总的来说能使我们的工作更有效率.命令行工具尤其有用,因为它们非常易于做自动化和脚本处理,能够以各种不同的方式进行组合和重用.本文介绍了6个非常强大且灵活的工具,熟练使用这些工具能使你的生活变得更轻松一些. Curl Cu