source: spip-zone/_core_/branches/spip-3.1/plugins/compresseur/compresseur_options.php @ 96430

Last change on this file since 96430 was 96430, checked in by cedric@…, 5 years ago

Report de r95696 : Accompagner l'utilisation du domaine static par un dns-prefetch pour eviter d'ajouter un temps d'attente

File size: 2.3 KB
Line 
1<?php
2
3/**
4 * Réglage de l'output buffering
5 *
6 * Si possible, générer une sortie compressée pour économiser de la bande passante
7 *
8 * Utilisation déconseillee et désactivee par défaut.
9 * Utilisable uniquement via define('_AUTO_GZIP_HTTP',true)
10 *
11 * @package SPIP\Compresseur\Options
12 */
13
14// si un buffer est deja ouvert, stop
15if ($GLOBALS['flag_ob']
16        and defined('_AUTO_GZIP_HTTP') and _AUTO_GZIP_HTTP
17        and strlen(ob_get_contents()) == 0
18        and !headers_sent()
19) {
20
21        if (
22                // special bug de proxy
23                !(isset($_SERVER['HTTP_VIA']) and preg_match(",NetCache|Hasd_proxy,i", $_SERVER['HTTP_VIA']))
24                // special bug Netscape Win 4.0x
25                and (strpos($_SERVER['HTTP_USER_AGENT'], 'Mozilla/4.0') === false)
26                // special bug Apache2x
27                #&& !preg_match(",Apache(-[^ ]+)?/2,i", $_SERVER['SERVER_SOFTWARE'])
28                // test suspendu: http://article.gmane.org/gmane.comp.web.spip.devel/32038/
29                #&& !($GLOBALS['flag_sapi_name'] AND preg_match(",^apache2,", @php_sapi_name()))
30                // si la compression est deja commencee, stop
31                # && !@ini_get("zlib.output_compression")
32                and !@ini_get("output_handler")
33                and !isset($_GET['var_mode']) # bug avec le debugueur qui appelle ob_end_clean()
34        ) {
35                ob_start('ob_gzhandler');
36        }
37}
38
39
40/**
41 * Transformer toutes les URLs relatives image,js en url absolues qui pointent sur le domaine statique
42 * on applique pas a l'URL de la CSS, car on envoie un header http link qui permet au navigateur de la pre-fetch
43 * sur le meme domaine, sans avoir a faire de requete DNS
44 * @param string $flux
45 * @return string
46 */
47function compresseur_affichage_final($flux) {
48        if (isset($GLOBALS['meta']['url_statique_ressources'])
49          and isset($GLOBALS['html'])
50          and $GLOBALS['html']
51          and $url_statique = $GLOBALS['meta']['url_statique_ressources']){
52                $url_statique = rtrim(protocole_implicite($url_statique), "/") . "/";
53                $flux = preg_replace(",(href|src)=([\"'])([^/][^:\"']*[.](?:png|gif|jpg|js)(?:\?[0-9]+)?)\\2,Uims","\\1=\\2".$url_statique."\\3\\2",$flux);
54
55                // prefetching
56                // <link rel="dns-prefetch" href="//host_name_to_prefetch.com">
57                if (($p = strpos($url_statique,"/",2)) !== false) {
58                        $url_statique = substr($url_statique,0,$p);
59                        $link = "<link rel=\"dns-prefetch\" href=\"$url_statique\">";
60                        if ($p = stripos($flux,"</title>")) {
61                                $flux = substr_replace($flux, "\n" . $link, $p+8, 0);
62                        }
63                }
64        }
65
66  return $flux;
67}
Note: See TracBrowser for help on using the repository browser.