Вывод в реальном времени в CakePHP
Я хотел бы напечатать вывод программы в 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}
Что я могу сделать?
1 ответ
Вы можете попробовать это (не проверено):
$this->response->body(function () {
passthru ('./program') ;
}) ;
return $this->response ;
Больше информации здесь.
Примечание: я предположил, что вы использовали CakePHP 3 с CakeResponse::file
не существует в CakePHP 2.