Pourquoi PHP gzuncompress() fonction qui peut aller mal?
PHP dispose de sa propre fonction pour travailler avec les archives gzip. J'ai écrit le code suivant:
error_reporting(E_ALL);
$f = file_get_contents('http://spiderbites.nytimes.com/sitemaps/www.nytimes.com/sitemap.xml.gz');
echo $f;
$f = gzuncompress($f);
echo "<hr>";
echo $f;
Première echo normalement sorties le fichier compressé avec le bon en-tête (au moins deux premiers octets sont corrects). Si je devais télécharger ce fichier avec mon navigateur, je peux le décompresser facilement.
Cependant gzuncompress jeté Warning: gzuncompress(): data error in /home/path/to/script.php on line 5
Quelqu'un peut-il m'indiquer la bonne direction pour résoudre ce problème?
EDIT:
La partie de la fonction phpinfo() de sortie
Vous pouvez utiliser ob_gzhandler() pour permettre à PHP de faire le travail pour vous à l'aide parce que la fonction gzuncompress() retournera une erreur si les données non compressées est plus que 32768 fois la longueur de la compression de données d'entrée ou de plus que le paramètre facultatif longueur. Ou vous pouvez utiliser le paramètre optionnel pour définir la longueur. Cela devrait être une solution facile.
dans mon cas, la taille du fichier est 4169 (compressé) / 88406 (non compressé) de sorte que le ratio est loin de 32768 (réel ratio est d'environ 21).
avez-vous modifié le php.ini et activé le zip bibliothèques? si vous n'avez pas le faire et de le redémarrer votre serveur web après l'avoir fait pour prendre les modifications que vous avez apportées.
J'ai inclus la fonction phpinfo() capture d'écran pour faire clair sur ce sujet. Comme je peux voir, tout est permis. Droit?
Regardez mario réponse.
dans mon cas, la taille du fichier est 4169 (compressé) / 88406 (non compressé) de sorte que le ratio est loin de 32768 (réel ratio est d'environ 21).
avez-vous modifié le php.ini et activé le zip bibliothèques? si vous n'avez pas le faire et de le redémarrer votre serveur web après l'avoir fait pour prendre les modifications que vous avez apportées.
J'ai inclus la fonction phpinfo() capture d'écran pour faire clair sur ce sujet. Comme je peux voir, tout est permis. Droit?
Regardez mario réponse.
OriginalL'auteur Vlada Katlinskaya | 2014-12-29
Vous devez vous connecter pour publier un commentaire.
Ou vous pouvez simplement utiliser le droit de la fonction de décompression,
gzdecode()
.Testé: ça marche! Merci beaucoup! Savez-vous pourquoi
gzuncompress()
fonction se comporte de cette façon?fonctionne sur le soi-disant "zlib" format. Alors que le "gzdecode" décode gzip gainé de données. Et "gzinflate" serait seulement la première DÉGONFLER algorithme de données. Fondamentalement, chaque de
gzdecode
>gzuncompress
>gzinflate
ajoute un peu plus de méta-données pour les cours d'eau.Notamment, il existe une certaine confusion en raison de début de MSIE/IIS bugs, que certains serveurs envoyer "zlib" flux incorrectement étiquetés comme "gzip" de données. Vous aurez parfois la sonde avec gzuncompress ET gzdecode. C'est pourquoi on peut préférer utiliser PHPs
curl
fonctions de même, qui se gérer cela automatiquement.En fait ces bugs causés raw dégonfler à être envoyé comme zlib ruisseaux. Il n'y avait pas tort tagged gzip ruisseaux.
OriginalL'auteur mario
Que pourrait être une option de pourquoi il ne fonctionne pas.
Essayer avec son code:
Modifier votre code:
Autant que je l'ai testé en local, il ne donne pas l'erreur de plus.
OriginalL'auteur GiamPy