Impossible d’afficher la progression du téléchargement du fichier depuis le nouveau serveur (a fonctionné sur le serveur précédent)

J’ai développé une application iPad qui télécharge des fichiers PDF en utilisant ASIHTTPRequest. J’ai utilisé le délégué de progression pour afficher une barre de progression pour l’utilisateur montrant la progression du téléchargement du fichier. Voici le code de configuration ASIHTTPRequest.

request = [ASIHTTPRequest requestWithURL:url]; [request setShouldContinueWhenAppEntersBackground:YES]; [request setDownloadDestinationPath:issue.pdfFilepath]; [request setDownloadProgressDelegate:vc.progressView]; request.showAccurateProgress = YES; [request setDelegate:self]; [request startAsynchronous]; 

Cela a fonctionné à merveille en lisant depuis mon serveur de développement (“bon serveur”). Cependant, il est temps de déplacer le côté serveur de cette application sur le serveur de mon client (“mauvais serveur”). J’ai tout déplacé et je peux toujours télécharger le PDF avec succès, mais la barre de progression ne se met pas à jour tant que le téléchargement n’est pas terminé (par opposition au téléchargement).

Voici le PHP que j’ai utilisé pour sortir le PDF: (Veuillez noter que j’incrémente également un nombre de vues, etc. dans ma firebase database en fonction de l’URL demandée, donc je ne peux pas simplement accéder au PDF directement depuis l’application. sortir le PDF à partir d’un script PHP.)

 header('Content-type: application/pdf'); header('Content-Disposition:inline filename="downloaded.pdf"'); header('Content-Length: '.remote_filesize($pdfUrl) ); readfile($pdfUrl); 

J’ai été en mesure de déterminer que l’application ne met pas à jour la barre de progression car l’application ne connaît pas initialement la taille totale du fichier PDF. Je l’ai déterminé en ouvrant les deux fichiers dans Safari.

  • En ouvrant l’URL du “bon serveur”, la barre d’état affiche “terminé 1.4 de 20,3 Mo”.
  • Ouvrez l’URL du “mauvais serveur”, la barre d’état affiche “terminé 1,4 Mo de?”.

J’ai vérifié et ma fonction remote_filesize () renvoie 21331445 (environ 20 Mo) sur les deux serveurs.

Donc, ma conclusion à ce stade est que pour une raison quelconque, le “mauvais serveur” ne définit pas correctement l’en-tête Content-Length, même si je l’ai spécifié. Y at-il un paramètre dans le fichier php.ini qui pourrait empêcher cela? Quelqu’un peut-il offrir d’autres suggestions sur la façon de résoudre ou de résoudre ce problème plus loin?

Merci!

Mise à jour 18/05/11

Grâce à l’excellente suggestion d’AJ d’inspecter les en-têtes dans Firefox, j’ai constaté que le “mauvais serveur” utilisait la compression gzip et ne définissait pas mon Conent-Length. Voici la comparaison:

Bon serveur

 Server: Apache X-Powered-By: PHP/5.3.3 Content-Disposition: inline filename="downloaded.pdf" Content-Length: 21331445 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: application/pdf 200 OK 

Mauvais serveur

 Server: Apache X-Powered-By: PHP/5.2.17 Content-Disposition: inline filename="downloaded.pdf" Vary: Accept-Encoding Content-Encoding: gzip Keep-Alive: timeout=10, max=30 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: application/pdf 200 OK 

J’ai trouvé des articles suggérant de désactiver gzip en s’assurant que “output_buffering = Off” et “zlib.output_compression = Off” dans le fichier php.ini. C’est le cas cependant, et mon phpinfo () des deux serveurs montre que output_buffering et output_compression sont désactivés.

Nous sums certainement sur la bonne voie. Des suggestions sur pourquoi cela est-il en train d’être compressé? Et comment l’empêcher?

Merci!

Mise à jour finale: résolue

J’ai trouvé un forum sur le site Web du fournisseur d’hébergement où quelqu’un a expliqué que gzip a été récemment activé et a expliqué comment l’arrêter. http://www.bluehostforum.com/showthread.php?18996-Turning-off-Gzip

Fondamentalement, j’ai ajouté ce qui suit à mon fichier .htaccess, ce qui désactive la compression gzip. Ensuite, j’obtiens l’en-tête Content-Length et ma barre de progression.

 SetEnv no-gzip dont-vary 

Merci beaucoup!

Juste poster le résultat comme une réponse afin que je puisse marquer la question comme une réponse. Merci à tous pour les commentaires utiles!

J’ai trouvé un forum sur le site Web du fournisseur d’hébergement où quelqu’un a expliqué que gzip a été récemment activé et a expliqué comment l’arrêter. http://www.bluehostforum.com/showthread.php?18996-Turning-off-Gzip

Fondamentalement, j’ai ajouté ce qui suit à mon fichier .htaccess, ce qui désactive la compression gzip. Ensuite, j’obtiens l’en-tête Content-Length et ma barre de progression.

 SetEnv no-gzip dont-vary