示例#1
0
文件: valider_xml.php 项目: spip/SPIP
/**
 * Valide l'existence d'un script ou d'une fonction
 *
 * @uses valider_pseudo_url()
 *
 * @param string $transformer_xml
 * @param string $script
 *  Nom de la fonction à charger
 * @param string $dir
 *  Nom du répertoire qui contiendrait le fichier et/ou la fonction à chercher/charger.
 * @param string $ext
 *  Nom de l'extension du fichier contenant la fonction à vérifier.
 * @return array
 */
function valider_script($transformer_xml, $script, $dir, $ext)
{
    $script = basename($script, '.php');
    $dir = basename($dir);
    $f = charger_fonction($script, $dir, true);
    // ne pas se controler soi-meme ni l'index du repertoire ni un fichier annexe
    if ($script == _request('exec') or $script == 'index' or !$f) {
        return array('/', 0, '', $script, '');
    }
    $val = $transformer_xml($f, true);
    $appel = '';
    // s'il y a l'attribut minipres, le test est non significatif
    // le script necessite peut-etre des arguments, on lui en donne,
    // en appelant la fonction _args associee si elle existe
    // Si ca ne marche toujours pas, les arguments n'étaient pas bons
    // ou c'est une authentification pour action d'administration;
    // tant pis, on signale le cas par un resultat negatif
    if (strpos($val->page, "id='minipres'")) {
        if (!($g = charger_fonction($script . '_args', $dir, true))) {
            $res = 0 - strlen($val->page);
        } else {
            $args = array(1, 'id_article', 1);
            $val = $transformer_xml($g, $args);
            $appel = 'id_article=1&type=id_article&id=1';
            if (strpos($val->page, "id='minipres'")) {
                $res = 0 - strlen($val->page);
            } else {
                $res = strlen($val->page);
            }
        }
    } else {
        $res = strlen($val->page);
    }
    $appel = valider_pseudo_url($dir, $script, $appel);
    $err = $val->err;
    return array(count($err), $res, $err, $script, $appel);
}
示例#2
0
function valider_skel($transformer_xml, $file, $dir, $ext)
{
	if (!lire_fichier ($file, $text)) return array('/', '/', $file,''); 
	if (!strpos($text, 'DOCTYPE')) {
		preg_match(",Content[-]Type:\s*[^/]+/([^ ;]+),", $text, $r);
		if ($r[1] === 'css' OR $r[1] === 'plain')
		  return array(0, array(), $file,'');
	}

	if ($ext != 'html') {
		// validation d'un non squelette
		$page = array('texte' => $text);
		$url = url_de_base() . _DIR_RESTREINT_ABS . $file;
		$script = $file;
	} else {
		$script = basename($file,'.html');
		// les squelettes en sous-repertoire sont problematiques,
		// traitons au moins le cas prive/exec
		if (substr_count($dir, '/') <= 1) {
			$url = generer_url_public($script, $contexte);
		} else 	$url = valider_pseudo_url(basename($dir), basename($file, '.html'), $contexte);
		$composer = charger_fonction('composer', 'public');
		list($skel_nom, $skel_code) = $composer($text, 'html', 'html', $file);

		spip_log("compilation de $file en " . strlen($skel_code) .  " octets de nom $skel_nom");
		if (!$skel_nom) return array('/', 0, $file,''); 
		$contexte = valider_contexte($skel_code, $file);
		$page = $skel_nom(array('cache'=>''), array($contexte));
	}
	list($texte, $err) = $transformer_xml($page['texte']);
	return array($texte, $err, $script, $url);
}