2015-04-24 4 views
2

Долгое время Lurker первый раз плакат,PHP ReadFile() и Еореп() поврежденных/коррумпированы загрузки

Im сделано потянув меня за волосы над этим, так что я понял, я бы проглотить гордость и попросить экспертов, я прочитали более 20 аналогичных вопросов здесь и пробовали все исправления решений, но я получаю те же результаты.

Im используя PHP для пользователей, чтобы загрузить элементы, однако я попробовал ReadFile и Еореп но КАЖДЫЙ скачать испорчен, иногда 0 в размерах другие времена правильный (МОГ) размер, но всегда поврежден или поврежден

Может кто-то загляните в этот код и скажите мне, что с ним не так, ive вымыл его так много раз сейчас, вероятно, просто не хватает чего-то досконально простого, ..... как обычно

Любая помощь была бы принята с благодарностью.

(содержание /loap.php может быть показано при необходимости)

EDIT: Решено Только быстрое обновление для тех, кто наткнулся на это, мне удалось получить эту работу ...... Я попробовал много разных вариаций определенных команд, но, похоже, я пропустил попытку с помощью «ob_clean()» и «ob_end_flush()» с помощью fopen(), .. Он сделал трюк, и, как я ожидал, это было простое исправление Спасибо за помощь извилистых, вы тыкали в моем вдохе;)

<?php 
 
require_once('../secura/load.php'); 
 

 
function get_remote_file_size($url, $readable = true){ 
 
    $parsed = parse_url($url); 
 
    $host = $parsed["host"]; 
 
    $fp = @fsockopen($host, 80, $errno, $errstr, 20); 
 
    if(!$fp) return false; 
 
    else { 
 
     @fputs($fp, "HEAD $url HTTP/1.1\r\n"); 
 
     @fputs($fp, "HOST: $host\r\n"); 
 
     @fputs($fp, "Connection: close\r\n\r\n"); 
 
     $headers = ""; 
 
     while([email protected]($fp))$headers .= @fgets ($fp, 128); 
 
    } 
 
    @fclose ($fp); 
 
    $return = false; 
 
    $arr_headers = explode("\n", $headers); 
 
    foreach($arr_headers as $header) { 
 
\t \t \t $s = "Content-Length: "; 
 
     if(substr(strtolower ($header), 0, strlen($s)) == strtolower($s)) { 
 
      $return = trim(substr($header, strlen($s))); 
 
      break; 
 
     } 
 
    } 
 
    
 
    return $return; 
 
} 
 

 
function get_ext($name) 
 

 
{ 
 

 
\t $fn = get_basename($name); 
 

 
\t return (strpos($fn, '.') ? strtolower(substr(strrchr($fn, '.'), 1)) : ''); 
 

 
} 
 
