Depending on your needs you may want to disable Rendering and Layouts:
setNoRender(); & disableLayout();
/**
* streamAction
*
* Stream Action
*/
public function streamAction()
{
$this->getHelper('ViewRenderer')->setNoRender();
$this->getHelper('Layout')->disableLayout();
$fileString = $this->_request->getParam("fileString");
$dldFileName = $this->_request->getParam("fileName");
...
Goran Dodig wrote:
>
> Hello there,
>
> I guess this could help you.
> The way I did it was by making streamAction() in my controller that
> looks like this:
>
> function streamAction()
> {
> $fileString = $this->_request->getParam("fileString");
> $dldFileName = $this->_request->getParam("fileName");
> $disposition = $this->_request->getParam("fileDisposition"); //
> can be "inline" or "attachment"
> $contentType = $this->_request->getParam("fileMime");
>
> if ($this->_request->get("HTTPS") !== null) {
> $this->_response->setHeader("Pragma", "");
> $this->_response->setHeader("Cache-Control", "");
> $this->_response->setHeader("Expires", "Mon, 1 Jan 2000
> 00:00:00 GMT");
> $this->_response->setHeader("Last-Modified", gmdate("D, d M
> Y H:i:s") . " GMT");
> $this->_response->setHeader("Cache-Control", "no-store,
> no-cache, must-revalidate"); // HTTP/1.1
> $this->_response->setHeader("Cache-Control", "post-check=0,
> pre-check=0");
> } else if ($disposition == "attachment") {
> $this->_response->setHeader("Cache-control", "private");
> } else {
> $this->_response->setHeader("Cache-Control", "no-cache,
> must-revalidate");
> $this->_response->setHeader("Pragma", "no-cache");
> $this->_response->setHeader("Expires", "0");
> }
>
> $agent = trim($this->_request->get("HTTP_USER_AGENT"));
> if ((preg_match('|MSIE ([0-9.]+)|', $agent, $version)) ||
> (preg_match('|Internet Explorer/([0-9.]+)|', $agent,
> $version))) {
>
> if ($disposition == "attachment")
> $this->_response->setHeader("Content-Type",
> "application/x-msdownload");
> else
> $this->_response->setHeader("Content-Type", $contentType);
>
> if ($version == '5.5') {
> $this->_response->setHeader("Content-Disposition",
> "filename=".$dldFileName);
> } else {
> $this->_response->setHeader("Content-Disposition",
> $disposition."; filename=".$dldFileName);
> }
> } else {
> $this->_response->setHeader("Content-Type", $contentType);
> $this->_response->setHeader("Content-Disposition",
> $disposition."; filename=" . $dldFileName);
> }
>
> $this->_response->setHeader("Content-Length",
> strlen($fileString));
> $this->_response->setHeader("Content-transfer-encoding", "8bit");
> $this->_response->setHeader("Connection", "close");
>
> $this->_response->setBody($fileString);
>
> $this->render();
>
> }
>
> And than forward to it from wherever i need it like so:
>
> $this->_forward("stream", "pdf", null, array("fileString" =>
> $pdf->render(),
> "fileName" => $pdfFile,
> "fileDisposition" =>
> "inline",
> "fileMime" =>
> "application/pdf",
> ));
>
> The code in streamAction takes care of everything, and works in IE5.5,
> 6.0+, Mozilla, Opera (as far as i could test) and over http as well as
> https protocol.
>
> Best regards,
>
> Goran Dodig
> [EMAIL PROTECTED]
>
>
> frederic wolf wrote:
>> Mauro Casula a écrit :
>>> Hi all,
>>>
>>> I have an action that make a mysql database backup in this way:
>>>
>>> public function backupDatabaseAction()
>>> {
>>> $db = Zend::registry('db'); $view =
>>> Zend::registry('view');
>>> $config = Zend::registry('config');
>>> $session = Zend::registry('session');
>>>
>>> $view->title = $config->site->title." - Modifica di una casa";
>>>
>>> $ctr = new CaseVacanzaDataController($db, $session);
>>>
>>> $view->actionTemplate = 'main.php';
>>> $view->header = $view->render('header.php');
>>> system($config->bin_path."\export_db.bat",
>>> $ret); $view->menu =
>>> $view->render('menu_amministrazione.php');
>>> $view->body = $view->render('admin_backup_database.php');
>>>
>>> $view->footer = $view->render('footer.php');
>>>
>>> echo $view->render('main.php');
>>>
>>>
>>> }
>>>
>>> the export_db.bat script write a Sql backup file in a specific
>>> directory..
>>>
>>> What I have to do for return this file directly with the download
>>> popup and
>>> so delete it..?
>>>
>>> Thankyou in advance for the answers..
>>> Regards.
>>> Mauro Casula
>>>
>>>
>> Hello,
>>
>> this could help you maybe :
>>
>> basically you could do that
>> $str = file_get_contents($file);
>> header('Content-Disposition: attachment;
>> filename="downloaded.pdf"');
>> header('Content-type: application/pdf');
>> echo $str;
>>
>> the example is for a pdf file, in your example, yous hould change
>> Content-type (look for it in header doc) Content-Disposition:
>> attachment makes the download window opens in order to save it or
>> display it on the client side.
>>
>> But I guess, a "zfer" way would be to use the response object, maybe
>> like this :
>>
>> |$this->getResponse()
>> ->setHeader('Content-Type', 'text/plain')
>> ||->setHeader('|Content-Disposition|', '|attachment;
>> filename="bkp.sql"'|') |
>> | ->appendBody(|$str|);
>>
>> Hope this could help you, though I didn't test it. At least it works
>> for me with pdf files.
>>
>> fred
>>
>>
>> |
>>
>>
>>
>>
>
>
>
>
--
View this message in context:
http://www.nabble.com/How-to-return-a-file-directly-by-an-action-tp10056561p16751381.html
Sent from the Zend Framework mailing list archive at Nabble.com.