waarom error na downloaden compressie bestand

Status
Niet open voor verdere reacties.

phobia

Terugkerende gebruiker
Lid geworden
4 sep 2006
Berichten
1.777
Ik heb een stuk code gemaakt, met als doel bestanden van mijn server te kunnen upload en download
Upload geen probleem en het rar-bestand staat goed op de server (ik heb via de ftd bestand van server gehaald en kan hem gewoon uitpakken).

Maar als ik hetzelfde bestand via mijn site download met de volgende code. Dan is het bestand beschadigd en kan hem niet meer uitpakken!

Mijn code:
PHP:
<?php

$path = $_SERVER['DOCUMENT_ROOT']."/wow/";
$fullPath = $path.$_GET['download_file'];
 
if ($fd = fopen ($fullPath, "r")) {
    $fsize = filesize($fullPath);
    $path_parts = pathinfo($fullPath);
    $ext = strtolower($path_parts["extension"]);
    switch ($ext) {
        case "pdf":
        header("Content-type: application/pdf");
        header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
        break;
        default;
        header("Content-type: application/octet-stream");
        header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
    }
    header("Content-length: $fsize");
    header("Cache-control: private");
    while(!feof($fd)) {
        $buffer = fread($fd, 2048);
        echo $buffer;
    }
}
fclose ($fd);
exit;
?>
 
Ik denk dat het aan u contenttype ligt

ref:http://be2.php.net/manual/en/function.header.php
PHP:
<?php
    switch( $file_extension ) {
          case "pdf": $ctype="application/pdf"; break;
      case "exe": $ctype="application/octet-stream"; break;
      case "zip": $ctype="application/zip"; break;
      case "doc": $ctype="application/msword"; break;
      case "xls": $ctype="application/vnd.ms-excel"; break;
      case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
      case "gif": $ctype="image/gif"; break;
      case "png": $ctype="image/png"; break;
      case "jpeg":
      case "jpg": $ctype="image/jpg"; break;
      case "mp3": $ctype="audio/mpeg"; break;
      case "wav": $ctype="audio/x-wav"; break;
      case "mpeg":
      case "mpg":
      case "mpe": $ctype="video/mpeg"; break;
      case "mov": $ctype="video/quicktime"; break;
      case "avi": $ctype="video/x-msvideo"; break;

      //The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
      case "php":
      case "htm":
      case "html":
      case "txt": die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;

      default: $ctype="application/force-download";
    }
kijk ook naar het volgende
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");
header("Content-Transfer-Encoding: binary");

Ik heb een stuk code gemaakt, met als doel bestanden van mijn server te kunnen upload en download
Upload geen probleem en het rar-bestand staat goed op de server (ik heb via de ftd bestand van server gehaald en kan hem gewoon uitpakken).

Maar als ik hetzelfde bestand via mijn site download met de volgende code. Dan is het bestand beschadigd en kan hem niet meer uitpakken!

Mijn code:
PHP:
<?php

$path = $_SERVER['DOCUMENT_ROOT']."/wow/";
$fullPath = $path.$_GET['download_file'];
 
if ($fd = fopen ($fullPath, "r")) {
    $fsize = filesize($fullPath);
    $path_parts = pathinfo($fullPath);
    $ext = strtolower($path_parts["extension"]);
    switch ($ext) {
        case "pdf":
        header("Content-type: application/pdf");
        header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
        break;
        default;
        header("Content-type: application/octet-stream");
        header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
    }
    header("Content-length: $fsize");
    header("Cache-control: private");
    while(!feof($fd)) {
        $buffer = fread($fd, 2048);
        echo $buffer;
    }
}
fclose ($fd);
exit;
?>
 
PHP:
$path = $_SERVER['DOCUMENT_ROOT']."/wow/files/";
$file = $path.$_GET['download_file'];
	$filename = basename($file);
    header("Content-Type: application/force-download");
    if(strstr($_SERVER["HTTP_USER_AGENT"], "MSIE")){
        header("Content-Disposition: filename=$filename");
    }else{
        header("Content-Disposition: attachment; filename=$filename");
    }
    $fp = fopen($file,'r');
    fpassthru($fp);
    exit;

Dit heb ik gevonden en werkt perfect. Denk dat ik een overkill had aan headers
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan