/** * 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); }
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); }