PHP 文件系统 popen() 函数



PHP 文件系统 popen() 函数用于打开到命令参数中指定的程序的管道,如果发生错误则返回 false。此函数主要允许我们执行函数内给定的命令并读取其输出或向其写入输入。

可以使用 fgets()、fgetss() 和 fwrite() 访问打开的指针。当模式为 'r' 时,返回的文件指针等于命令的 STDOUT;当模式为 'w' 时,返回的文件指针等于命令的 STDIN。

语法

以下是 PHP 文件系统 popen() 函数的语法:

resource popen ( string $command , string $mode )

参数

以下是 popen() 函数的必需和可选参数:

序号 参数及描述
1

$command (必需)

要执行的命令。

2

$mode (必需)

连接模式。可以是 'r' 或 'w',其中 r 表示读取,w 表示写入。

返回值

popen() 函数返回一个单向文件引用,类似于 fopen() 返回的引用,但只能用于读取或写入。如果发生错误,则返回 false。

PHP 版本

popen() 函数最初作为核心 PHP 4 的一部分引入,并与 PHP 5、PHP 7 和 PHP 8 兼容。

示例

这是一个基本示例,展示如何使用 PHP 文件系统 popen() 函数打开管道。

<?php
   //Open a pipe
   $handle = popen("/bin/ls", "r");

   //Close the pipe
   pclose($handle);
?>

如果要执行的命令找不到,则会返回一个有效的资源。这看起来可能很奇怪,但它是合理的:它允许您获取 shell 返回的任何错误消息。

输出

以下是以下代码的结果:

ls: stdout: Broken pipe

示例

这是一个另一个示例,展示如何使用 popen() 函数通过处理错误来打开管道。

<?php
   // Open a pipe
   $handle = popen("/bin/ls", "r");

   if ($handle) {
      // Read the output from the pipe
      while (($line = fgets($handle)) !== false) {
         echo $line;
      }

      // Close the pipe
      popen($handle);
   } else {
      echo "We are unable to open the pipe.";
   }
?> 

输出

这将产生以下结果:

config.php
csvfile.csv
data.csv
documents
error_log.log
image.jpg
images
index.php
logo.gif
logs
myfile.txt
new dir

示例

这是一个了解 popen() 函数用法的另一个示例。我们将使用 cat 命令读取文件内容。我们将文件名写入 cat 命令。

<?php
   // Open a pipe
   $handle = popen("cat", "w"); // "w" means write

   if ($handle) {
      fwrite($handle, "PhpProjects/myfile.txt"); // Here write the file name to the command
      
      // Close the process
      pclose($handle); 
   } else {
      echo "We are unable to open process.";
   }
?> 

输出

这将生成以下输出:

PhpProjects/myfile.txt

注意

在 Windows 上,popen() 默认使用文本模式,这意味着写入或读取管道的任何 \n 字符都将转换为 \r\n。如果不需要此功能,可以通过将模式设置为 'rb' 或 'wb' 来启用二进制模式。

总结

popen() 方法是一个内置函数,用于通过派生命令参数给定的命令来打开到执行的进程的管道。

php_function_reference.htm
广告