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


|





Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to