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
廣告