code.fastix.org

Dateiansicht:

Datei:Projekte -> PHP:FastDeliver -> FastDeliver.php
md5:feea67ae72d6621281d084c4c79b9234
sha1:1ccee6d1d8618b7b31a0fdec0f43b0c41f29d0e1
  1. <?php
  2.  
  3. class FastDeliver {
  4.  
  5.     private static $extCacheTime = 84600;
  6.     private static $allowedFiles='
  7.        css.css buttons.js
  8.        sitemap.txt
  9.        htmlClasses.js
  10.        bilder/download.svg
  11.        bilder/enlargeBox.svg
  12.        bilder/resizeBox.svg
  13.        font/Oxygen Mono Source-Code-Pro Ubuntu Mono.css
  14.    ';
  15.  
  16.     public function __construct ( ) {
  17.     }
  18.  
  19.  
  20.     public function deliver( $file, $type ) {
  21.         $type = str_replace(' ', '+', $type);
  22.         if ( false === strpos( self::$allowedFiles, $file ) ) {
  23.              http_response_code(403);
  24.              error_log( "FastDeliver.php: (Fatal) File '$file' not allowed in class-config" );
  25.              exit;
  26.         }
  27.  
  28.         $zippedFile = $file . '.gz';
  29.  
  30.         if ( is_file( $file ) && is_readable( $file ) ) {
  31.  
  32.             if ( is_file( $zippedFile ) && is_readable( $zippedFile ) ) {
  33.                 if ( filemtime( $file ) > filemtime( $zippedFile ) ) {
  34.                     $this -> createZippedFile( $file, $zippedFile );
  35.                 }
  36.             } elseif (! is_file( $zippedFile ) )  {
  37.                 $this -> createZippedFile( $file, $zippedFile);
  38.             }
  39.  
  40.             header ("Content-Type:$type; charset=UTF-8");
  41.             header ("X-Sender:FastDeliver.php");
  42.  
  43.             if( self::$extCacheTime ) {
  44.                 header( "Expires: " . gmdate( "D, d M Y H:i:s", time() + self::$extCacheTime ) . " GMT" );
  45.                 header(" Cache-Control: public, max-age=" . self::$extCacheTime );
  46.             }
  47.             if( false === strpos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip' ) ) {
  48.                     readfile( $file );
  49.                     exit;
  50.             } else {
  51.                 header( 'Vary: Accept-Encoding' );
  52.                 header( 'Content-Encoding: gzip' );
  53.                 if (! is_file( $zippedFile ) ) {
  54.                     error_log( "$zippedFile not found" );
  55.                 }
  56.                 readfile( $zippedFile );
  57.                 exit;
  58.             }
  59.  
  60.         } else {
  61.             error_log( "FastDeliver.php: (Fatal) File '$file' not exists or not readable" );
  62.         }
  63.     }
  64.  
  65.     function createZippedFile( $file, $zippedFile ) {
  66.         $error = intval( trim( `gzip -9 -c < '$file' > '$zippedFile' 2> /dev/null; echo $?` ) );
  67.         if ( $error != 0 ) {
  68.             error_log("FastDeliver.php: error by trying gzip -c < '$file' > '$zippedFile' 2> /dev/null; echo \$?; in a shell");
  69.             $_SERVER['HTTP_ACCEPT_ENCODING'] = '';
  70.         } else {
  71.             error_log( "FastDeliver.php: File '$zippedFile' created." );
  72.         }
  73.         return $error;
  74.     }
  75. }
  76. $o = new FastDeliver();
  77. $o -> deliver( $_GET['file'],$_GET['type'] ) ;
  78.