使用 PHP 接收 Linux 中 pipe 的 輸出資料

在 Linux 常使用到 pipe(|), 要如何讓 PHP 讀取 pipe 送過來的值呢?

  • ex: cat file.txt | ./read_pipe.php # 將 file.txt cat 印出, 送給 read_pipe.php 接收處理.

主要是使用 php://stdin 接收, 詳細可見: PHP input/output streams, PHP I/O streams

將接收到的資料, 全部印出

<?php
$fp = fopen('php://stdin','r');
print stream_get_contents($fp);
?>

更多寫法(接收全部輸入,一起輸出)

  • <?php $data = stream_get_contents(STDIN); ?>
  • <?php
    $fh = fopen('php://stdin', 'r');
    $data = trim(fgets($fh));
    ?>
  • <?php $data = trim(fgets(STDIN)); ?>

將接收到的資料, 全部印出

<?php
while ($line = trim(fgets(STDIN))) {
    echo $line . "\n";
}
?>

將接收到的資料, 依 \n 分段印出

<?php
$fp = fopen('php://stdin','r');
while ($line = stream_get_line($fp, 65535, "\n")) {
    echo $line . "\n";
}
?>

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

在〈使用 PHP 接收 Linux 中 pipe 的 輸出資料〉中有 1 則留言

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料