[resolu]JPCache v2.0 rc1 - Script php de Cache

Bonjour,

Je souhaite utilisé un script de Cache pour mon site dynamique.

J’en ai essayé un pas térrible au début, ensuite, j’ai entendu parlé beaucoup de JPCache. Je me penche donc sur ce script. Et je vois par la meme ocasion que Clubic.com utilise ce script (on peut le voir dans le header renvoyé avec le pluging developper pour Firefox) et il utilise JPCache avec son module MySQL.

Je décide donc de telechargé la meme version qu’ils utilisent, a savoir la v2.0 rc1.

Je lis le Readme qui indique :


0) Decide whether to go for the file- or database-storage.
    1) Edit jpcache.php and change the includedir-setting to the directory
       which contains the jpcache programfiles.
    2) Edit jpcache-config.php and change the configurationsettings. 
       Do not forget to uncomment the JPCACHE_TYPE setting for the storagemode
       you want to use.
       If you choose for filebased-storage, make sure that the directory is
       writeable for the apache-user (normally nobody)
       If you use the mysql-storage, enter the correct settings for accessing 
       the database.
    3) If you use the sql-version, create the database that is used for storing
       the cachedata (default name: "jpcache"). Within this database, create 
       the required table as provided in script.sql.
       You can use the mysql-client for this:
       mysql <db-name> < script.sql
       or you can use phpMyAdmin <http://phpwizard.net/phpMyAdmin> to read
       in the dump.
    4) You can easily test jpcache with the following file:
       <?php
        require "jpcache.php";
        echo time();
        phpinfo();
       ?>
       Request this file from you browser, refresh, and see if the time written
       is the same. 
    5) If everything works, edit your php-files and add (directly to the top):
            <? $cachetimeout=<X>; require "/path/to/jpcache/jpcache.php" ?>
       - Replace <X> with the number of seconds that the page should be cached.
       By default, pages will be cached for 900 seconds.
       - Setting <X> to -1 will disable caching and will only do content 
       encoding. Use this for pages which can not be cached, like personalized
       pages or with content that is always changing. Also when the page is 
       returning headers (like cookies in php), set the cachetimeout to -1, as
       header-information is not cached.
       - Setting <X> to 0 will create a non-expiring cache. This can be used 
       for pages that are not dynamic in content, but are heavy to generate.

  1. je décide de faire un cache par ecriture de fichier sur le serveur

  2. j’edit le fichier jpcache.php j’indique le repertoire de jpcache par rapport a la racine du site, donc /jpcache

  3. j’edit le fichier jpcache-config.php et je décommente le type de cache, donc file.
    le 3) me concerne pas, c’est pour mysql.

  4. je test donc :

    &lt;?php
     require &quot;jpcache/jpcache.php&quot;;
     echo time();
     phpinfo();
    ?&gt;
    

Et la les ennui commence, j’ai ce message d’erreur :

 Warning: Cannot modify header information - headers already sent by (output started at /web/test2.php:1) in /web/jpcache/jpcache-main.php on line 153

La ligne en question du code est :

        // Output header to recognize version
        header("X-Cache: jpcache v".$GLOBALS["JPCACHE_VERSION"].
                " - ".$GLOBALS["JPCACHE_TYPE"]);

C’est la partie qui je crois, envoie l’entete a la page.

J’ai également cree le repertoire /tmp/cache/ suite à ce commentaire dans jpcache-config.php :

    $JPCACHE_DIR          = "/tmp/jpcache"; // Directory where jpcache must store 
                                   // generated files. Please use a dedicated
                                   // directory, and make it writable

Mais cela ne change rien, rien ne s’ecrit dans le repertoire (j’ai bien mis en 777), et si je test avec MySQL, aucun changement, le message d’erreur reste avant le meme. A croire qu’il faut absolument trouvé pourquoi l’envoi du header marche pas avant de se penché sur mysql… Si quelqu’un a déja utilisé JPCache, ou a une idée du probleme, je vous remercie d’avance.

Ps, j’ai regardé sur le site officiel, y’a rien qui parle de ce probleme, j’ai également chercher avec Google d’autre explications, mais je tombe que sur des Bench… [decu]

Merci

vi enfin /tmp/cache c’est un dossier qui est situé à la racine. Essaye tmp/cache, ou un truc du genre…

Il est a la racine. :whistle:

ton serveur tourne sur quel système ? parce que /tmp/jpcache, c’est typiquement pour de l’unix / linux ça :smiley:

euh sinon pour ton problème d’header, est-ce que l’output_buffering est activé ou pas dans ta configuration de PHP ? car je crois que pour que ça puisse fonctionner, il faut que tu l’active …
ton problème vient du fait que les headers HTTP ont déjà été envoyé avant ton script …
'fin ce qui est bizarre, c’est que y’a pas vraiment de problème identique répertorié sur le site officiel :confused: … tu n’as rien mis d’autres avant le script exemple qu’ils ont envoyé ? il n’y a que ça dans le fichier ?

