code.fastix.org

Dateiansicht:

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