Example #1
0
/**
 * Produire un fichier statique a partir d'un squelette dynamique
 * Permet ensuite a apache de le servir en statique sans repasser
 * par spip.php a chaque hit sur le fichier
 * si le format (css ou js) est passe dans contexte['format'], on l'utilise
 * sinon on regarde si le fond finit par .css ou .js
 * sinon on utilie "html"
 *
 * @param string $fond
 * @param array $contexte
 * @param array $options
 * @param string $connect
 * @return string
 */
function produire_fond_statique($fond, $contexte = array(), $options = array(), $connect = '')
{
    if (isset($contexte['format'])) {
        $extension = $contexte['format'];
        unset($contexte['format']);
    } else {
        $extension = "html";
        if (preg_match(',[.](css|js|json)$,', $fond, $m)) {
            $extension = $m[1];
        }
    }
    // recuperer le contenu produit par le squelette
    $options['raw'] = true;
    $cache = recuperer_fond($fond, $contexte, $options, $connect);
    // calculer le nom de la css
    $dir_var = sous_repertoire(_DIR_VAR, 'cache-' . $extension);
    $nom_safe = preg_replace(",\\W,", '_', str_replace('.', '_', $fond));
    $filename = $dir_var . $extension . "dyn-{$nom_safe}-" . substr(md5($fond . serialize($contexte) . $connect), 0, 8) . ".{$extension}";
    // mettre a jour le fichier si il n'existe pas
    // ou trop ancien
    // le dernier fichier produit est toujours suffixe par .last
    // et recopie sur le fichier cible uniquement si il change
    if (!file_exists($filename) or !file_exists($filename . ".last") or isset($cache['lastmodified']) and $cache['lastmodified'] and filemtime($filename . ".last") < $cache['lastmodified'] or defined('_VAR_MODE') and _VAR_MODE == 'recalcul') {
        $contenu = $cache['texte'];
        // passer les urls en absolu si c'est une css
        if ($extension == "css") {
            $contenu = urls_absolues_css($contenu, test_espace_prive() ? generer_url_ecrire('accueil') : generer_url_public($fond));
        }
        // ne pas insérer de commentaire si c'est du json
        if ($extension != "json") {
            $comment = "/* #PRODUIRE{fond={$fond}";
            foreach ($contexte as $k => $v) {
                $comment .= ",{$k}={$v}";
            }
            // pas de date dans le commentaire car sinon ca invalide le md5 et force la maj
            // mais on peut mettre un md5 du contenu, ce qui donne un aperu rapide si la feuille a change ou non
            $comment .= "}\n   md5:" . md5($contenu) . " */\n";
        }
        // et ecrire le fichier
        ecrire_fichier($filename . ".last", $comment . $contenu);
        // regarder si on recopie
        if (!file_exists($filename) or md5_file($filename) !== md5_file($filename . ".last")) {
            @copy($filename . ".last", $filename);
            spip_clearstatcache(true, $filename);
            // eviter que PHP ne reserve le vieux timestamp
        }
    }
    return $filename;
}
Example #2
0
/**
 * Produire un fichier statique a partir d'un squelette dynamique
 * Permet ensuite a apache de le servir en statique sans repasser
 * par spip.php a chaque hit sur le fichier
 * si le format (css ou js) est passe dans contexte['format'], on l'utilise
 * sinon on regarde si le fond finit par .css ou .js
 * sinon on utilie "html"
 *
 * @param string $fond
 * @param array $contexte
 * @param array $options
 * @param string $connect
 * @return string
 */
function produire_fond_statique($fond, $contexte=array(), $options = array(), $connect=''){
	if (isset($contexte['format'])){
		$extension = $contexte['format'];
		unset($contexte['format']);
	}
	else {
		$extension = "html";
		if (preg_match(',[.](css|js)$,',$fond,$m))
			$extension = $m[1];
	}
	// recuperer le contenu produit par le squelette
	$options['raw'] = true;
	$cache = recuperer_fond($fond,$contexte,$options,$connect);

  // calculer le nom de la css
	$dir_var = sous_repertoire (_DIR_VAR, 'cache-'.$extension);
	$filename = $dir_var . $extension."dyn-".md5($fond.serialize($contexte).$connect) .".$extension";

	// mettre a jour le fichier si il n'existe pas
	// ou trop ancien
  if (!file_exists($filename)
	  OR filemtime($filename)<$cache['lastmodified']){

	  $contenu = $cache['texte'];
	  // passer les urls en absolu si c'est une css
	  if ($extension=="css")
	    $contenu = urls_absolues_css($contenu, generer_url_public($fond));

    $comment = "/* #PRODUIRE{fond=$fond";
    foreach($contexte as $k=>$v)
	    $comment .= ",$k=$v";
    $comment .="} le ".date("Y-m-d H:i:s")." */\n";
	  // et ecrire le fichier
    ecrire_fichier($filename,$comment.$contenu);
  }

  return $filename;
}
Example #3
0
/**
 * Produire un fichier statique a partir d'un squelette dynamique
 * Permet ensuite a apache de le servir en statique sans repasser
 * par spip.php a chaque hit sur le fichier
 * si le format (css ou js) est passe dans contexte['format'], on l'utilise
 * sinon on regarde si le fond finit par .css ou .js
 * sinon on utilie "html"
 *
 * @param string $fond
 * @param array $contexte
 * @param array $options
 * @param string $connect
 * @return string
 */
