2011-02-13 22 views
1

我很想知道passthru()究竟在做什麼?passthru()如何工作?

我必須創建具有類似功能的我自己的功能,但我無法理解該功能是如何工作的。

+2

你可以參考PHP源代碼,而不是讓別人爲你做。爲什麼你想創建自己的功能類似的功能,爲什麼這個不適合你? – 2011-02-13 09:23:18

+1

`passthru`最終是用C寫成的。答案應該與C內部相關,還是「PHP級別」解釋? – deceze 2011-02-13 09:23:27

回答

0

passthru的內部不會對您有太大幫助,因爲它們太低而不能被PHP重現。

我的目標是將輸出轉發到任何任意文件,而不僅僅是php:// stdout。

如果你想這樣做PHP的水平而無需首先讀取整個輸出到一個變量,我建議像popen。這可以讓你打開一個指向進程的指針,從中你可以一點一點地讀取數據,並將數據一點一點地寫入文件(實際上這可能非常接近passthru所做的)。例如:

while (($buffer = fread($p, 1024)) !== false) { 
    fwrite($file, $buffer); 
} 

但是,如果您正在使用命令行,那麼爲什麼不直接寫入文件呢?

exec('command > file'); 
0

執行命令後需要顯示二進制數據嗎?

您想如何改變標準行爲?

據我所知,passthru()的工作方式與exec()和system()類似,但也允許處理/顯示二進制數據,所以我的猜測是它將管道輸出從passthru )命令直接到二進制流。

請參閱http://php.net/manual/en/function.passthru.php

我希望這可以幫助,否則我應該得到一票否決票。

1

爲什麼不使用shell_exec並附加>> file命令?

function exec_to_file($cmd,$file){ 
    shell_exec(escapeshellcmd($cmd) . ' >> ' . $file); 
} 
0

到中繼可以ext/standard/exec.c中發現的源 - 它實際上是相當可讀的,應該可以直接用PHP編寫你自己的版本。

這聽起來像你需要做的只是使用popen來打開一個進程,然後你可以像讀取任何其他文件句柄一樣從它讀取輸出。