complete rearrangement an splitting into functions
This commit is contained in:
		
							
								
								
									
										343
									
								
								src/index.php
									
									
									
									
									
								
							
							
						
						
									
										343
									
								
								src/index.php
									
									
									
									
									
								
							@@ -1,116 +1,100 @@
 | 
			
		||||
<?php
 | 
			
		||||
  $DIR="/var/data/spielfilme";
 | 
			
		||||
  $POSTER="/var/tmp/spielfilme";
 | 
			
		||||
  $CONVERT=$POSTER;
 | 
			
		||||
 | 
			
		||||
$DIR="/var/data/spielfilme";
 | 
			
		||||
$POSTER="/var/tmp/spielfilme";
 | 
			
		||||
$CONVERT=$POSTER;
 | 
			
		||||
 | 
			
		||||
/** Check the HTTP Get Variables */
 | 
			
		||||
function checkGet($var) {
 | 
			
		||||
  if (isset($_GET[$var]) && ereg('[^-_.A-Za-z0-9]', $_GET[$var])) {
 | 
			
		||||
    ?><html>
 | 
			
		||||
      <body>
 | 
			
		||||
        <p>wrong parameter <?php echo $var ?>:
 | 
			
		||||
          "<code><?php echo htmlentities($_GET["img"]) ?></code>"
 | 
			
		||||
        </p>
 | 
			
		||||
      </body>
 | 
			
		||||
    </html><?php
 | 
			
		||||
    exit;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Check whether a specific file path exists */
 | 
			
		||||
function checkPath($path, $file) {
 | 
			
		||||
  if (!is_file($path.'/'.$file)) {
 | 
			
		||||
    ?><html>
 | 
			
		||||
      <body>
 | 
			
		||||
        <p>File not found:
 | 
			
		||||
          "<code><?php echo htmlentities($file) ?></code>"
 | 
			
		||||
        </p>
 | 
			
		||||
      </body>
 | 
			
		||||
    </html><?php
 | 
			
		||||
    exit;
 | 
			
		||||
  }
 | 
			
		||||
  return $path.'/'.$file;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Get Full Page URL */
 | 
			
		||||
function pageUrl() {
 | 
			
		||||
  $pageURL = 'http';
 | 
			
		||||
  if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
 | 
			
		||||
  $pageURL .= "://";
 | 
			
		||||
  if ($_SERVER["SERVER_PORT"] != "80") {
 | 
			
		||||
     $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
 | 
			
		||||
     $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"]
 | 
			
		||||
       .$_SERVER["REQUEST_URI"];
 | 
			
		||||
   } else {
 | 
			
		||||
     $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
 | 
			
		||||
   }
 | 
			
		||||
   return $pageURL;
 | 
			
		||||
}
 | 
			
		||||
$URL=pageUrl();
 | 
			
		||||
 | 
			
		||||
/** Generate an Image Tag to a Poster Image.
 | 
			
		||||
    @param $alt alternative image description attribute
 | 
			
		||||
    @param $src should be an image path below $POSTER
 | 
			
		||||
    @param $class optionall class attribute
 | 
			
		||||
    Returns an image tag, if the image file exists, empty otherwise. */
 | 
			
		||||
function img($alt, $src, $class="image") {
 | 
			
		||||
  global $URL, $POSTER;
 | 
			
		||||
  global $POSTER;
 | 
			
		||||
  $URL=pageUrl();
 | 
			
		||||
  if (is_file($POSTER.'/'.$src.'.jpg'))
 | 
			
		||||
     return '<img alt="'.htmlentities($alt).'" src="'.htmlentities($URL.'?img='.$src).'.jpg" class="'.$class.'"/>';
 | 
			
		||||
     return '<img alt="'.htmlentities($alt).'" src="'
 | 
			
		||||
       .htmlentities($URL.'?img='.$src).'.jpg" class="'.$class.'"/>';
 | 
			
		||||
  return '';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
  if (isset($_GET["img"])) {
 | 
			
		||||
    if (ereg('[^-_.A-Za-z0-9]', $_GET["img"])) {
 | 
			
		||||
?><html>
 | 
			
		||||
<body>
 | 
			
		||||
<p>Illegal Image name: "<code><?php echo htmlentities($_GET["img"]) ?></code>"</p>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
<?php
 | 
			
		||||
    } elseif (is_file($POSTER.'/'.$_GET["img"])) {
 | 
			
		||||
      header('Content-Type: image/jpeg');
 | 
			
		||||
      readfile($POSTER.'/'.$_GET["img"]);
 | 
			
		||||
      exit;
 | 
			
		||||
/** Generate a source entry for a given file.
 | 
			
		||||
    Returns source tag, if the image file exists, empty otherwise. */
 | 
			
		||||
function source($dir, $file, $mime=NULL) {
 | 
			
		||||
  $URL=pageUrl();
 | 
			
		||||
  $path=$dir.'/'.$file;
 | 
			
		||||
  if (is_file($path)) {
 | 
			
		||||
    if (!$mime) $type=mime_content_type($path);
 | 
			
		||||
    else $type='video/'.$mime;
 | 
			
		||||
    echo '<source src="'.$URL.'&play=1'.($mime?'&mime='.$mime:'')
 | 
			
		||||
      .'" type="'.$type.'">';
 | 
			
		||||
  } else {
 | 
			
		||||
?><html>
 | 
			
		||||
<body>
 | 
			
		||||
<p>Image not found: "<code><?php echo htmlentities($_GET["img"]) ?></code>"</p>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
<?php
 | 
			
		||||
    return '';
 | 
			
		||||
  }
 | 
			
		||||
  } elseif (isset($_GET["video"])) {
 | 
			
		||||
    if (ereg('[^-_.A-Za-z0-9]', $_GET["video"]) || isset($_GET["mime"]) && ereg('[^-_.A-Za-z0-9]', $_GET["mime"])) {
 | 
			
		||||
?><html>
 | 
			
		||||
<body>
 | 
			
		||||
<p>Illegal Video name: "<code><?php echo htmlentities($_GET["video"]) ?></code>"</p>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
<?php
 | 
			
		||||
    } elseif (is_file($DIR.'/'.$_GET["video"])) {
 | 
			
		||||
      $mime = mime_content_type($DIR.'/'.$_GET["video"]);
 | 
			
		||||
      if (isset($_GET["play"])) {
 | 
			
		||||
/*        if (isset($_GET["convert"])) {
 | 
			
		||||
	  switch ($_GET["convert"])  {
 | 
			
		||||
	    case "webm": 
 | 
			
		||||
	      header('Content-type: video/webm');
 | 
			
		||||
	      exec('ffmpeg -i "'.$DIR.'/'.$_GET["video"].'" -b 1500k -vcodec libvpx -acodec libvorbis -ab 160000 -f webm -g 30 - 2>/dev/null');
 | 
			
		||||
  	    break;
 | 
			
		||||
	    case "mp4":
 | 
			
		||||
	      header('Content-type: video/mp4');
 | 
			
		||||
	      exec('ffmpeg -i "'.$DIR.'/'.$_GET["video"].'" -qscale 4 -vcodec libx264 -f mp4 - 2>/dev/null');
 | 
			
		||||
	    break;
 | 
			
		||||
	  }
 | 
			
		||||
        } else { */
 | 
			
		||||
// Clears the cache and prevent unwanted output
 | 
			
		||||
ob_clean();
 | 
			
		||||
@ini_set('error_reporting', E_ALL & ~ E_NOTICE);
 | 
			
		||||
@apache_setenv('no-gzip', 1);
 | 
			
		||||
@ini_set('zlib.output_compression', 'Off');
 | 
			
		||||
 | 
			
		||||
if (isset($_GET["mime"]))
 | 
			
		||||
  $file = $CONVERT.'/'.$_GET["mime"].'/'.preg_replace('/\.[^.]*$/', '.'.$_GET["mime"], $_GET["video"]);
 | 
			
		||||
else
 | 
			
		||||
  $file = $DIR.'/'.$_GET["video"]; // The media file's location
 | 
			
		||||
$size = filesize($file); // The size of the file
 | 
			
		||||
$mime = mime_content_type($file);
 | 
			
		||||
 | 
			
		||||
// Send the content type header
 | 
			
		||||
header('Content-type: ' . $mime);
 | 
			
		||||
 
 | 
			
		||||
// Check if it's a HTTP range request
 | 
			
		||||
if(isset($_SERVER['HTTP_RANGE'])){
 | 
			
		||||
    // Parse the range header to get the byte offset
 | 
			
		||||
    $ranges = array_map(
 | 
			
		||||
        'intval', // Parse the parts into integer
 | 
			
		||||
        explode(
 | 
			
		||||
            '-', // The range separator
 | 
			
		||||
            substr($_SERVER['HTTP_RANGE'], 6) // Skip the `bytes=` part of the header
 | 
			
		||||
        )
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Output only a part of a file */
 | 
			
		||||
function range($path, $size, $mime) {
 | 
			
		||||
  $ranges = array_map('intval', // Parse the parts into integer
 | 
			
		||||
                      explode('-', // The range separator
 | 
			
		||||
                              // Skip the `bytes=` part of the header
 | 
			
		||||
                              substr($_SERVER['HTTP_RANGE'], 6)));
 | 
			
		||||
  // If the last range param is empty, it means the EOF (End of File)
 | 
			
		||||
    if(!$ranges[1]){
 | 
			
		||||
        $ranges[1] = $size - 1;
 | 
			
		||||
    }
 | 
			
		||||
  if (!$ranges[1]) $ranges[1] = $size-1;
 | 
			
		||||
  
 | 
			
		||||
  // Send the appropriate headers
 | 
			
		||||
  header('HTTP/1.1 206 Partial Content');
 | 
			
		||||
  header('Accept-Ranges: bytes');
 | 
			
		||||
    header('Content-Length: ' . ($ranges[1] - $ranges[0])); // The size of the range
 | 
			
		||||
  header('Content-Length: '.($ranges[1]-$ranges[0])); // The size of the range
 | 
			
		||||
 
 | 
			
		||||
  // Send the ranges we offered
 | 
			
		||||
    header(
 | 
			
		||||
        sprintf(
 | 
			
		||||
            'Content-Range: bytes %d-%d/%d', // The header format
 | 
			
		||||
  header(sprintf('Content-Range: bytes %d-%d/%d', // The header format
 | 
			
		||||
                 $ranges[0], // The start range
 | 
			
		||||
                 $ranges[1], // The end range
 | 
			
		||||
            $size // Total size of the file
 | 
			
		||||
        )
 | 
			
		||||
    );
 | 
			
		||||
                 $size)); // Total size of the file
 | 
			
		||||
  
 | 
			
		||||
  // It's time to output the file
 | 
			
		||||
  $f = fopen($file, 'rb'); // Open the file in binary mode
 | 
			
		||||
@@ -119,97 +103,150 @@ if(isset($_SERVER['HTTP_RANGE'])){
 | 
			
		||||
  // Seek to the requested start range
 | 
			
		||||
  fseek($f, $ranges[0]);
 | 
			
		||||
 
 | 
			
		||||
    // Start outputting the data
 | 
			
		||||
    while(true){
 | 
			
		||||
        // Check if we have outputted all the data requested
 | 
			
		||||
        if(ftell($f) >= $ranges[1]){
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
        // Output the data
 | 
			
		||||
  // output the data
 | 
			
		||||
  while (ftell($f) < $ranges[1]) {
 | 
			
		||||
    echo fread($f, $chunkSize);
 | 
			
		||||
 
 | 
			
		||||
        // Flush the buffer immediately
 | 
			
		||||
    @ob_flush();
 | 
			
		||||
    flush();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
else {
 | 
			
		||||
    // It's not a range request, output the file anyway
 | 
			
		||||
 | 
			
		||||
/** Output a file */
 | 
			
		||||
function output($path) {
 | 
			
		||||
  $size = filesize($path); // The size of the file
 | 
			
		||||
  $mime = mime_content_type($path);
 | 
			
		||||
  ob_clean();
 | 
			
		||||
  @ini_set('error_reporting', E_ALL & ~ E_NOTICE);
 | 
			
		||||
  @apache_setenv('no-gzip', 1);
 | 
			
		||||
  @ini_set('zlib.output_compression', 'Off');
 | 
			
		||||
  header('Content-type: ' . $mime);
 | 
			
		||||
  if (isset($_SERVER['HTTP_RANGE'])) {
 | 
			
		||||
    range($path, $size, $mime);
 | 
			
		||||
  } else {
 | 
			
		||||
    header('Content-Length: ' . $size);
 | 
			
		||||
 
 | 
			
		||||
    // Read the file
 | 
			
		||||
    @readfile($file);
 | 
			
		||||
 
 | 
			
		||||
    // and flush the buffer
 | 
			
		||||
    @ob_flush();
 | 
			
		||||
    flush();
 | 
			
		||||
  }
 | 
			
		||||
  exit;
 | 
			
		||||
}
 | 
			
		||||
//	}
 | 
			
		||||
      } else {
 | 
			
		||||
?><!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<p>
 | 
			
		||||
<video controls>
 | 
			
		||||
  <source src="<?php echo $URL.'&play=1' ?>" type="<?php echo $mime ?>">
 | 
			
		||||
  <?php /* <source src="<?php echo $URL.'&play=1&convert=webm' ?>" type="video/webm">*/
 | 
			
		||||
/** Replace file extension */
 | 
			
		||||
function ext($file, $newext) {
 | 
			
		||||
  return preg_replace('/\.[^.]*$/', '.'.$newext, $file);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Show a video player for the given video */
 | 
			
		||||
function player($video) {
 | 
			
		||||
  $URL=pageUrl();
 | 
			
		||||
  ?><!DOCTYPE html>
 | 
			
		||||
    <html>
 | 
			
		||||
      <body>
 | 
			
		||||
        <p>
 | 
			
		||||
          <video controls>
 | 
			
		||||
            <?php
 | 
			
		||||
              source($DIR, $video);
 | 
			
		||||
              if ($d=opendir($CONVERT)) {
 | 
			
		||||
      while (false!==($f=readdir($d))) if ($f!='.' && $f!=".." && is_dir($CONVERT.'/'.$f)) {
 | 
			
		||||
        $p=$CONVERT.'/'.$f.'/'.preg_replace('/\.[^.]*$/', '.'.$f, $_GET['video']);
 | 
			
		||||
        if (is_file($p))
 | 
			
		||||
          echo '<source src="'.$URL.'&play=1&mime='.$f.'" type="video/'.$f.'">';
 | 
			
		||||
                while (false!==($f=readdir($d)))
 | 
			
		||||
                  if ($f!='.' && $f!=".." && is_dir($CONVERT.'/'.$f)) {
 | 
			
		||||
                    source($CONVERT.'/'.$f, ext($video, $f), $f);
 | 
			
		||||
                  }
 | 
			
		||||
                closedir($d);
 | 
			
		||||
              }
 | 
			
		||||
  /*<source src="<?php echo $URL.'&play=1&convert=mp4' ?>" type="video/mp4"> */ ?>
 | 
			
		||||
            ?>
 | 
			
		||||
            Your browser does not support the video tag.
 | 
			
		||||
</video><br/>
 | 
			
		||||
[<a href="<?php echo $URL.'&play=1' ?>">Click to Download or copy link to VLC player</a>]
 | 
			
		||||
</p>
 | 
			
		||||
          </video>
 | 
			
		||||
          <br/>
 | 
			
		||||
          [<a href="<?php echo $URL.'&play=1' ?>">Click to Download or
 | 
			
		||||
           copy link to VLC player</a>]
 | 
			
		||||
        </p>
 | 
			
		||||
      </body>
 | 
			
		||||
    </html><?php
 | 
			
		||||
  exit;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
<?php
 | 
			
		||||
/** Show list and preview images of available videos */
 | 
			
		||||
function overview() {
 | 
			
		||||
  ?><html>
 | 
			
		||||
      <head>
 | 
			
		||||
        <title>Videofilme</title>
 | 
			
		||||
        <style>
 | 
			
		||||
          ul {
 | 
			
		||||
            list-style-type: none;
 | 
			
		||||
          }
 | 
			
		||||
    } else {
 | 
			
		||||
?><html>
 | 
			
		||||
<body>
 | 
			
		||||
<p>Video not found: "<code><?php echo htmlentities($_GET["video"]) ?></code>"</p>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
<?php
 | 
			
		||||
          ul li {
 | 
			
		||||
            display: inline-block;
 | 
			
		||||
            text-weight: bold;
 | 
			
		||||
            border: .5ex groove green;
 | 
			
		||||
            padding: 0;
 | 
			
		||||
            margin: .5ex;
 | 
			
		||||
          }
 | 
			
		||||
  } else {
 | 
			
		||||
?><html>
 | 
			
		||||
<head>
 | 
			
		||||
<style>
 | 
			
		||||
ul {list-style-type: none;}
 | 
			
		||||
ul li {display: inline-block; text-weight: bold; border: .5ex groove green; padding: 0; margin: .5ex;}
 | 
			
		||||
table {}
 | 
			
		||||
td.poster {}
 | 
			
		||||
img.poster {height: 210px;}
 | 
			
		||||
img.preview {height: 70px;}
 | 
			
		||||
</style>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<h1>Videofilme</h1>
 | 
			
		||||
<ul>
 | 
			
		||||
<?php
 | 
			
		||||
if ($d=opendir($DIR)) {
 | 
			
		||||
   while (false!==($f=readdir($d))) if (is_file($DIR.'/'.$f)) {
 | 
			
		||||
          table {}
 | 
			
		||||
          td.poster {}
 | 
			
		||||
          img.poster {
 | 
			
		||||
            height: 210px;
 | 
			
		||||
          }
 | 
			
		||||
          img.preview {
 | 
			
		||||
            height: 70px;
 | 
			
		||||
          }
 | 
			
		||||
        </style>
 | 
			
		||||
      </head>
 | 
			
		||||
      <body>
 | 
			
		||||
        <h1>Videofilme</h1>
 | 
			
		||||
        <ul>
 | 
			
		||||
  <?php
 | 
			
		||||
    $URL=pageUrl();
 | 
			
		||||
    if ($d=opendir($DIR)) {
 | 
			
		||||
      while (false!==($f=readdir($d)))
 | 
			
		||||
        if (is_file($DIR.'/'.$f)) {
 | 
			
		||||
          $b=ereg_replace('\.[^.]*', '', $f);
 | 
			
		||||
     $t=ereg_replace(' - ', '<br/>', ereg_replace('[0-9]*-[^ ]*$', '', ereg_replace('( - )?(part|[cC][dD]|[Tt][eE][iI][lL])[0-9]+', '', ereg_replace('_', ' ', htmlentities($b)))));
 | 
			
		||||
     if (preg_match('/.*(part|[cC][dD]|[Tt][eE][iI][lL])([0-9]+).*/', $b, $m))
 | 
			
		||||
          $t=ereg_replace(' - ', '<br/>',
 | 
			
		||||
             ereg_replace('[0-9]*-[^ ]*$', '',
 | 
			
		||||
             ereg_replace('( - )?(part|[cC][dD]|[Tt][eE][iI][lL])[0-9]+', '',
 | 
			
		||||
             ereg_replace('_', ' ', htmlentities($b)))));
 | 
			
		||||
          if (preg_match('/.*(part|[cC][dD]|[Tt][eE][iI][lL])([0-9]+).*/',
 | 
			
		||||
                         $b, $m))
 | 
			
		||||
            $t.='<br/>Teil '.$m[2];
 | 
			
		||||
          $t=ereg_replace('<br/>$', '', ereg_replace('(<br/>)+', '<br/>', $t));
 | 
			
		||||
     echo '<li><table><tr><th colspan="2" class="poster"><a href="'.htmlentities($URL.'?video='.urlencode($f).'&play=1').'">'.$t.'</a></td></tr><tr><td rowspan="3"><a href="'.htmlentities($URL.'?video='.urlencode($f)).'">'.img($b, $b, "poster").'</a></td><td>'.img("$b preview 25%", "$b-25", "preview").'</td></tr><tr><td>'.img("$b preview 50%", "$b-50", "preview").'</td></tr><tr><td>'.img("$b preview 75%", "$b-75", "preview").'</td></tr></table></li>'."\n";
 | 
			
		||||
          echo '<li><table><tr><th colspan="2" class="poster"><a href="'
 | 
			
		||||
            .htmlentities($URL.'?video='.urlencode($f).'&play=1').'">'.$t
 | 
			
		||||
            .'</a></td></tr><tr><td rowspan="3"><a href="'
 | 
			
		||||
            .htmlentities($URL.'?video='.urlencode($f)).'">'
 | 
			
		||||
            .img($b, $b, "poster").'</a></td><td>'
 | 
			
		||||
            .img("$b preview 25%", "$b-25", "preview")
 | 
			
		||||
            .'</td></tr><tr><td>'
 | 
			
		||||
            .img("$b preview 50%", "$b-50", "preview").'</td></tr><tr><td>'
 | 
			
		||||
            .img("$b preview 75%", "$b-75", "preview")
 | 
			
		||||
            .'</td></tr></table></li>'."\n";
 | 
			
		||||
        }
 | 
			
		||||
      closedir($d);
 | 
			
		||||
    }
 | 
			
		||||
  ?>
 | 
			
		||||
        </ul>
 | 
			
		||||
      </body>
 | 
			
		||||
    </html><?php
 | 
			
		||||
  exit;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Check all Parameters */
 | 
			
		||||
checkGet('img');
 | 
			
		||||
checkGet('video');
 | 
			
		||||
checkGet('mime');
 | 
			
		||||
 | 
			
		||||
/* Now $_GET Parameters are save */
 | 
			
		||||
if (isset($_GET["img"])) {
 | 
			
		||||
  output(checkPath($POSTER, $_GET["img"]));
 | 
			
		||||
} elseif (isset($_GET["video"])) {
 | 
			
		||||
  if (isset($_GET["play"])) {
 | 
			
		||||
    if (isset($_GET["mime"])) {
 | 
			
		||||
      output(checkPath($CONVERT.'/'.$_GET["mime"],
 | 
			
		||||
                       ext($_GET["video"], $_GET["mime"])));
 | 
			
		||||
    } else {
 | 
			
		||||
      output(checkPath($DIR, $_GET["video"]));
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    player($_GET["video"]);
 | 
			
		||||
  }
 | 
			
		||||
} else {
 | 
			
		||||
  overview();
 | 
			
		||||
}
 | 
			
		||||
?>
 | 
			
		||||
</ul>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
<?php } ?>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user