function get_basename($name) 
 

 

 

 
{ 
 

 
\t return basename(str_replace('\\', '/', $name)); 
 

 
} 
 

 
function get_filesize_unit($size) 
 

 

 

 
{ 
 

 
\t $size = max(0, $size); 
 

 
\t static $u = array('&nbsp;B', 'KB', 'MB', 'GB'); 
 

 
\t for ($i=0; $size >= 1024 && $i < 4; $i++) 
 

 
\t { 
 

 
\t \t $size /= 1024; 
 

 
\t } 
 

 
\t return number_format($size, 1).' '.$u[$i]; 
 

 
} 
 

 

 

 
/////////////////////////////////////////////////////////////////////////////////////////////// 
 

 
function find_mime_type($ext) 
 

 
{ 
 

 
\t static $mime_types = array(
 

 
\t \t 'application/andrew-inset' => array('ez'), 
 

 
\t \t 'application/mac-binhex40' => array('hqx'), 
 

 
\t \t 'application/mac-compactpro' => array('cpt'), 
 

 
\t \t 'application/mathml+xml' => array('mathml'), 
 

 
\t \t 'application/msword' => array('doc'), 
 

 
\t \t 'application/octet-stream' => array('bin', 'dms', 'lha', 
 

 
\t \t \t 'lzh', 'exe', 'class', 'so', 'dll', 'dmg'), 
 

 
\t \t 'application/oda' => array('oda'), 
 

 
\t \t 'application/ogg' => array('ogg'), 
 

 
\t \t 'application/pdf' => array('pdf'), 
 

 
\t \t 'application/postscript' => array('ai', 'eps', 'ps'), 
 

 
\t \t 'application/rdf+xml' => array('rdf'), 
 

 
\t \t 'application/smil' => array('smi', 'smil'), 
 

 
\t \t 'application/srgs' => array('gram'), 
 

 
\t \t 'application/srgs+xml' => array('grxml'), 
 

 
\t \t 'application/vnd.mif' => array('mif'), 
 

 
\t \t 'application/vnd.mozilla.xul+xml' => array('xul'), 
 

 
\t \t 'application/vnd.ms-excel' => array('xls'), 
 

 
\t \t 'application/vnd.ms-powerpoint' => array('ppt'), 
 

 
\t \t 'application/vnd.wap.wbxml' => array('wbxml'), 
 

 
\t \t 'application/vnd.wap.wmlc' => array('wmlc'), 
 

 
\t \t 'application/vnd.wap.wmlscriptc' => array('wmlsc'), 
 

 
\t \t 'application/voicexml+xml' => array('vxml'), 
 

 
\t \t 'application/x-bcpio' => array('bcpio'), 
 

 
\t \t 'application/x-cdlink' => array('vcd'), 
 

 
\t \t 'application/x-chess-pgn' => array('pgn'), 
 

 
\t \t 'application/x-cpio' => array('cpio'), 
 

 
\t \t 'application/x-csh' => array('csh'), 
 

 
\t \t 'application/x-director' => array('dcr', 'dir', 'dxr'), 
 

 
\t \t 'application/x-dvi' => array('dvi'), 
 

 
\t \t 'application/x-futuresplash' => array('spl'), 
 

 
\t \t 'application/x-gtar' => array('gtar'), 
 

 
\t \t 'application/x-hdf' => array('hdf'), 
 

 
\t \t 'application/x-javascript' => array('js'), 
 

 
\t \t 'application/x-koan' => array('skp', 'skd', 'skt', 'skm'), 
 

 
\t \t 'application/x-latex' => array('latex'), 
 

 
\t \t 'application/x-netcdf' => array('nc', 'cdf'), 
 

 
\t \t 'application/x-sh' => array('sh'), 
 

 
\t \t 'application/x-shar' => array('shar'), 
 

 
\t \t 'application/x-shockwave-flash' => array('swf'), 
 

 
\t \t 'application/x-stuffit' => array('sit'), 
 

 
\t \t 'application/x-sv4cpio' => array('sv4cpio'), 
 

 
\t \t 'application/x-sv4crc' => array('sv4crc'), 
 

 
\t \t 'application/x-tar' => array('tar'), 
 

 
\t \t 'application/x-tcl' => array('tcl'), 
 

 
\t \t 'application/x-tex' => array('tex'), 
 

 
\t \t 'application/x-texinfo' => array('texinfo', 'texi'), 
 

 
\t \t 'application/x-troff' => array('t', 'tr', 'roff'), 
 

 
\t \t 'application/x-troff-man' => array('man'), 
 

 
\t \t 'application/x-troff-me' => array('me'), 
 

 
\t \t 'application/x-troff-ms' => array('ms'), 
 

 
\t \t 'application/x-ustar' => array('ustar'), 
 

 
\t \t 'application/x-wais-source' => array('src'), 
 

 
\t \t 'application/xhtml+xml' => array('xhtml', 'xht'), 
 

 
\t \t 'application/xslt+xml' => array('xslt'), 
 

 
\t \t 'application/xml' => array('xml', 'xsl'), 
 

 
\t \t 'application/xml-dtd' => array('dtd'), 
 

 
\t \t 'application/zip' => array('zip'), 
 

 
\t \t 'audio/basic' => array('au', 'snd'), 
 

 
\t \t 'audio/midi' => array('mid', 'midi', 'kar'), 
 

 
\t \t 'audio/mpeg' => array('mpga', 'mp2', 'mp3'), 
 

 
\t \t 'audio/x-aiff' => array('aif', 'aiff', 'aifc'), 
 

 
\t \t 'audio/x-mpegurl' => array('m3u'), 
 

 
\t \t 'audio/x-pn-realaudio' => array('ram', 'ra'), 
 

 
\t \t 'application/vnd.rn-realmedia' => array('rm'), 
 

 
\t \t 'audio/x-wav' => array('wav'), 
 

 
\t \t 'chemical/x-pdb' => array('pdb'), 
 

 
\t \t 'chemical/x-xyz' => array('xyz'), 
 

 
\t \t 'image/bmp' => array('bmp'), 
 

 
\t \t 'image/cgm' => array('cgm'), 
 

 
\t \t 'image/gif' => array('gif'), 
 

 
\t \t 'image/ief' => array('ief'), 
 

 
\t \t 'image/jpeg' => array('jpeg', 'jpg', 'jpe'), 
 

 
\t \t 'image/png' => array('png'), 
 

 
\t \t 'image/svg+xml' => array('svg'), 
 

 
\t \t 'image/tiff' => array('tiff', 'tif'), 
 

 
\t \t 'image/vnd.djvu' => array('djvu', 'djv'), 
 

 
\t \t 'image/vnd.wap.wbmp' => array('wbmp'), 
 

 
\t \t 'image/x-cmu-raster' => array('ras'), 
 

 
\t \t 'image/x-icon' => array('ico'), 
 

 
\t \t 'image/x-portable-anymap' => array('pnm'), 
 

 
\t \t 'image/x-portable-bitmap' => array('pbm'), 
 

 
\t \t 'image/x-portable-graymap' => array('pgm'), 
 

 
\t \t 'image/x-portable-pixmap' => array('ppm'), 
 

 
\t \t 'image/x-rgb' => array('rgb'), 
 

 
\t \t 'image/x-xbitmap' => array('xbm'), 
 

 
\t \t 'image/x-xpixmap' => array('xpm'), 
 

 
\t \t 'image/x-xwindowdump' => array('xwd'), 
 

 
\t \t 'model/iges' => array('igs', 'iges'), 
 

 
\t \t 'model/mesh' => array('msh', 'mesh', 'silo'), 
 

 
\t \t 'model/vrml' => array('wrl', 'vrml'), 
 

 
\t \t 'text/calendar' => array('ics', 'ifb'), 
 

 
\t \t 'text/css' => array('css'), 
 

 
\t \t 'text/html' => array('html', 'htm'), 
 

 
\t \t 'text/plain' => array('asc', 'txt'), 
 

 
\t \t 'text/richtext' => array('rtx'), 
 

 
\t \t 'text/rtf' => array('rtf'), 
 

 
\t \t 'text/sgml' => array('sgml', 'sgm'), 
 

 
\t \t 'text/tab-separated-values' => array('tsv'), 
 

 
\t \t 'text/vnd.wap.wml' => array('wml'), 
 

 
\t \t 'text/vnd.wap.wmlscript' => array('wmls'), 
 

 
\t \t 'text/x-setext' => array('etx'), 
 

 
\t \t 'video/mpeg' => array('mpeg','3gp','mp4', 'mpg', 'mpe'), 
 

 
\t \t 'video/quicktime' => array('qt', 'mov'), 
 

 
\t \t 'video/vnd.mpegurl' => array('mxu', 'm4u'), 
 

 
\t \t 'video/x-msvideo' => array('avi'), 
 

 
\t \t 'video/x-sgi-movie' => array('movie'), 
 

 
\t \t 'x-conference/x-cooltalk' => array('ice') 
 

 
\t); 
 
\t foreach ($mime_types as $mime_type => $exts) 
 
\t { 
 
\t \t if (in_array($ext, $exts)) 
 
\t \t { 
 
\t \t \t return $mime_type; 
 
\t \t } 
 
\t } 
 
\t return 'text/plain'; 
 
} 
 
