2011-02-13 45 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来打开一个进程,然后你可以像读取任何其他文件句柄一样从它读取输出。