Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem PHP czy serwer?
Forum PHP.pl > Forum > Przedszkole
stroju
Mam taki kod do systemu downloadu, i wszystko z punktu widzenia kodu i pomysł€ działa ok, jednak jest problem z plikami rar i zip, a mianowicie po ściągnięciu są uszkodzone, oraz większe pliki ściągają się tylko do 7,2 MB i przerywa. Natomiast na innym serwerze nie ma problemu z uszkodzonymi archiwami.

Jaka może być przyczyna takiego problemu i gdzie szukać rozwiązania??

  1. <?php
  2. $size = filesize('download/files/'.$row['file_url']);
  3.                                $filename = basename('download/files/'.$row['file_url']);
  4.                                
  5.                                                $tab = explode(".", $filename);
  6.                                                     $roz = count($tab);
  7.                         $roz = $tab[$roz-1];
  8.                        
  9.        switch( $roz )    
  10.        {
  11.             case "pdf": $ctype="application/pdf"; break;
  12.             case "exe": $ctype="application/octet-stream"; break;
  13.             case "zip": $ctype="application/zip"; break;
  14.            //case "rar": $ctype="application/x-rar-compressed"; break;
  15.             case "doc": $ctype="application/msword"; break;
  16.             case "xls": $ctype="application/vnd.ms-excel"; break;
  17.             case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
  18.             case "gif": $ctype="image/gif"; break;
  19.             case "png": $ctype="image/png"; break;
  20.             case "jpeg":
  21.             case "jpg": $ctype="image/jpg"; break;
  22.             case "mp3": $ctype="audio/mpeg"; break;
  23.             case "wav": $ctype="audio/x-wav"; break;
  24.             case "mpeg":
  25.             case "mpg":
  26.             case "mpe": $ctype="video/mpeg"; break;
  27.             case "mov": $ctype="video/quicktime"; break;
  28.             case "avi": $ctype="video/x-msvideo"; break;
  29.  
  30.             case "php":
  31.             case "htm":
  32.             case "html": die("<b>Cannot be used for ". $roz ." files!</b>"); break;
  33.  
  34.             default: $ctype="application/force-download";
  35.        }
  36.        
  37.         if (!empty($_SERVER['HTTP_RANGE'])) {    
  38.            $regex = '/^bytes=([0-9]*)-([0-9]*)/';
  39.            preg_match($regex, $_SERVER['HTTP_RANGE'], $matches);
  40.        }
  41.        
  42.        $seek_end = (empty($matches[2])) ? ($size - 1) : min((integer) $matches[2] ,($size - 1));
  43.        $seek_start = (empty($matches[1]) OR $seek_end < (integer) $matches[1]) ? 0 : max((integer) $matches[1],0);
  44.        if ($seek_start > 0 OR $seek_end < ($size - 1)) header('HTTP/1.1 206 Partial Content');
  45.       header('Accept-Ranges: bytes');
  46.        header("Content-Range: bytes $seek_start-$seek_end/$size");
  47.        header('Content-Length: '.($seek_end - $seek_start + 1));            
  48.  
  49.        header("Cache-Control: max-age=60");
  50.        header("Cache-Control: private");
  51.        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');  
  52.        header("Content-Description: File Transfer");
  53.  
  54.  
  55.        header("Content-Type: $ctype");
  56.  
  57.        header("Content-Disposition: attachment; filename=\"$filename\"");
  58.        header("Content-Transfer-Encoding: binary");
  59.        
  60.        
  61.        $offset = $seek_start;
  62.            $fp = @fopen("download/files/".$row['file_url'], "rb");
  63.            $mqr = get_magic_quotes_runtime();
  64.            set_magic_quotes_runtime(0);
  65.            $chunksize = 60*1024;
  66.            if ($offset) fseek($fp, $offset);
  67.            while($fp && !feof($fp)) {
  68.                @set_time_limit(0);
  69.                print (fread($fp));
  70.                flush();
  71.                usleep(0.25*1000000);
  72.            }
  73.            set_magic_quotes_runtime($mqr);
  74.            fclose($fp);
  75. ?>


Na bardzo podobnym kodzie działa dodatek do joomli remository i on również na moim serwerze ściąga uszkodzone archiwa. Nie mogłęm znaleść takiego przypadku nigdzie.
erix
Cytat
po ściągnięciu są uszkodzone, oraz większe pliki ściągają się tylko do 7,2 MB i przerywa.

Podejrzewam, że masz ustawiony za mały limit pamięci dla skryptu, prawdopodobnie masz 8 MiB.
stroju
mam plik php ini i jest 128 MB, i działa bo miałem problem z pętlą i był ten komunikat i więc zwiększyłem, także to co innego, no i druga kwestia to co z tymi archiwami, bo nawet jak plik ma 200KB to rozmiarowo się wszystko zgadza a jednak jest uszkodzony
erix
  1. <?php
  2. //case "rar": $ctype="application/x-rar-compressed"; break;
  3. ?>

Czemu masz to skomentowane? Jeśli nie ustawisz binarnego MIME, to nie dziw się, że są błędy... W ostateczności, możesz ustawić application/octet-stream.
stroju
ale to nie ma wpływu, bo w kodzie remository na którym działa poprawnie i zip i rar na innych serwerach nie ma formatu rar, a i z tym testowałem i działało również niepoprawnie

brak rozwiązania??
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.