lundi 20 avril 2015

PHP video/image download script

I am developing video and image downloading site,and i am almost close to complete it,but i am facing 1 problem with downloading code,the code through which video/image will be downloaded is working properly,but the problem is when i play that downloaded video then it shows Windows Media Player cannot play the file. The Player might not support the file type or might not support the codec that was used to compress the file. not only windows media player but all the video players gives error like this,so can anyone tell me,where is the problem?

PHP code:

<?php

session_start();

echo $f = $_SESSION['str'];

define('ALLOWED_REFERRER', '');

define('BASE_DIR','/xampp/htdocs/Testing/');

define('LOG_DOWNLOADS',true);

define('LOG_FILE','downloads.log');

$allowed_ext = array (


  'zip' => 'application/zip',


  'pdf' => 'application/pdf',
  'doc' => 'application/msword',
  'xls' => 'application/vnd.ms-excel',
  'ppt' => 'application/vnd.ms-powerpoint',


  'exe' => 'application/octet-stream',


  'gif' => 'image/gif',
  'png' => 'image/png',
  'jpg' => 'image/jpeg',
  'jpeg' => 'image/jpeg',


  'mp3' => 'audio/mpeg',
  'wav' => 'audio/x-wav',


  'mpeg' => 'video/mpeg',
  'mpg' => 'video/mpeg',
  'mpe' => 'video/mpeg',
  'mov' => 'video/quicktime',
  'avi' => 'video/x-msvideo',
  'm4v' => 'video/m4v',
  '3gp' => 'video/3gp',
  'wmv' => 'video/wmv',

);

if (ALLOWED_REFERRER !== ''
&& (!isset($_SERVER['HTTP_REFERER']) || strpos(strtoupper($_SERVER['HTTP_REFERER']),strtoupper(ALLOWED_REFERRER)) === false)
) {
  die("Internal server error. Please contact system administrator.");
}

set_time_limit(0);

if (!isset($f) || empty($f)) {
  die("Please specify file name for download.");
}

if (strpos($f, "\0") !== FALSE) die('');

$fname = basename($f);

function find_file ($dirname, $fname, &$file_path) {

  $dir = opendir($dirname);

  while ($file = readdir($dir)) {
    if (empty($file_path) && $file != '.' && $file != '..') {
      if (is_dir($dirname.'/'.$file)) {
        find_file($dirname.'/'.$file, $fname, $file_path);
      }
      else {
        if (file_exists($dirname.'/'.$fname)) {
          $file_path = $dirname.'/'.$fname;
          return;
        }
      }
    }
  }

}

$file_path = '';
find_file(BASE_DIR, $fname, $file_path);

if (!is_file($file_path)) {
  die("File does not exist. Make sure you specified correct file name."); 
}

$fsize = filesize($file_path); 

$fext = strtolower(substr(strrchr($fname,"."),1));

if (!array_key_exists($fext, $allowed_ext)) {
  die("Not allowed file type."); 
}

if ($allowed_ext[$fext] == '') {
  $mtype = '';

  if (function_exists('mime_content_type')) {
    $mtype = mime_content_type($file_path);
  }
  else if (function_exists('finfo_file')) {
    $finfo = finfo_open(FILEINFO_MIME); 
    $mtype = finfo_file($finfo, $file_path);
    finfo_close($finfo);  
  }
  if ($mtype == '') {
    $mtype = "application/force-download";
  }
}
else {

  $mtype = $allowed_ext[$fext];
}

if (!isset($_GET['fc']) || empty($_GET['fc'])) {
  $asfname = $fname;
}
else {

  $asfname = str_replace(array('"',"'",'\\','/'), '', $_GET['fc']);
  if ($asfname === '') $asfname = 'NoName';
}

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: $mtype");
header("Content-Disposition: attachment; filename=\"$asfname\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $fsize);

$file = @fopen($file_path,"rb");
if ($file) {
  while(!feof($file)) {
    print(fread($file, 1024*8));
    flush();
    if (connection_status()!=0) {
      @fclose($file);
      die();
    }
  }
  @fclose($file);
}

if (!LOG_DOWNLOADS) die();

$f = @fopen(LOG_FILE, 'a+');
if ($f) {
  @fputs($f, date("m.d.Y g:ia")."  ".$_SERVER['REMOTE_ADDR']."  ".$fname."\n");
  @fclose($f);
}

?>

Aucun commentaire:

Enregistrer un commentaire