Hi, merci de ta réponse. C’est un serveur apache sur linux bien entendu :wink:

Il tourne sous Debian.

Quelle est l’option qui permet de voir l’output buffering dans le php info ? (j’imagine ?)

Le message d’erreur oui dit que quelque chose est déja envoyé, seulement dans ma page d’exemple, tu l’a bien vu, il y’a ceci :

<?php
require "jpcache/jpcache.php";
echo time();
phpinfo();
?>

C’est l’exemple donné dans le script lui meme pour testé. J’ai essayé sur une autre page vierge, avec un simple texte, j’ai le meme probleme.

Je viens de trouvé ceci dans le php info :

open_basedir no value no value
output_buffering no value no value
output_handler no value no value

Le probleme vient donc de la ?

Edit: Je viens de penssé, j’ai utilisé un script php hier qui utilisais ses fonction, et ela marchais bien pour la creation du fichier et la bufférisation…

L’erreur generé par le Header est bizar quand meme :frowning:

non pas forcèment … là j’ai un script qui fait un header() après avoir écrit du texte …


Test
<?php header("Location: /"); ?>

sur un serveur avec output_buffering=on, pas d’erreur et l’header s’envois correctement (la redirection est effectué) …
sur un serveur avec output_buffering=off, erreur …

tu est sur qu’il n’y a rien d’autres dans le fichier .php ? pas même un espace ou un truc du genre ?

EDIT2 : C BON CA MARCHEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE, MERCIIIIIIIIIII

Le probleme venait aussi du fait que le script datait un peut, avec les variables serveur utilisé coté PHP, j’ai indiqué un DOCUMENT_ROOT sur le /tmp/jpcache et la, au miracle :slight_smile:

Merci encore à toi

Tu sais que je t’aime toi !

Dans ma page, en effet, cetait :

<?php
require "jpcache/jpcache.php";
echo time();
phpinfo();
?>

(Edit, on ne voit pas les espace sur la gauche, bref, c’etait décalé)

Aulieu d’etre :

<?php
require "jpcache/jpcache.php";
echo time();
phpinfo();
?>

Pffffffffffffffffffffffffffffffffffff
Pfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
et RE PFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Il n’y a plus d’erreur, mais aucun fichier ne s’ecrit dans le repertoire /tmp/cache.

Quand tu dis que tu as essayé, tu as essayer JPcache ou juste un script de bufferisation ?

Maintenant, dans l’entete envoyé, j’ai bien :

X-Powered-By: PHP/4.3.10-15
X-Cache: jpcache v2.0.0rc1 - file

Mais je n’ai aucun fichier cache dans le repertoire /tmp/jpcache ou JPcache doit écrire…

Merci encore pour ce petit détail qui change tout… :slight_smile:

:hello:

l’erreur de l’espace est trèèèsss commune … c’est d’ailleurs après avoir passer une semaine à chercher cette espace à la rognutudjuuu dans mon groupware que je me suis juré de ne plus jamais la refaire :oui: …

non, un script de bufferisation (celui dont y’a le code plus haut) …
je ne connaissais pas JPcache jusqu’à ce que tu en parles ici, et ça a l’air d’être assez intéressant … je l’ai noter dans les futurs scripts à tester, pour voir si ça peut nous faire un gain réel sur nos applications :jap: …

Hi, et oui cet espace, jte jure que je vais pas le refaire 2 fois lol.

jpcache, je vien de le testé la, il marche niquel crome !!

il cree bien les fichier, et les reactualise au bout de 900 sec (par defaut)

en tout cas, 200% niquel chez moi :slight_smile:

merci encore

et Clubic meme utilise JPCache avec le module MySQL sur l’index du site :slight_smile:

En-têtes HTTP (réponses) - http://www.clubic.com/

Date: Thu, 18 Aug 2005 18:07:57 GMT
Server: Apache-AdvancedExtranetServer/2.0.53 (Mandrakelinux/PREFORK-9mdk) PHP/4.3.10
X-Powered-By: PHP/4.3.10
X-Cache: jpcache v2.0.0rc1 - mysql
X-CacheDebug-1: Cache scriptkey is set to /home/upload/public/clubic/index.php
X-CacheDebug-2: Cache varkey is set to
X-CacheDebug-3: Cache varkey is set to a:0:{}
X-CacheDebug-4: Cachekey is set to 3f5c7bff5932333b8fffe87ce9fb1fe2
X-CacheDebug-5: Cachedata for 3f5c7bff5932333b8fffe87ce9fb1fe2 found, data restored
Etag: "jpd-1778853542.53699"
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html

200 OK