获取在后台运行的 php 文件的输出

Posted

技术标签:

【中文标题】获取在后台运行的 php 文件的输出【英文标题】:Get output of a php file running in background 【发布时间】:2015-06-23 11:35:05 【问题描述】:

我有两个 php 文件。我们称他们为a.phpb.php

当用户访问a.php时,我使用exec()执行b.phpb.php生成输出。

我的问题是:当过程在b.php 中完成时,如何让这个输出显示在a.php 或另一个文件中?

这是我的代码:

exec("C:\wamp\bin\php\php5.5.12\php.exe C:\wamp\www\b.php 2>otst.txt");

【问题讨论】:

exec() 通常会阻塞,直到 exec 进程完成。这意味着您的a 脚本在b 完成之前已经死在水中。但默认情况下exec 只返回程序的最后一行输出。要捕获所有内容,您需要执行exec(external_file, $output, $exit_value) OP 应该明确这个问题,特别是“显示在”这个词实际上并不适合 php 文件。 是的,我的错。我会更新问题。 【参考方案1】:

使用以下 2 个 PHP 函数之一:

passthru - 执行外部程序并显示原始输出

system- 执行外部程序并显示输出

系统示例:

<?php
echo '<pre>';

// Outputs all the result of shellcommand "ls", and returns
// the last output line into $last_line. Stores the return value
// of the shell command in $retval.
$last_line = system('ls', $retval);

// Printing additional info
echo '
</pre>
<hr />Last line of the output: ' . $last_line . '
<hr />Return value: ' . $retval;
?>

(来源http://php.net/manual/en/function.system.php)

【讨论】:

【参考方案2】:

如果你不需要任何花哨的东西,你可以使用backtick (`) 运算符来代替exec()

$output = `php b.php`;

请注意,反引号对应于调用shell_exec,有关exec vs shell_exec 的讨论,请参阅此相关问题。

【讨论】:

以上是关于获取在后台运行的 php 文件的输出的主要内容,如果未能解决你的问题,请参考以下文章

运行并从后台进程获取输出

php后台运行以及定时任务的4种实现原理以及代码

Linux后台运行python程序并输出到日志文件

如何在Linux服务器上后台运行python程序,并将输出加载到指定文件中

在后台centos服务器中运行php脚本

Linux命令后台运行