[spip-dev] gasp, on se marche sur les pides, cvs ou pas

Qu'est-ce que tu observes ?

C'était il y a 3 mois, donc je ne me souviens plus très bien, mais je
crois que j'ai eu la même démarche à partir de la 2 :

2) le header("Vary: Accept-Encoding") (ligne 251 de inc_version)
donne une erreur ( on peut le neutraliser par un @)

3) Ensuite, j'ai mis un ob_start au-dessus, avant les lignes de
texte. Là effectivement, en cas de compression c'est la page blanche
; sans compression tout fonctionne (y compris var_recherche)

Voyant ça, j'ai pondu mon patch.

4) Encore après, j'ai ajouté un ob_end_flush() juste avant l'appel à
spip. De nouveau tout fonctionne parfaitement (toutefois, il n'y a
pas de compression possible - comme avec ton patch).

Bin si, avec mon patch il y a bien compression, c'est justement le
seul cas où il est utile !!! :stuck_out_tongue:

Du coup je ne vois pas bien l'utilité de ton patch : il suffit que
tu fasses flush() avant d'appeler spip ? Détrompe-moi ?

Bin non, car dans ce cas ce que j'ai envoyé avant de faire appel à
SPIP empêche de faire la compression ...

[En revanche je vais ajouter le @ devant l'entete "Vary:" - ça
permet d'utiliser spip, certes sans compression, à l'intérieur d'une
page où se trouvent d'autres trucs.]

J'aime pas les "@", sauf dans les adresses e-mail, mais bon ...

-Nicolas

Bin non, car dans ce cas ce que j'ai envoyé avant de faire appel à
SPIP empêche de faire la compression ...

Ah! Je crois que j'ai compris! Avec ton patch, ce qui est troublant c'est
qu'il sert à faire passer la compression, pas à faire passer ton handler
déclaré en tout premier (alors que, a priori, si tu utilises ob_start(),
c'est pour récupérer la page à la fin et en faire quelque chose...)

Donc voilà le patch que je propose :

if ($flag_obgz) {
    $use_gz = true;

+ // si un ob_ est deja ouvert, non
+ if (ob_get_contents())
+ $use_gz = false;
+
    // special bug de proxy
    if (eregi("NetCache|Hasd_proxy", $HTTP_SERVER_VARS['HTTP_VIA'])) {
        $use_gz = false;
    }

j'ai testé avec une fonction de callback qui coupe la page en deux et
n'envoit que la seconde moitié, c'est très rigolo.

Et la compression me diras-tu ? Eh bien il suffit d'envelopper l'ensemble
d'un ob_start("ob_gzhandler") de plus (au-dessus de ton handler à toi).

J'aime pas les "@", sauf dans les adresses e-mail, mais bon ...

En l'occurrence, c'est plus simple que de tester si la compression a été ou
non activée, et rigoureusement équivalent.

-- Fil

Ah! Je crois que j'ai compris! Avec ton patch, ce qui est troublant
c'est qu'il sert à faire passer la compression, pas à faire passer
ton handler déclaré en tout premier

En effet.

(alors que, a priori, si tu utilises ob_start(), c'est pour
récupérer la page à la fin et en faire quelque chose...)

Et bin justement, là, mon propre ob_start sert uniquement à autoriser
l'utilisation de celui de SPIP, pour bénéficier de la compression.

Comme quoi on peut concevoir un site autour de SPIP là où d'autres
intègrent SPIP dans leur existant ... :wink:

Donc voilà le patch que je propose :

if ($flag_obgz) {
    $use_gz = true;

+ // si un ob_ est deja ouvert, non
+ if (ob_get_contents())
+ $use_gz = false;
+
    // special bug de proxy
    if (eregi("NetCache|Hasd_proxy", $HTTP_SERVER_VARS['HTTP_VIA'])) {
        $use_gz = false;
    }
<<<<<<<
Et la compression me diras-tu ? Eh bien il suffit d'envelopper
l'ensemble d'un ob_start("ob_gzhandler") de plus (au-dessus de ton
handler à toi).

OK, OK ...

j'ai testé avec une fonction de callback qui coupe la page en deux
et n'envoit que la seconde moitié, c'est très rigolo.

Ouais, on peut faire des choses super intéressantes avec ob, c'est
génial ... :wink:

J'aime pas les "@", sauf dans les adresses e-mail, mais bon ...

En l'occurrence, c'est plus simple que de tester si la compression a
été ou non activée, et rigoureusement équivalent.

Le problème est que les "@" cachent les warnings, ce qui est pénible
pour débugguer, mais en l'occurence, ce n'est pas grave sur cette
instruction particulière ... donc bon.

-Nicolas