J'ai un script de téléchargement qui vérifie un certain nombre de choses et diffuse ensuite un fichier en morceaux de 8 ko.Le délai d'expiration du script PHP se produira-t-il lors d'une instruction print/flush?
La boucle qui fait le transfert ressemble:
$file = @fopen($file_path,"rb");
if ($file) {
while(!feof($file)) {
set_time_limit(60);
print(fread($file, 1024*8));
flush();
if (connection_status()!=0) {
@fclose($file);
die();
}
}
@fclose($file);
}
j'ai écrit une petite application qui simule un téléchargement très lent. Il attend 2 minutes avant de poursuivre le téléchargement. Je m'attendais à ce que le script expire étant donné que j'ai fixé une limite de temps de 60 secondes. Cela n'arrive pas et le téléchargement continue jusqu'à ce qu'il soit terminé. Il semble que le temps passé dans print/flush ne compte pas dans le temps d'exécution du script. Est-ce correct? Existe-t-il un meilleur moyen d'envoyer le fichier au client/navigateur de sorte que je puisse spécifier une limite de temps pour la commande print/flush?
Bien, mais cela ne m'aide pas dans le cas de l'instruction flush qui bloque l'exécution du script. Si elle ne revient jamais, je ne serai pas en mesure de faire le temps de vérifier ... – Christo
Juste pour le bien de l'intérêt. J'ai exécuté le test sur Windows avec IIS, qui n'est pas mort sur moi non plus (il l'a fait après un long moment, mais je m'attends à ce que IIS soit le coupable et non la limite de temps d'exécution de PHP). Le serveur de production exécute Linux & Apache. – Christo