2010-02-24 6 views
0

Ceci est un impair. Je reconstruis lentement un site web sur un serveur live. Certaines sections du site ont été reconstruites et donc le code est placé dans un sous-répertoire du répertoire personnel (ex:/mysite/newcode).Pourquoi la compression gzip ne fonctionne-t-elle pas?

J'avais gzippé avec succès l'ancien site en utilisant ob_start ("ob_gzhandler"); Donc, j'ai appliqué exactement le même code pour le nouveau code. Cependant, pour une raison étrange, son retour n'est pas gzippé. J'ai vérifié sur http://www.whatsmyip.org/http_compression/ et http://www.gidnetwork.com/tools/gzip-test.php. Je n'arrive pas à comprendre pourquoi le nouveau code ne serait pas gzippé si le gestionnaire gzip est inclus comme l'une des toutes premières lignes (avant toute sortie) sur l'ancien et le nouveau code.

PHP 5.1.6 Apache 2.0 Centos 5

+1

Où appelez-vous 'ob_start'? – Gumbo

Répondre

0

Trouvé le problème, pas sûr si documenté nulle part ...

Si vous utilisez ob_start ("ob_gzhandler"); et vous ce qu'il faut vider votre contenu, vous devez utiliser ob_flush(), pas flush(). L'utilisation de flush va éliminer la compression.

+0

vous devriez utiliser ob_end_flush() ou ob_end_clean() une fois que vous avez terminé avec la sortie – stillstanding

+0

Mind me demande pourquoi? – David

+0

Je pense que les commentaires sur les docs PHP l'expliquent bien. http://php.net/manual/en/function.ob-end-flush.php Vous pouvez le laisser dans un scénario de demande de page Web simple et il sera appelé automatiquement. Mais PHP et ces fonctions peuvent être utilisées dans d'autres scénarios. En outre, si vous décidez de réutiliser votre code à l'avenir, vous risquez davantage de rencontrer des problèmes si vous n'avez pas nettoyé manuellement. – Liam

1

http://docs.php.net/ob_gzhandler dit: Avant

ob_gzhandler() envoie les données compressées, il détermine quel type de contenu codant pour le navigateur ("gzip", "dégonfler" ou pas du tout) et retournera sa sortie en conséquence.
Serait-ce la cause de votre problème?

edit: Vous pouvez tester cela avec quelque chose comme

function dbg_ob_gzhandler($buffer, $mode) { 
    error_log('dbg_ob_gzhandler invoked'); 
    $rv = ob_gzhandler($buffer, $mode); 
    if (false===$rv) { 
    error_log('client does not support compressed content'); 
    } 
    return $rv; 
} 
ob_start('dbg_ob_gzhandler'); 
+0

J'ai vérifié avec Live HTTP Headers (dans Firefox 3.6) et im passant 'Accept-Encoding: gzip, deflate' sur le serveur. Donc, il devrait sûrement renvoyer des informations compressées. Cependant, il semble que la seule chose qui est compressée est un fichier css aléatoire. – David

+0

Je préférerais tester cela plus si ob_gzhandler() est invoqué du tout sur le côté serveur (si ce n'est que parce que c'est un test si simple). – VolkerK

Questions connexes