概述PHP命令行shell_exec()使用

开发 后端
本文探究构建到 PHP 中的工具,让您了解 PHP 运行的底层 shell 环境和文件系统还有PHP命令行shell_exec()使用。

PHP经过长时间的发展,很多用户都很了解PHP了,这里我发表一下个人理解,和大家讨论讨论PHP命令行。PHP Command Line Interface (CLI) Server Application Programming Interface (SAPI) 在 PHP V4.2.0 开始发布,用于试验目的。到 V4.3.0 时,已经受到完整支持并且默认启用。

#T#PHP CLI SAPI 允许您开发 PHP 支持的 shell 脚本,甚至是基于桌面的脚本。事实上,可以用PHP命令行运行的工具。采用这种方式,PHP 开发人员可以像 Perl、AWK、Ruby 或 shell 程序员一样高效。本文探究构建到 PHP 中的工具,让您了解 PHP 运行的底层 shell 环境和文件系统。PHP 为执行外部命令提供大量函数,其中包括 shell_exec()、exec()、passthru() 和 system()。这些命令是相似的,但为您运行的外部程序提供不同的界面。所有这些命令都衍生一个子进程,用于运行您指定的命令或脚本,并且每个子进程会在命令输出写到标准输出 (stdout) 时捕捉它们。

  1. shell_exec() 

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

PHP命令行概述

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

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

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

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

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

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

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

  1. <?php 
  2. $results = `wc -w *.txt`;  
  3. echo $results;  
  4. ?> 

清单 4. 更加简单的方法

  1. <?php 
  2. echo `wc -w *.txt`;  
  3. ?> 

通过 UNIX 命令行和 shell 脚本能够完成很多东西,知道这点很重要。例如,您可以使用竖线将命令连接起来。您甚至可以使用操作符在其中创建 shell 脚本,并且仅调用 shell 脚本(根据需要使用或不使用参数)。例如,如果您仅希望计算该目录下的前 5 个文本文件的单词数,那么可以使用竖线 (|) 将 wc 和 head 命令连接起来。另外,您还可以将输出结果放到 pre 标记内部,让它能够更美观地呈现在 Web 浏览器中,如下所示。

清单 5. 更加复杂的 shell 命令

  1. <?php 
  2. $results = shell_exec('wc -w *.txt | head -5');  
  3. echo "<pre>".$results . "</pre>";  
  4. ?> 

在本文的后面部分,您将学习如何使用 PHP 为这些脚本传递参数。现在您可以将它看作运行 shell 命令的一种方法,但要记住您只能看到标准输出。如果命令或脚本出现错误,您将看不到标准的错误 (stderr),除非您通过竖线将它添加到 stdout。

责任编辑:田树 来源: it168
相关推荐

2024-03-06 15:57:56

ShellLinux

2009-12-02 11:20:56

PHP命令行参数

2017-03-08 11:10:39

LinuxShell命令

2009-12-25 16:04:06

shell命令行

2010-10-12 17:01:21

MySQL命令行

2021-05-31 12:05:46

Shell命令Linux

2010-06-01 19:14:53

SVN命令行

2014-01-24 09:09:32

Linux命令行网速

2009-12-08 14:31:31

PHP命令行读取参数

2009-08-16 20:24:59

linux命令行登陆linux命令行linux命令

2014-01-22 10:21:55

Linux命令行

2020-12-11 06:44:16

命令行工具开发

2020-12-10 16:16:08

工具代码开发

2021-08-30 07:50:42

脚本语言命令行

2015-07-01 09:15:46

linuxQuora命令行

2012-11-20 16:16:05

Windows

2010-04-09 16:26:20

Unix操作系统

2018-03-14 14:27:00

2019-05-21 10:38:17

Linux命令行

2018-04-25 10:46:05

Linux命令行日历
点赞
收藏

51CTO技术栈公众号