2010-07-30 2 views
1

J'utilise une variante du familier readfile_chunked dans la tentative de téléchargement des fichiers plus volumineux:php: readfile_chunked pas rinçage derniers 2830 octets de fichier 29353KB

function readfile_chunked($filename) 
    { 
      $chunk_size = 1*(1024*1024); // how many bytes per chunk 
      $buffer = ''; 
      $handle = fopen($filename, 'rb'); 
      if ($handle === false) 
      { 
        return false; 
      } 

      while (!feof($handle)) 
      { 
        $buffer = fread($handle, $chunk_size); 
        print $buffer; 
        ob_flush(); 
        flush(); 
        sleep(1); 
      } 
      $status = fclose($handle); 
      return $status; 
    } 

petits fichiers fonctionnent bien, mais ce fichier plus volumineux manque les 2830 derniers octets.

Répondre

0

J'ai trouvé le problème. sous le fichier php.ini, assurez-vous de définir implicit_flushing sur On. J'ai toujours le code de vidage explicite après chaque ligne sortie cependant.

+0

J'ai également veillé à ce que tous les paramètres zlib soient mis en commentaire. Je les avais initialement définis quand je pensais en avoir besoin pour l'utilitaire ZipArchive. – Shane

+0

Juste comme une note pour les futures personnes qui regardent cela, mettre 'implicit_flush' à' On' peut avoir des implications de performances assez sévères. Utilisez-le comme un outil de débogage, mais ne le laissez pas en production. Appelez 'flush()' après les choses dont vous avez besoin de vider à la place, à la place. – nojak

Questions connexes