當前位置: 首頁> 最新文章列表> pclose和popen怎麼一起用?來看一個最基礎的實戰示例

pclose和popen怎麼一起用?來看一個最基礎的實戰示例

gitbox 2025-09-12
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 下面這一段與文章內容無關,可以作為前置示例代碼</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"這是文章前置內容示例\n"</span></span><span>;
</span><span><span class="hljs-variable">$time</span></span><span> = </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">"Y-m-d H:i:s"</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"當前時間:<span class="hljs-subst">$time</span></span></span><span>\n";
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-meta">&lt;?php</span></span><span>
<span class="hljs-comment">/*
標題: [pclose和popen怎麼一起用?來看一個最基礎的實戰示例]
*/</span>

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"在 PHP 中,popen() 和 pclose() 函數常常用來執行系統命令並獲取其輸出。下面我們通過一個最基礎的示例來說明它們的使用方法。\n\n"</span></span><span>;

</span><span><span class="hljs-comment">// 1. 使用 popen 打開一個進程</span></span><span>
</span><span><span class="hljs-comment">// 'r' 模式表示我們將從命令中讀取輸出</span></span><span>
</span><span><span class="hljs-variable">$handle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">popen</span></span><span>(</span><span><span class="hljs-string">"ls -l"</span></span><span>, </span><span><span class="hljs-string">"r"</span></span><span>); </span><span><span class="hljs-comment">// 在 Windows 下可以改為 'dir'</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$handle</span></span><span>) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"無法打開進程\n"</span></span><span>);
}

</span><span><span class="hljs-comment">// 2. 讀取命令輸出</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"命令輸出如下:\n"</span></span><span>;
</span><span><span class="hljs-keyword">while</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">feof</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>)) {
    </span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$line</span></span><span> !== </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$line</span></span><span>;
    }
}

</span><span><span class="hljs-comment">// 3. 使用 pclose 關閉進程並獲取返回值</span></span><span>
</span><span><span class="hljs-variable">$return_value</span></span><span> = </span><span><span class="hljs-title function_ invoke__">pclose</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"\n進程返回值:<span class="hljs-subst">$return_value</span></span></span><span>\n";

<span class="hljs-comment">/*
解析:
1. popen() 會啟動一個子進程執行指定的命令,並返回一個文件句柄。
2. 通過 fgets() 或 fread() 可以逐行讀取子進程的輸出。
3. 結束讀取後,必須使用 pclose() 關閉句柄,同時獲取命令的退出狀態。
4. 'r' 模式表示讀取輸出,'w' 模式表示向進程輸入數據。
這個組合非常適合需要實時獲取命令輸出的場景。
*/</span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>