$id = $_GET['id']; 
 
$error = false; 
 
$error = (!$product->is_product($id)?$products->error:$error); 
 
$error =(!$purchases->is_purchased($_SESSION['uid'],$id)?$purchases->error:$error); 
 
if(!$error){ 
 
$file = $product->details($id); 
 
$filepath = $file['file']; 
 
$fname=get_basename($filepath); 
 
if (fopen($filepath,r) || (file_exists($filepath))){ 
 
if (@filesize($filepath)){ 
 
$fsize =filesize($filepath); 
 
} 
 
else 
 
{ 
 
$fsize = get_remote_file_size($filepath); 
 
} 
 
$ext= get_ext($fname); 
 
$ctype= find_mime_type($ext); 
 
header('Content-Type:'. $ctype); 
 
header('Content-Length: ' . $fsize); 
 
header('Content-Disposition: attachment; filename=' . $fname); 
 
ob_clean(); 
 
$file = fopen($filepath,'r'); 
 
ob_end_flush(); 
 
fpassthru($file); 
 
set_time_limit(0); 
 
}else{ 
 
return 'File Doesn\'t Exist'; } // exist fxn.... 
 
} 
 
echo $error; 
 
?>

+0

Просьба уточнить, где коррупция, на ваш взгляд. Когда вы вытаскиваете файл на свой сервер или когда браузер действительно загружает его? Вы пробовали 'curl' или' file_get_contents() '? – Twisty

+0

Коррупция определенно происходит, когда браузер фактически загружает файл, файлы в порядке и отлично, если я загружаю вручную через ftp и браузер, я еще не пробовал ни одного из них, но, безусловно, буду и дам вам знать, если он будет успешным, спасибо:) –

+0

Просто быстрое обновление для всех, кто наткнулся на это, мне удалось получить эту работу ... Я пробовал много разных вариантов определенных команд, но, похоже, я пропустил попытку с помощью ob_clean() и ob_end_flush() с fopen(), .. Он сделал трюк, и, как я ожидал, это было простое исправление. Спасибо за помощь Twisty, ты ткнул моим вдохновением;) –

ответ

1

Только быстрое обновление для тех, кто наткнулся на это, мне удалось получить эту работу ......

Я пробовал много различных вариантов некоторых команд, но мне кажется, я имел пропустил пытается с ob_clean() и ob_end_flush() с Еореп(), .. он сделал трюк и, как я ожидал, что это было простое исправление

Спасибо за помощь извилистых, вы тыкали в моем вдохе;)

Исправленный и рабочий код обновлено в ОП

+0

Спасибо, коррумпированные загрузки тоже меня пугали. Просто комментируя будущую ссылку, если мне это нужно снова. Цените исправление =) –

0

Убедитесь, что у вас нет никакого кода, выполняемого после последней строки readfile(FILE_NAME)

В моем случае, я должен был добавить die(); или exit(); в последней строке, потому что рамки MVC продолжает оказывать вид после readfile