passthru()如何运作?

时间:2011-02-13 09:14:16

标签: php

我很想知道passthru()到底在做什么?

我必须创建具有类似功能的我自己的功能,但我无法理解该功能的工作原理。

4 个答案:

答案 0 :(得分:1)

为什么不使用shell_exec并附加>> file来命令?

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

答案 1 :(得分:0)

执行命令后是否需要显示二进制数据?

您希望如何更改为标准行为?

据我所知,passthru()的工作方式类似于exec()和system(),但也允许处理/显示二进制数据,所以我的猜测是它管道passthru()的输出直接命令二进制流。

请参阅http://php.net/manual/en/function.passthru.php

我希望这会有所帮助,否则我应该得到一次投票。

答案 2 :(得分:0)

可以在ext/standard/exec.c中找到passthru的源代码 - 它实际上非常易读,应该可以直接用PHP编写自己的版本。

听起来你需要做的只是使用popen来打开一个进程,然后你可以像其他任何文件句柄一样读取它的输出。

答案 3 :(得分:0)

passthru的内部结构对你没有多大帮助,因为它们的级别太低而无法通过PHP重现。

  

我的目标是将输出转发到任意文件,而不仅仅是php:// stdout。

如果您想在PHP级别上执行此操作而不先将整个输出读入变量,我建议使用popen之类的内容。这使您可以打开一个指向进程的指针,您可以从中一点一点地读取该数据并将数据一点一点地写入文件(这实际上可能与passthru非常接近)。 E.g:

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

如果您仍在使用命令行,为什么不在那里写一个文件?

exec('command > file');