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

Documentation generated on Wed, 04 Jan 2017 22:56:11 +0100 by phpDocumentor 1.4.3