Source for file jResponseBinary.class.php

Documentation is available at jResponseBinary.class.php

  1. <?php
  2. /**
  3. @package     jelix
  4. @subpackage  core_response
  5. @author      Laurent Jouanneau
  6. @contributor Nicolas Lassalle <nicolas@beroot.org> (ticket #188)
  7. @copyright   2005-2007 Laurent Jouanneau
  8. @copyright   2007 Nicolas Lassalle
  9. @link        http://www.jelix.org
  10. @licence     GNU Lesser General Public Licence see LICENCE file or http://www.gnu.org/licenses/lgpl.html
  11. */
  12.  
  13.  
  14. /**
  15. * Response use to send a binary file to the browser
  16. @package  jelix
  17. @subpackage core_response
  18. */
  19.  
  20. final class jResponseBinary  extends jResponse {
  21.     /**
  22.     * @var string 
  23.     */
  24.     protected $_type = 'binary';
  25.  
  26.     /**
  27.      * The path of the file you want to send. Keep empty if you provide the content
  28.      * @var string 
  29.      */
  30.     public $fileName ='';
  31.     /**
  32.      * name of the file under which the content will be send to the user
  33.      * @var string 
  34.      */
  35.     public $outputFileName ='';
  36.  
  37.     /**
  38.      * the content you want to send. Keep empty if you indicate a filename
  39.      * @var string 
  40.      */
  41.     public $content = null;
  42.  
  43.     /**
  44.      * Says if the "save as" dialog appear or not to the user.
  45.      * if false, specify the mime type in $mimetype
  46.      * @var boolean 
  47.      */
  48.     public $doDownload = true;
  49.  
  50.     /**
  51.     * The mimeType of the current binary file.
  52.     * It will be sent in the header "Content-Type".
  53.     * @var string 
  54.     */
  55.     public $mimeType = 'application/octet-stream';
  56.  
  57.     /**
  58.      * send the content or the file to the browser.
  59.      * @return boolean    true it it's ok
  60.      */
  61.     public function output(){
  62.  
  63.         if($this->doDownload){
  64.             $this->mimeType = 'application/forcedownload';
  65.             if (!strlen($this->outputFileName)){
  66.                 $f explode ('/'str_replace ('\\''/'$this->fileName));
  67.                 $this->outputFileName = $f[count ($f)-1];
  68.             }
  69.         }
  70.  
  71.         if($this->hasErrors()) return false;
  72.  
  73.         $this->addHttpHeader("Content-Type",$this->mimeType$this->doDownload);
  74.  
  75.         if($this->doDownload)
  76.               $this->_downloadHeader();
  77.  
  78.         if($this->content === null){
  79.             if (is_readable ($this->fileName&& is_file ($this->fileName)){
  80.                 $this->_httpHeaders['Content-Length']=filesize ($this->fileName);
  81.                 $this->sendHttpHeaders();
  82.                 readfile ($this->fileName);
  83.                 flush();
  84.                 return true;
  85.             }else{
  86.                 throw new jException('jelix~errors.repbin.unknow.file' $this->fileName);
  87.                 return false;
  88.             }
  89.         }else{
  90.             $this->_httpHeaders['Content-Length']=strlen ($this->content);
  91.             $this->sendHttpHeaders();
  92.             echo $this->content;
  93.             flush();
  94.             return true;
  95.         }
  96.     }
  97.  
  98.     /**
  99.      * set all headers to force download
  100.      */
  101.     protected function _downloadHeader(){
  102.         $this->addHttpHeader('Content-Disposition','attachment; filename="'.$this->outputFileName.'"'false);
  103.         $this->addHttpHeader('Content-Description','File Transfert'false);
  104.         $this->addHttpHeader('Content-Transfer-Encoding','binary'false);
  105.         $this->addHttpHeader('Pragma','public'false);
  106.         $this->addHttpHeader('Cache-Control','maxage=3600'false);
  107.         //$this->addHttpHeader('Cache-Control','no-store, no-cache, must-revalidate, post-check=0, pre-check=0', false);
  108.         //$this->addHttpHeader('Expires','0', false);
  109.     }
  110.  
  111.     /**
  112.      *
  113.      */
  114.     public function outputErrors(){
  115.         $this->clearHttpHeaders();
  116.         $this->_httpStatusCode ='500';
  117.         $this->_httpStatusMsg ='Internal Server Error';
  118.         $this->_httpHeaders["Content-Type"]='text/plain';
  119.         $this->sendHttpHeaders();
  120.         if($this->hasErrors()){
  121.             foreach$GLOBALS['gJCoord']->errorMessages  as $e){
  122.                echo '['.$e[0].' '.$e[1].'] '.$e[2]." \t".$e[3]." \t".$e[4]."\n";
  123.             }
  124.         }else{
  125.             echo "[unknown error]\n";
  126.         }
  127.     }
  128. }
  129. ?>

Documentation generated on Wed, 07 Sep 2011 13:47:43 +0200 by phpDocumentor 1.4.3