function produire_fond_statique($fond, $contexte = array(), $options = array(), $connect = '')
{
    if (isset($contexte['format'])) {
        $extension = $contexte['format'];
        unset($contexte['format']);
    } else {
        $extension = "html";
        if (preg_match(',[.](css|js|json)$,', $fond, $m)) {
            $extension = $m[1];
        }
    }
    // recuperer le contenu produit par le squelette
    $options['raw'] = true;
    $cache = recuperer_fond($fond, $contexte, $options, $connect);
    // calculer le nom de la css
    $dir_var = sous_repertoire(_DIR_VAR, 'cache-' . $extension);
    $nom_safe = preg_replace(",\\W,", '_', str_replace('.', '_', $fond));
    $filename = $dir_var . $extension . "dyn-{$nom_safe}-" . substr(md5($fond . serialize($contexte) . $connect), 0, 8) . ".{$extension}";
    // mettre a jour le fichier si il n'existe pas
    // ou trop ancien
    if (!file_exists($filename) or isset($cache['lastmodified']) and $cache['lastmodified'] and filemtime($filename) < $cache['lastmodified'] or defined('_VAR_MODE') and _VAR_MODE == 'recalcul') {
        $contenu = $cache['texte'];
        // passer les urls en absolu si c'est une css
        if ($extension == "css") {
            $contenu = urls_absolues_css($contenu, test_espace_prive() ? generer_url_ecrire('accueil') : generer_url_public($fond));
        }
        // ne pas insérer de commentaire si c'est du json
        if ($extension != "json") {
            $comment = "/* #PRODUIRE{fond={$fond}";
            foreach ($contexte as $k => $v) {
                $comment .= ",{$k}={$v}";
            }
            $comment .= "} le " . date("Y-m-d H:i:s") . " */\n";
        }
        // et ecrire le fichier
        ecrire_fichier($filename, $comment . $contenu);
    }
    return $filename;
}
Example #4
0
function url_absolue_css ($css) {
	if (!preg_match(',\.css$,i', $css, $r)) return $css;

	$url_absolue_css = url_absolue($css);

	$f = basename($css,'.css');
	$f = sous_repertoire (_DIR_VAR, 'cache-css')
		. preg_replace(",(.*?)(_rtl|_ltr)?$,","\\1-urlabs-" . substr(md5("$css-urlabs"), 0,4) . "\\2",$f)
		. '.css';

	if ((@filemtime($f) > @filemtime($css))
	AND ($GLOBALS['var_mode'] != 'recalcul'))
		return $f;

	if ($url_absolue_css==$css){
		if (strncmp($GLOBALS['meta']['adresse_site'],$css,$l=strlen($GLOBALS['meta']['adresse_site']))!=0
		 OR !lire_fichier(_DIR_RACINE . substr($css,$l), $contenu)){
		 		include_spip('inc/distant');
		 		if (!$contenu = recuperer_page($css))
					return $css;
		}
	}
	elseif (!lire_fichier($css, $contenu))
		return $css;

	// passer les url relatives a la css d'origine en url absolues
	$contenu = urls_absolues_css($contenu, $css);

	// ecrire la css
	if (!ecrire_fichier($f, $contenu))
		return $css;

	return $f;
}
    $ok = false;
}
lire_fichier(dirname(__FILE__) . "/css/expected_highest_screen.css", $expected);
$compacte = minifier_css($css_code, array('media' => 'screen', 'template' => 'highest'));
if (rtrim($compacte) != rtrim($expected)) {
    erreur("minifier_css(array('media'=>'screen','template'=>'highest'))", $compacte, $expected);
    $ok = false;
}
lire_fichier(dirname(__FILE__) . "/css/source_simple.css", $css_code);
lire_fichier(dirname(__FILE__) . "/css/expected_simple.css", $expected);
$compacte = minifier_css($css_code, 'screen');
if (rtrim($compacte) != rtrim($expected)) {
    erreur("minifier_css('screen')", $compacte, $expected);
    $ok = false;
}
lire_fichier(dirname(__FILE__) . "/css/expected_url_abs.css", $expected);
lire_fichier(dirname(__FILE__) . "/css/source_url_abs.css", $source);
$compacte = urls_absolues_css($source, "http://example.org/squelettes/source.css");
if (rtrim($compacte) != rtrim($expected)) {
    erreur("urls_absolues_css()", $compacte, $expected);
    $ok = false;
}
if ($ok) {
    echo "OK";
}
function erreur($titre, $result, $expected)
{
    echo "Erreur {$titre}<br />";
    echo "<tt>Resultat:</tt><pre>{$result}</pre>";
    echo "<tt>Attendu :</tt><pre>{$expected}</pre>";
}