0

我想“实时”打印 php 中程序的输出(缓冲区并不重要)。该过程需要很长时间,并且更早地获取(部分)数据将非常有帮助。

通常我会使用普通的 passthru() 但这是在 CakePHP 中完成的,在我这样做之前它不会输出任何东西:

$this->response->file($file, array('download' => true));
return $this->response;

如果我只是删除这些行并将 exec() 与 passthru() 交换,我会得到一个 MissingViewException

Error: [MissingViewException] View file "Songs/download.ctp" is missing.

如果我这样做

$this->response=$out; #$out being the output of exec()
return $this->response;

我明白了

2015-08-10 01:18:06 Error: Fatal Error (1): Call to a member function body() on string in [/storage/www/sonerezh/lib/Cake/Controller/Controller.php, line 960]
2015-08-10 01:18:06 Error: [InternalErrorException] Internal Server Error
Request URL: /songs/download/2307
Stack Trace:
#0 /storage/www/sonerezh/lib/Cake/Error/ErrorHandler.php(213): ErrorHandler::handleFatalError(1, 'Call to a membe...', '/storage/www/so...', 960)
#1 [internal function]: ErrorHandler::handleError(1, 'Call to a membe...', '/storage/www/so...', 960, Array)
#2 /storage/www/sonerezh/lib/Cake/Core/App.php(931): call_user_func('ErrorHandler::h...', 1, 'Call to a membe...', '/storage/www/so...', 960, Array)
#3 /storage/www/sonerezh/lib/Cake/Core/App.php(904): App::_checkFatalError()
#4 [internal function]: App::shutdown()
#5 {main}

我能做些什么?

4

1 回答 1

0

你可以试试这个(未测试):

$this->response->body(function () {
    passthru ('./program') ;
}) ;
return $this->response ;

更多信息在这里

注意:我假设您使用的是 CakePHP 3,因为CakeResponse::fileCakePHP 2 中不存在。

于 2015-08-10T07:16:33.303 回答