2010-06-23 2 views
0

Ainsi, par exemple, un fichier est téléchargé via ftp et les changements de taille de fichier. Je connais la taille du fichier à l'avance. Alors, comment puis-je faire php pour l'envoyer aux navigateurs des clients, même si le téléchargement du fichier n'est pas terminé et que la taille du fichier ne correspond pas avant la fin de la mise en mémoire tampon. Le code ci-dessous ne met pas à jour le handle et ne voit pas les modifications apportées au fichier. Je pourrais passer fopen à chaque fois mais peut-être qu'il y a une bonne façon? MerciComment est-ce que je fais des téléchargements de fichier de php de dossier incomplet?

$buffer = ''; 
$cnt =0; 
$handle = fopen($filename, 'rb'); 
if ($handle === false) { 
    return false; 
} 
while ($cnt < $totalSize) { 
    $buffer = fread($handle, 2048); 
    echo $buffer; 
    ob_flush(); 
    flush(); 
    $bufferLen = strlen($buffer); 
    $cnt += $bufferLen; 
    if(!$bufferLen) sleep(1); 
} 
fclose($handle); 

Répondre

0

Cela vous aidera-t-il si vous fermez et rouvrez votre fichier? Ensuite, vous pouvez chercher où vous vous êtes arrêté et continuer à pousser le reste du fichier.

Essayez d'ajouter quelque chose comme ceci après cnt + = $ bufferLen;

if(feof($handle) && ($cnt < $totalSize)) { 
    fclose($handle); 
    sleep(1); 
    $handle = fopen($filename, 'rb'); 
    fseek($handle, $cnt); 
} 

Supprimez l'instruction if(!bufferLen) sleep(1);.

+0

c'est bien, merci –

Questions connexes