allatoja Posté 3 Février 2009 Posté 3 Février 2009 (modifié) Bonjour à tous, J'ai construit un site internet qui utilise plusieurs scripts, d'une taille totale de 39Ko. Comme je trouve que c'est un peu trop, j'ai cherché comment réduire leur taille, et trouvé ceci qui a l'air intéressant: http://www.blackotine.fr/non-classe/compre...vascript-et-css Mon problème: je crois avoir suivi scrupuleusement les instructions, et pourtant, cela ne marche pas, ce qui signifie que sur ma page de test les scripts ne fonctionnent pas. J'ai vérifié tous les trucs idiots (y a-t-il des problèmes de majuscules, les chemins d'accès sont-ils les bons, etc). J'utilisais déjà un fichier .ht access qui fonctionne sans problème. J'en suis arrivée à la conclusion que c'est ce fameux fichier combine.php qui est mal configuré. C'est pourquoi je viens chercher de l'aide, car le langage php est du chinois pour moi!!... Quelqu'un pourrait-me dire quels sont les paramètres qu'il faut modifier et adapter à chaque utilisateur?...Merci d'avance! Voilà le code: <?php $cache = true; $cachedir = dirname(__FILE__) . '/cache'; $cssdir = dirname(__FILE__) . '/css'; $jsdir = dirname(__FILE__) . '/javascript'; // Determine the directory and type we should use switch ($_GET['type']) { case 'css': $base = realpath($cssdir); break; case 'javascript': $base = realpath($jsdir); break; default: header ("HTTP/1.0 503 Not Implemented"); exit; }; $type = $_GET['type']; $elements = explode(',', $_GET['files']); // Determine last modification date of the files $lastmodified = 0; while (list(,$element) = each($elements)) { $path = realpath($base . '/' . $element); if (($type == 'javascript' && substr($path, -3) != '.js') || ($type == 'css' && substr($path, -4) != '.css')) { header ("HTTP/1.0 403 Forbidden"); exit; } if (substr($path, 0, strlen($base)) != $base || !file_exists($path)) { header ("HTTP/1.0 404 Not Found"); exit; } $lastmodified = max($lastmodified, filemtime($path)); } // Send Etag hash $hash = $lastmodified . '-' . md5($_GET['files']); header ("Etag: \"" . $hash . "\""); if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && stripslashes($_SERVER['HTTP_IF_NONE_MATCH']) == '"' . $hash . '"') { // Return visit and no modifications, so do not send anything header ("HTTP/1.0 304 Not Modified"); header ('Content-Length: 0'); } else { // First time visit or files were modified if ($cache) { // Determine supported compression method $gzip = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip'); $deflate = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'deflate'); // Determine used compression method $encoding = $gzip ? 'gzip' : ($deflate ? 'deflate' : 'none'); // Check for buggy versions of Internet Explorer if (!strstr($_SERVER['HTTP_USER_AGENT'], 'Opera') && preg_match('/^Mozilla\/4\.0 \(compatible; MSIE ([0-9]\.[0-9])/i', $_SERVER['HTTP_USER_AGENT'], $matches)) { $version = floatval($matches[1]); if ($version < 6) $encoding = 'none'; if ($version == 6 && !strstr($_SERVER['HTTP_USER_AGENT'], 'EV1')) $encoding = 'none'; } // Try the cache first to see if the combined files were already generated $cachefile = 'cache-' . $hash . '.' . $type . ($encoding != 'none' ? '.' . $encoding : ''); if (file_exists($cachedir . '/' . $cachefile)) { if ($fp = fopen($cachedir . '/' . $cachefile, 'rb')) { if ($encoding != 'none') { header ("Content-Encoding: " . $encoding); } header ("Content-Type: text/" . $type); header ("Content-Length: " . filesize($cachedir . '/' . $cachefile)); fpassthru($fp); fclose($fp); exit; } } } // Get contents of the files $contents = ''; reset($elements); while (list(,$element) = each($elements)) { $path = realpath($base . '/' . $element); $contents .= "\n\n" . file_get_contents($path); } // Send Content-Type header ("Content-Type: text/" . $type); if (isset($encoding) && $encoding != 'none') { // Send compressed contents $contents = gzencode($contents, 9, $gzip ? FORCE_GZIP : FORCE_DEFLATE); header ("Content-Encoding: " . $encoding); header ('Content-Length: ' . strlen($contents)); echo $contents; } else { // Send regular contents header ('Content-Length: ' . strlen($contents)); echo $contents; } // Store cache if ($cache) { if ($fp = fopen($cachedir . '/' . $cachefile, 'wb')) { fwrite($fp, $contents); fclose($fp); } } } ?> Modifié 3 Février 2009 par Dadou Merci d'utiliser la balise CODEBOX pour les longs codes
Kioob Posté 4 Février 2009 Posté 4 Février 2009 Hello, vu que tu n'es pas à l'aise avec PHP, ne serait il pas préférable d'utiliser un outre outil, tel YIU Compressor, qui est en Java ? (à ne pas utiliser pour un traitement à la volée par contre)
allatoja Posté 5 Février 2009 Auteur Posté 5 Février 2009 Bonjour Kioob, Oui, pourquoi pas, mais je préférerais terminer ce que j'ai commencé. C'est si compliqué que cela, de configurer ce combine.php?
Kioob Posté 5 Février 2009 Posté 5 Février 2009 Le script en lui même n'a à priori rien de compliqué, mais je ne partage pas du tout ce choix technique : concaténer les fichiers à la volée via PHP coté perfs serveur ça n'est pas l'idéal, et désactiver une partie de la mise en cache navigateur pour cela ça n'est pas non plus l'idéal coté perfs client. Au final pour moi on se complique les choses sans réel apport. Encore le script se chargerait de la "minimisation" (ce que je pensais au début, mais j'ai confondu avec SmartOptimizer), ce pourrait être une solution "faute de mieux", mais là je reste très dubitatif quant à l'intérêt de l'outil.
allatoja Posté 5 Février 2009 Auteur Posté 5 Février 2009 D'accord, merci pour cette réponse, je vais jeter un oeil du côté de YIU Compressor! Cordialement
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant