function genie_clevermail_auto_ajout_abonnes_dist() { if ($autoListes = sql_select("lst_id, lst_name, lst_auto_subscribers, lst_auto_subscribers_mode", "spip_cm_lists", "lst_auto_subscribers != '' AND lst_auto_subscribers_updated < " . (time() - 60 * 60 * 24))) { include_spip('inc/distant'); while ($liste = sql_fetch($autoListes)) { if ($adresses = recuperer_page($liste['lst_auto_subscribers'])) { if (!clevermail_verification_adresses_email($adresses)) { // XXX : log en chaîne de langue spip_log('Le format des adresses e-mail ne semble pas bon dans le fichier distant d\'adresses de la liste « ' . $liste['lst_name'] . ' » (id=' . $liste['lst_id'] . ') : ' . $liste['lst_auto_subscribers'], 'clevermail'); } else { $retour = clevermail_abonnes_ajout(array($liste['lst_id']), intval($liste['lst_auto_subscribers_mode']), $adresses); sql_updateq("spip_cm_lists", array('lst_auto_subscribers_updated' => time()), "lst_id=" . $liste['lst_id']); // XXX : log en chaîne de langue $msg = 'Ajout automatique d\'abonnés à la liste « ' . $liste['lst_name'] . ' » (id=' . $liste['lst_id'] . ') à partir du fichier ' . $liste['lst_auto_subscribers'] . ' : '; if ($retour === false) { $msg .= _T('clevermail:aucun_nouvel_abonne'); } else { $msg .= $retour['nb_nouv'] > 0 ? $retour['nb_nouv'] . _T('clevermail:n_nouveaux_abonnes') : _T('clevermail:aucun_nouvel_abonne'); $msg .= $retour['nb_nouv'] > 0 && $retour['nb_maj'] > 0 ? _T('clevermail:nouveaux_abonnes_et') : ''; $msg .= $retour['nb_maj'] > 0 ? $retour['nb_maj'] . _T('clevermail:changements_mode_abonnement') : ''; spip_log($msg, 'clevermail'); } } } else { // XXX : log en chaîne de langue spip_log('Impossible de télécharger le fichier distant d\'adresses de la liste « ' . $liste['lst_name'] . ' » (id=' . $liste['lst_id'] . ') : ' . $liste['lst_auto_subscribers'], 'clevermail'); } } } return 1; }
function clevermail_post_update($pst_id) { if ($pst_id == intval($pst_id)) { $lst_id = sql_getfetsel('lst_id', 'spip_cm_posts', 'pst_id=' . intval($pst_id)); $post = array('lst_id' => intval($lst_id), 'pst_date_create' => time()); $list = sql_fetsel('*', 'spip_cm_lists', 'lst_id = ' . intval($lst_id)); // Traitement de la source HTML if (strpos($list['lst_url_html'], 'http://') !== false) { include_spip('inc/distant'); $url_html = $list['lst_url_html'] . (strpos($list['lst_url_html'], '?') !== false ? '&' : '?') . 'date=' . date("Y-m-d", $last_create) . '&lst_id=' . intval($lst_id); $post['pst_html'] = recuperer_page($url_html); } else { $contexte = array('date' => date("Y-m-d", $last_create), 'lst_id' => intval($lst_id)); // on passe la globale lien_implicite_cible_public en true // pour avoir les liens internes en public (en non prive d'apres le contexte) // credit de l'astuce: denisb & rastapopoulos & erational $GLOBALS['lien_implicite_cible_public'] = true; $post['pst_html'] = recuperer_fond($list['lst_url_html'], $contexte); // on revient a la config initiale unset($GLOBALS['lien_implicite_cible_public']); } // Traitement de la source texte if ($list['lst_url_text'] != '') { if (strpos($list['lst_url_text'], 'http://') !== false) { include_spip('inc/distant'); $url_text = $list['lst_url_text'] . (strpos($list['lst_url_text'], '?') !== false ? '&' : '?') . 'date=' . date("Y-m-d", $last_create) . '&lst_id=' . intval($lst_id); $post['pst_text'] = recuperer_page($url_text); } else { $contexte = array('date' => date("Y-m-d", $last_create), 'lst_id' => intval($lst_id)); // on passe la globale lien_implicite_cible_public en true // pour avoir les liens internes en public (en non prive d'apres le contexte) // credit de l'astuce: denisb & rastapopoulos & erational $GLOBALS['lien_implicite_cible_public'] = true; $post['pst_text'] = recuperer_fond($list['lst_url_text'], $contexte); // on revient a la config initiale unset($GLOBALS['lien_implicite_cible_public']); } $post['pst_text'] = strip_tags($post['pst_text']); } else { // TODO : essayer d'utiliser TEN : http://www.headstar.com/ten/ include_spip('classes/facteur'); $post['pst_text'] = Facteur::html2text($post['pst_html']); } if (trim($post['pst_html']) != '' && trim($post['pst_text']) != '') { /* if (preg_match(",<title>(.*)</title>,", $post['pst_html'], $regs)) { $post['pst_subject'] = trim($regs[1]); } else { $post['pst_subject'] = 'Aucun sujet'; } */ $pst_id = sql_updateq('spip_cm_posts', $post, 'pst_id=' . $pst_id); spip_log('Mise a jour du message « ' . $post['pst_subject'] . ' » (id=' . $pst_id . ') dans la liste « ' . $list['lst_name'] . ' » (id=' . $lst_id . ')', 'clevermail'); return $pst_id; } else { spip_log('Mise a jour d\'un message dans la liste « ' . $list['lst_name'] . ' » (id=' . $lst_id . ') impossible, contenu vide à ' . $url_html . ' et ' . $url_text, 'clevermail'); return false; } } }
function wha_check_offer_dist($id_abonnement) { $res = spip_query('SELECT * FROM spip_abonnements WHERE id_abonnement=' . intval($id_abonnement)); if (!($row = spip_fetch_array($res))) { return false; } if ($row['mode_paiement'] != 'wha' or !($uoid = $row['abonne_uid'])) { spip_log("wha_check_offer :Erreur : abonnement {$id_abonnement} n'a pas ete souscrit avec wha (ou pas d'uoid)", 'wha_abo_check'); return false; } if (!($confirm = $row['confirm']) or !($confirm = unserialize($confirm))) { spip_log("wha_check_offer :Erreur : abonnement {$id_abonnement} n'a pas d'url node enregistree", 'wha_abo_check'); return false; } $config = array('MERCHANT_ID' => $confirm['partner'], 'KEY_ID' => $confirm['key'], 'node' => $confirm['node']); $url_check = wha_url_check_abo($uoid, 'love', $config); include_spip('inc/distant'); $ack = @recuperer_page($url_check); spip_log($t = "wha_check_offer : reponse a {$url_check} : {$ack}", 'wha_abo_check'); if (!$ack or !($unsign = wha_unsign($ack)) or !($args = wha_extract_args(reset($unsign)))) { spip_log($t = "wha_check_offer : pas de reponse valide {$url_check} : {$ack}", 'wha_abo_check'); return null; } if (isset($args['c']) and $args['c'] == 'ack') { return true; } if (isset($args['e']) and in_array($args['e'], array(0, 1, 14, 15))) { return false; } return null; }
function radiobot_scan($id_syndic_article, $titre_parent = "Sans titre", $url, $date) { include_spip('inc/distant'); $page_distante = recuperer_page($url); //chercher un mp3 avec une url absolue preg_match_all(",http://[a-zA-Z0-9\\s()\\/\\:\\._%\\?+'=~-]*\\.mp3,Uims", $page_distante, $matches, PREG_SET_ORDER); if (count($matches)) { foreach ($matches as $m) { // virer ici les faux mp3 if (!preg_match(",^http://twitter.com/intent/tweet,", $m[0])) { $enclosures[] = $m[0]; } } } else { // chercher un lien relatif //chercher un mp3 preg_match_all(",(href|src)=(\"|')([a-zA-Z0-9\\s()\\/\\:\\._%\\?+'=~-]*\\.mp3),Uims", $page_distante, $matches, PREG_SET_ORDER); foreach ($matches as $m) { $parse_url = parse_url($url); $enclosures[] = "http://" . $parse_url['host'] . $m[3]; } } $enclosures = array_unique($enclosures); if (is_array($enclosures) and sizeof($enclosures) > 0) { if (!$date) { $date = date("Y-m-d h:i:s"); } inserer_document_syndic_article($enclosures, $id_syndic_article, $date, $titre_parent); } }
function hal_parse($url) { $url = trim(html_entity_decode($url), "\"' "); $infos = parse_url($url); $ip = gethostbyname($infos['host']); if ($ip != '193.48.96.10') { spip_log("Url invalid", _LOG_ERREUR); return; } spip_log(sprintf("[hal_parse] init_http(%s)", $url), _LOG_DEBUG); $content = recuperer_page($url); spip_log(sprintf("[hal_parse] init_http(%s): Done", $url), _LOG_DEBUG); $dom = new DomDocument('1.0', 'UTF-8'); $dom->preserveWhiteSpace = false; $str = mb_convert_encoding($content, "HTML-ENTITIES"); @$dom->loadHTML($str); $xpath = new DOMXpath($dom); $entries = $xpath->query('//div[@id="res_script"]'); if ($entries->length == 0) { spip_log("No tag found ...", _LOG_ERREUR); return; } $res_script = $dom->saveXML($entries->item(0)); return $res_script; }
/** * Recuperer une url en https avec curl ou recuperer_page sinon * * @param string $url * @param array|string $datas * $datas peut etre un tableau de paire=>valeur, ou une chaine de get paire=valeur&... * @param string $user_agent * @return array */ function inc_bank_recuperer_post_https_dist($url, $datas = '', $user_agent = '') { if (!function_exists('curl_init')) { include_spip('inc/distant'); $nvpreq = $datas; if (is_array($datas) and count($datas)) { $nvpreq = http_build_query($datas); } spip_log("bank_recuperer_post_https sur {$url} via recuperer_page : {$nvpreq}", 'bank'); $response = recuperer_page($url, false, false, 1048576, $datas, null); $erreur = $response === false; $erreur_msg = "recuperer_page impossible"; } else { //setting the curl parameters. $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); //curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); //turning off the server and peer verification(TrustManager Concept). curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); //curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__)."/cert/api_cert_chain.crt"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_FORBID_REUSE, true); curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); //if USE_PROXY constant set to TRUE in Constants.php, then only proxy will be enabled. //Set proxy name to PROXY_HOST and port number to PROXY_PORT in constants.php #if(_PAYPAL_USE_PROXY) #curl_setopt ($ch, CURLOPT_PROXY, _PAYPAL_PROXY_HOST.":"._PAYPAL_PROXY_PORT); //NVPRequest for submitting to server $nvpreq = ""; if (is_array($datas) and count($datas)) { $nvpreq = http_build_query($datas); } spip_log("bank_recuperer_post_https sur {$url} via curl : {$nvpreq}", 'bank'); if (!$user_agent) { $user_agent = "SPIP/Bank"; } //setting the nvpreq as POST FIELD to curl curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close', "User-Agent: {$user_agent}")); //getting response from server $response = curl_exec($ch); $erreur = curl_errno($ch); $erreur_msg = curl_error($ch); if (!$erreur) { //closing the curl curl_close($ch); } } return array($response, $erreur, $erreur ? $erreur_msg : ''); }
function presta_internetplus_inc_traiter_reponse_wha_dist($config, $m, $args, $partnerId, $keyId) { $mode = 'wha'; // historique... $config_id = bank_config_id($config); $v = $args['v']; $mp = $v['mp']; if (!isset($mp['id_transaction']) or !($id_transaction = $mp['id_transaction'])) { bank_transaction_invalide(0, array('where' => 'wha_traiter_reponse', 'mode' => $mode, 'erreur' => "pas de id_transaction en retour", 'log' => $m)); return array(0, false, $mp); } // verifier que la transaction est connue $res = sql_select("*", "spip_transactions", "id_transaction=" . intval($id_transaction)); if (!($row = sql_fetch($res))) { bank_transaction_invalide($id_transaction, array('where' => 'wha_traiter_reponse', 'mode' => $mode, 'erreur' => "transaction inconnue", 'log' => $m)); return array($id_transaction, false, $mp); } if (!$row['id_auteur']) { if (!isset($GLOBALS['visiteur_session']['id_auteur']) or !$GLOBALS['visiteur_session']['id_auteur']) { $_SESSION['wha_traiter_reponse_wha'] = array('m' => $m, 'args' => $args, 'partnerId' => $partnerId, 'keyId' => $keyId); return array($id_transaction, 'delayed', $mp); } else { sql_updateq("spip_transactions", array("id_auteur" => $row['id_auteur'] = $GLOBALS['visiteur_session']['id_auteur']), "id_transaction=" . intval($id_transaction)); } } if ($row['statut'] !== 'ok') { // ok, on traite le reglement $montant_regle = $row['montant']; // on verifie que le montant est bon ! /*$montant_regle = isset($v['amt'])?$v['amt']:0; if ($montant_regle!=$row['montant']){ spip_log($t = "wha_traiter_reponse : id_transaction $id_transaction, montant regle $montant_regle!=".$row['montant'].":".$m,'internetplus'._LOG_ERREUR); // on log ca dans un journal dedie spip_log($t,'internetplus_partiels'._LOG_ERREUR); // on est sympa avec le client, dans le doute on livre le produit }*/ $authorisation_id = $v['tId']; // declencher l'url de confirmation de reglement $node_response = $v['rt']; $config = array('MERCHANT_ID' => $partnerId, 'KEY_ID' => $keyId, 'node' => $node_response); $url = wha_url_confirm($authorisation_id, $row['montant'], $config); include_spip('inc/distant'); $ack = @recuperer_page($url); if (!$ack or !($unsign = wha_unsign($ack)) or !($args = wha_extract_args(reset($unsign))) or !isset($args['c']) or !$args['c'] == 'ack') { bank_transaction_invalide($id_transaction, array('where' => 'wha_traiter_reponse', 'mode' => $mode, 'erreur' => "pas de confirmation de debit / {$url} : {$ack}", 'update' => true, 'log' => $m)); return array($id_transaction, false, $mp); } sql_updateq("spip_transactions", array("autorisation_id" => $authorisation_id, "mode" => "wha/{$config_id}", "montant_regle" => $montant_regle, "date_paiement" => date('Y-m-d H:i:s'), "statut" => 'ok', "reglee" => 'oui'), "id_transaction=" . intval($id_transaction)); spip_log("wha_traiter_reponse : id_transaction {$id_transaction}, reglee", $mode . _LOG_INFO_IMPORTANTE); spip_log("{$m}", $mode . '_autorisations' . _LOG_INFO_IMPORTANTE); } $regler_transaction = charger_fonction('regler_transaction', 'bank'); $regler_transaction($id_transaction, array('row_prec' => $row)); return array($id_transaction, true, $mp); }
function produire_image_math($tex) { global $traiter_math; switch ($traiter_math) { // Attention: mathml desactiv'e pour l'instant case 'mathml': $ext = '.xhtml'; $server = $GLOBALS['mathml_server']; break; case 'tex': $ext = '.png'; $server = $GLOBALS['tex_server']; break; default: return $tex; } // Regarder dans le repertoire local des images TeX et blocs MathML if (!@is_dir($dir_tex = _DIR_VAR.'cache-TeX/')) @mkdir ($dir_tex, _SPIP_CHMOD); $fichier = $dir_tex .md5(trim($tex)).$ext; if (!@file_exists($fichier)) { // Aller chercher l'image sur le serveur if ($server) { spip_log($url = $server.'?'.rawurlencode($tex)); include_spip('inc/distant'); recuperer_page($url,$fichier); } } // Composer la reponse selon presence ou non de l'image $tex = entites_html($tex); if (@file_exists($fichier)) { // MathML if ($traiter_math == 'mathml') { return join(file("$fichier"),""); } // TeX else { list(,,,$size) = @getimagesize($fichier); $alt = "alt=\"$tex\" title=\"$tex\""; return "<img src=\"$fichier\" style=\"vertical-align:middle;\" $size $alt />"; } } else // pas de fichier return "<tt><span class='spip_code' dir='ltr'>$tex</span></tt>"; }
function spip_xml_load($fichier, $strict=true, $clean=true, $taille_max = 1048576, $datas='', $profondeur = -1){ $contenu = ""; if (preg_match(",^(http|ftp)://,",$fichier)){ include_spip('inc/distant'); $contenu = recuperer_page($fichier,false,false,$taille_max, $datas); } else lire_fichier ($fichier, $contenu); $arbre = array(); if ($contenu) $arbre = spip_xml_parse($contenu, $strict, $clean, $profondeur); return count($arbre)?$arbre:false; }
function presta_internetplus_inc_confirm_offer_dist($id_transaction, $uoid, $confirm) { $config = array('MERCHANT_ID' => $confirm['partner'], 'KEY_ID' => $confirm['key'], 'node' => $confirm['node']); $url_confirm = wha_url_confirm_abo($uoid, $config); include_spip('inc/distant'); $ack = @recuperer_page($url_confirm); if (!$ack or !($unsign = wha_unsign($ack)) or !($args = wha_extract_args(reset($unsign))) or !isset($args['c']) or !$args['c'] == 'ack') { spip_log($t = "wha_confirm_offer : transaction {$id_transaction}, echec confirmation de debit {$uoid} / {$url_confirm} : {$ack}", 'internetplus_abo' . _LOG_ERREUR); spip_log($t, 'internetplus_abo_hs' . _LOG_ERREUR); return false; } return true; }
function presta_paybox_payer_resilier_dist($uid) { $parm = paybox_pbx_ids(); $args = "VERSION=001" . "&TYPE=001" . "&SITE=" . str_pad($parm['PBX_SITE'], 7, "0", STR_PAD_LEFT) . "&MACH=" . str_pad($parm['PBX_RANG'], 3, "0", STR_PAD_LEFT) . "&IDENTIFIANT=" . $parm['PBX_IDENTIFIANT'] . "&ABONNEMENT=" . $uid; $url = _PAYBOX_URL_RESIL . "?" . $args; include_spip('inc/distant'); $reponse = recuperer_page($url); spip_log("uid:{$uid}, {$url}, reponse:{$reponse}", 'paybox_abos_resil'); parse_str($reponse, $res); if ($res['ACQ'] == 'OK' and $res['ABONNEMENT'] == $uid) { return true; } return false; }
/** * Lit un fichier xml donné et renvoie son arbre. * * @example * ``` * include_spip('inc/xml'); * $arbre = spip_xml_load(_DIR_PLUGINS . "$plug/plugin.xml"); * ``` * * @uses spip_xml_parse() * * @param string $fichier * Chemin local ou URL distante du fichier XML * @param bool $strict * true pour râler si une balise n'est pas correctement fermée, false sinon. * @param bool $clean ? * @param int $taille_max * Taille maximale si fichier distant * @param string|array $datas * Données à envoyer pour récupérer le fichier distant * @param int $profondeur ? * @return array|bool * - array : l'arbre XML, * - false si l'arbre xml ne peut être créé ou est vide **/ function spip_xml_load($fichier, $strict = true, $clean = true, $taille_max = 1048576, $datas = '', $profondeur = -1) { $contenu = ""; if (tester_url_absolue($fichier)) { include_spip('inc/distant'); $contenu = recuperer_page($fichier, false, false, $taille_max, $datas); } else { lire_fichier($fichier, $contenu); } $arbre = array(); if ($contenu) { $arbre = spip_xml_parse($contenu, $strict, $clean, $profondeur); } return count($arbre) ? $arbre : false; }
/** * une fonction qui permet de si un lien est un feed ou nom, * si c'est un feed elle retourne son type, si c'est pas un feed elle retourne 0, * cette verification est évidemment très très légère * * @param string $url * URL à analyser * @return string|0 * Retourne son type (rss|atom|rdf) ou 0 si pas feed */ function is_feed($url) { /** * méthode SPIP */ if (function_exists('recuperer_page')) { $buffer = recuperer_page($url); if (preg_match("/<(\\w*) .*/", $buffer, $matches)) { //ici on detecte la premiere balise $type_feed = $matches[1]; switch ($type_feed) { case "rss": return "rss"; case "feed": return "atom"; case "rdf": return "rdf"; } } return ''; } $fp = @fopen($url, "r"); if (!$fp) { return 0; } //verifion la nature de ce fichier while (!feof($fp)) { $buffer = fgets($fp, 4096); if (preg_match("/<(\\w*) .*/", $buffer, $matches)) { //ici on detecte la premiere balise $type_feed = $matches[1]; switch ($type_feed) { case "rss": fclose($fp); return "rss"; case "feed": fclose($fp); return "atom"; case "rdf": fclose($fp); return "rdf"; default: fclose($fp); return 0; } } } }
/** * on essaye de poser un htaccess rewrite global sur IMG/ * si fonctionne on gardera des ulrs de document permanente * si ne fonctionne pas on se rabat sur creer_htaccess du core * qui pose un deny sur chaque sous repertoire de IMG/ * * http://doc.spip.org/@gerer_htaccess * * @param bool $active * @return bool */ function accesrestreint_gerer_htaccess($active = true) { if (!$active) { spip_unlink(_DIR_IMG . _ACCESS_FILE_NAME); effacer_meta("creer_htaccess"); // effacer les xx/.htaccess crees eventuellement par le core include_spip("inc/acces"); gerer_htaccess(); return false; } else { $rewrite = <<<rewrite RewriteEngine On RewriteCond %{QUERY_STRING} ^(\\d+/[\\da-f]+)\$ RewriteRule ^\\w+/.*\$ ../spip.php?action=api_docrestreint&arg=%1/\$0 [skip=100] RewriteRule ^\\w+/.*\$ ../spip.php?action=api_docrestreint&arg=0/0/\$0 [skip=100] rewrite; // On cherche si le dossier racine a un RewriteBase plus long que "/" if (file_exists(_DIR_RACINE . _ACCESS_FILE_NAME)) { $ht = ''; lire_fichier(_DIR_RACINE . _ACCESS_FILE_NAME, $ht); if ($ht and preg_match('|^RewriteBase\\s+/.+$|m', $ht, $rewritebase)) { $rewritebase = rtrim(trim($rewritebase[0]), '/') . '/' . _NOM_PERMANENTS_ACCESSIBLES; $rewrite = $rewritebase . "\n" . $rewrite; } } ecrire_fichier(_DIR_IMG . _ACCESS_FILE_NAME, $rewrite); // verifier sur l'url de test include_spip('inc/distant'); $url_test = url_absolue(_DIR_IMG . "test/.test?0/1"); $test = recuperer_page($url_test); // si l'url de test renvoie bien "OK" alors rewrite rule fonctionne et on peut baser la protection de document sur ce shema if ($test == "OK") { effacer_meta("creer_htaccess"); // securite, et permet de generer des urls permanentes } else { // sinon on se rabat sur un deny et on generera des urls moches spip_unlink(_DIR_IMG . _ACCESS_FILE_NAME); ecrire_meta("creer_htaccess", "oui"); } // dans tous les cas on passe par gerer_htaccess pour enlever ou mettre les .htaccess dans les sous rep include_spip("inc/acces"); gerer_htaccess(); return true; } }
/** * Récupérer la source et détecter son extension * * @uses teleporter_http_extension() * * @param string $source * URL de la source HTTP * @param string $dest_tmp * Répertoire de destination * @return array|string * - Texte d'erreur si une erreur survient, * - Liste sinon (répertoire de destination temporaire, extension du fichier source) */ function teleporter_http_recuperer_source($source, $dest_tmp) { # securite : ici on repart toujours d'une source neuve if (file_exists($dest_tmp)) { spip_unlink($dest_tmp); } $extension = ""; # si on ne dispose pas encore du fichier # verifier que le zip en est bien un (sans se fier a son extension) # en chargeant son entete car l'url initiale peut etre une simple # redirection et ne pas comporter d'extension .zip include_spip('inc/distant'); $head = recuperer_page($source, false, true, 0); if (preg_match(",^Content-Type:\\s*?(.*)\$,Uims", $head, $m) and include_spip('base/typedoc')) { $mime = $m[1]; // passer du mime a l'extension ! if ($e = array_search($mime, $GLOBALS['tables_mime'])) { $extension = $e; } } if (!$extension or in_array($extension, array('bin', 'gz'))) { if (preg_match(",^Content-Disposition:\\s*attachment;\\s*filename=(.*)['\"]?\$,Uims", $head, $m) and $e = teleporter_http_extension($m[1])) { $extension = $e; } else { $extension = teleporter_http_extension($source); } } # format de fichier inconnu if (!$extension) { spip_log("Type de fichier inconnu pour la source {$source}", "teleport" . _LOG_ERREUR); return _T('svp:erreur_teleporter_type_fichier_inconnu', array('source' => $source)); } $dest_tmp = preg_replace(";\\.[\\w]{2,3}\$;i", "", $dest_tmp) . ".{$extension}"; if (!defined('_SVP_PAQUET_MAX_SIZE')) { define('_SVP_PAQUET_MAX_SIZE', 67108864); } // 64Mo include_spip('inc/distant'); $dest_tmp = copie_locale($source, 'force', $dest_tmp, _SVP_PAQUET_MAX_SIZE); if (!$dest_tmp or !file_exists($dest_tmp = _DIR_RACINE . $dest_tmp)) { spip_log("Chargement impossible de la source {$source}", "teleport" . _LOG_ERREUR); return _T('svp:erreur_teleporter_chargement_source_impossible', array('source' => $source)); } return array($dest_tmp, $extension); }
/** * Jamais appele directement dans le plugin bank/ * mais par une eventuelle methode abos/resilier d'un plugin externe * * @param string $uid * @param array|string $config * @return bool */ function presta_paybox_call_resilier_abonnement_dist($uid, $config = 'paybox') { include_spip('inc/bank'); if (!is_array($config)) { $mode = sql_getfetsel("mode", "spip_transactions", "abo_uid=" . sql_quote($uid) . " AND statut=" . sql_quote('ok') . " AND mode LIKE " . sql_quote($config . '%')); $config = bank_config($mode); } $args = "VERSION=001" . "&TYPE=001" . "&SITE=" . str_pad($config['PBX_SITE'], 7, "0", STR_PAD_LEFT) . "&MACH=" . str_pad($config['PBX_RANG'], 3, "0", STR_PAD_LEFT) . "&IDENTIFIANT=" . $config['PBX_IDENTIFIANT'] . "&ABONNEMENT=" . $uid; $url = paybox_url_resil($config) . "?" . $args; include_spip('inc/distant'); $reponse = recuperer_page($url); spip_log("uid:{$uid}, {$url}, reponse:{$reponse}", 'paybox_abos_resil'); parse_str($reponse, $res); if ($res['ACQ'] == 'OK' and $res['ABONNEMENT'] == $uid) { return true; } return false; }
/** * Recuperer une url en https avec curl ou recuperer_page sinon * * @param string $url * @param array/string $datas * $datas peut etre un tableau de paire=>valeur, ou une chaine de get paire=valeur&... */ function inc_bank_recuperer_post_https_dist($url, $datas = '') { if (!function_exists('curl_init')) { include_spip('inc/distant'); if (is_string($datas) and strlen($datas)) { parse_str($datas, $args); // passer en tableau $datas = $args; } $response = recuperer_page($url, false, false, 1048576, $datas); $erreur = $response === false; $erreur_msg = "recuperer_page impossible"; } else { //setting the curl parameters. $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_VERBOSE, 1); //turning off the server and peer verification(TrustManager Concept). curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); //if USE_PROXY constant set to TRUE in Constants.php, then only proxy will be enabled. //Set proxy name to PROXY_HOST and port number to PROXY_PORT in constants.php #if(_PAYPAL_USE_PROXY) #curl_setopt ($ch, CURLOPT_PROXY, _PAYPAL_PROXY_HOST.":"._PAYPAL_PROXY_PORT); //NVPRequest for submitting to server $nvpreq = ""; if (is_array($datas) and count($datas)) { $nvpreq = http_build_query($datas); } //setting the nvpreq as POST FIELD to curl curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq); //getting response from server $response = curl_exec($ch); $erreur = curl_errno($ch); $erreur_msg = curl_error($ch); if (!$erreur) { //closing the curl curl_close($ch); } } return array($response, $erreur, $erreur ? $erreur_msg : ''); }
function formulaires_configurer_relayeur_verifier_dist() { $erreurs = array(); $http_proxy = relayeur_saisie_ou_config(_request('http_proxy'), lire_config('http_proxy', '')); $http_noproxy = _request('http_noproxy'); if ($http_proxy and !tester_url_absolue($http_proxy)) { $erreurs['http_proxy'] = _T('info_url_proxy_pas_conforme'); } if (!isset($erreurs['http_proxy']) and _request('tester_proxy')) { if (!$http_proxy) { $erreurs['http_proxy'] = _T('info_obligatoire'); } else { include_spip('inc/distant'); $test_proxy = _request('test_proxy'); $t = parse_url($test_proxy); if (!@$t['host']) { $erreurs['test_proxy'] = _T('info_adresse_non_indiquee'); } else { include_spip('inc/texte'); // pour aide, couper, lang $info = ""; if (!need_proxy($t['host'], $http_proxy, $http_noproxy)) { $info = "<strong>" . _T('page_pas_proxy') . "</strong><br />"; } // il faut fausser le proxy actuel pour faire le test ! $cur_http_proxy = $GLOBALS['meta']['http_proxy']; $cur_http_noproxy = $GLOBALS['meta']['http_noproxy']; $GLOBALS['meta']['http_proxy'] = $http_proxy; $GLOBALS['meta']['http_noproxy'] = $http_noproxy; $page = recuperer_page($test_proxy, true); $GLOBALS['meta']['http_proxy'] = $cur_http_proxy; $GLOBALS['meta']['http_noproxy'] = $cur_http_noproxy; if ($page) { $erreurs['message_ok'] = _T('info_proxy_ok') . "<br />{$info}\n<tt>" . couper(entites_html($page), 300) . "</tt>"; $erreurs['message_erreur'] = ''; } else { $erreurs['message_erreur'] = $info . _T('info_impossible_lire_page', array('test_proxy' => "<tt>{$test_proxy}</tt>")) . " <b><tt>" . no_password_proxy_url($http_proxy) . "</tt></b>." . aide('confhttpproxy'); } } } } return $erreurs; }
function formulaires_site_verifier_dist($id_rubrique) { $erreurs = array(); if (!($nom = _request('nom_site'))) { $erreurs['nom_site'] = _T("info_obligatoire"); } else { if (strlen($nom) < 2 or strlen(_request('nobot')) > 0) { $erreurs['email_message_auteur'] = _T('form_prop_indiquer_nom_site'); } } if (!($url = _request('url_site'))) { $erreurs['url_site'] = _T("info_obligatoire"); } if (!count($erreurs)) { // Tester l'URL du site include_spip('inc/distant'); if (!recuperer_page($url)) { $erreurs['url_site'] = _T('form_pet_url_invalide'); } } return $erreurs; }
function filtre_text_html_dist($t) { if (!preg_match(',^(.*?)<body[^>]*>(.*)</body>,is', $t, $r)) { return appliquer_filtre($t, 'text/plain'); } list(, $h, $t) = $r; $style = ''; // recuperer les styles internes if (preg_match_all(',<style>(.*?)</style>,is', $h, $r, PREG_PATTERN_ORDER)) { $style = join("\n", $r[1]); } // ... et externes include_spip('inc/distant'); if (preg_match_all(',<link[^>]+type=.text/css[^>]*>,is', $h, $r, PREG_PATTERN_ORDER)) { foreach ($r[0] as $l) { preg_match("/href='([^']*)'/", str_replace('"', "'", $l), $m); $style .= "\n/* {$l} */\n" . str_replace('<', '', recuperer_page($m[1])); } } // Pourquoi SafeHtml transforme-t-il en texte les scripts dans Body ? $t = safehtml(preg_replace(',<script' . '.*?</script>,is', '', $t)); return (!$style ? '' : "\n<style>" . $style . "</style>") . $t; }
function exec_cs_version_dist() { cs_minipres(); $version = _request('version'); $force = _request('force')=='oui'; // pour la version disponible, on regarde toutes les 2h00 $maj = isset($GLOBALS['meta']['tweaks_maj'])?unserialize($GLOBALS['meta']['tweaks_maj']):array(0, ''); if (!$force && $maj[1] && (time()-$maj[0] < 2*3600)) $distant = $maj[1]; else { include_spip('inc/distant'); $distant = recuperer_page(_URL_CS_PLUGIN_XML); if ($distant) $distant = $maj[1] = preg_match(',<version>([0-9.]+)</version>,', $distant, $regs)?$regs[1]:''; $maj[0] = time(); if ($distant) ecrire_meta('tweaks_maj', serialize($maj)); ecrire_metas(); } include_spip('inc/texte'); include_spip('cout_fonctions'); // fonctions pour les pipelines if (!$distant) return ajax_retour('<span style="color: red;">'._T('couteauprive:erreur:probleme', array('pb'=>cs_lien(_URL_CS_PLUGIN_XML,_T('couteauprive:erreur:distant')))).'</span>'); ajax_retour(ptobr(propre($distant==$version?_T('couteauprive:version_a_jour'):( $distant?_T('couteauprive:version_nouvelle', array('version' => "[{$distant}->http://files.spip.org/spip-zone/couteau_suisse.zip]")):'' )))); }
/** * Aller chercher les donnees de la boucle DATA * depuis une source * {source format, [URL], [arg2]...} */ protected function select_source() { # un peu crado : avant de charger le cache il faut charger # les class indispensables, sinon PHP ne saura pas gerer # l'objet en cache ; cf plugins/icalendar # perf : pas de fonction table_to_array ! (table est deja un array) if (isset($this->command['sourcemode']) and !in_array($this->command['sourcemode'], array('table', 'array', 'tableau'))) { charger_fonction($this->command['sourcemode'] . '_to_array', 'inc', true); } # le premier argument peut etre un array, une URL etc. $src = $this->command['source'][0]; # avons-nous un cache dispo ? $cle = null; if (is_string($src)) { $cle = 'datasource_' . md5($this->command['sourcemode'] . ':' . var_export($this->command['source'], true)); } $cache = $this->cache_get($cle); if (isset($this->command['datacache'])) { $ttl = intval($this->command['datacache']); } if ($cache and $cache['time'] + (isset($ttl) ? $ttl : $cache['ttl']) > time() and !(_request('var_mode') === 'recalcul' and include_spip('inc/autoriser') and autoriser('recalcul'))) { $this->tableau = $cache['data']; } else { try { # dommage que ca ne soit pas une option de yql_to_array... if ($this->command['sourcemode'] == 'yql') { if (!isset($ttl)) { $ttl = 3600; } } if (isset($this->command['sourcemode']) and in_array($this->command['sourcemode'], array('table', 'array', 'tableau'))) { if (is_array($a = $src) or is_string($a) and $a = str_replace('"', '"', $a) and is_array($a = @unserialize($a))) { $this->tableau = $a; } } else { if (preg_match(',^https?://,', $src)) { include_spip('inc/distant'); $u = recuperer_page($src, false, false, _DATA_SOURCE_MAX_SIZE); if (!$u) { throw new Exception("404"); } if (!isset($ttl)) { $ttl = 24 * 3600; } } else { if (@is_dir($src)) { $u = $src; if (!isset($ttl)) { $ttl = 10; } } else { if (@is_readable($src) && @is_file($src)) { $u = spip_file_get_contents($src); if (!isset($ttl)) { $ttl = 10; } } else { $u = $src; if (!isset($ttl)) { $ttl = 10; } } } } if (!$this->err and $g = charger_fonction($this->command['sourcemode'] . '_to_array', 'inc', true)) { $args = $this->command['source']; $args[0] = $u; if (is_array($a = call_user_func_array($g, $args))) { $this->tableau = $a; } } } if (!is_array($this->tableau)) { $this->err = true; } if (!$this->err and isset($ttl) and $ttl > 0) { $this->cache_set($cle, $ttl); } } catch (Exception $e) { $e = $e->getMessage(); $err = sprintf("[%s, %s] {$e}", $src, $this->command['sourcemode']); erreur_squelette(array($err, array())); $this->err = true; } } # en cas d'erreur, utiliser le cache si encore dispo if ($this->err and $cache) { $this->tableau = $cache['data']; $this->err = false; } }
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 _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; }
function recuperer_infos_distantes($source, $max = 0, $charger_si_petite_image = true) { # charger les alias des types mime include_spip('base/typedoc'); global $mime_alias; $a = array(); $mime_type = ''; // On va directement charger le debut des images et des fichiers html, // de maniere a attrapper le maximum d'infos (titre, taille, etc). Si // ca echoue l'utilisateur devra les entrer... if ($headers = recuperer_page($source, false, true, $max, '', '', true)) { list($headers, $a['body']) = preg_split(',\\n\\n,', $headers, 2); if (preg_match(",\nContent-Type: *([^[:space:];]*),i", "\n{$headers}", $regs)) { $mime_type = trim($regs[1]); } else { $mime_type = ''; } // inconnu // Appliquer les alias while (isset($mime_alias[$mime_type])) { $mime_type = $mime_alias[$mime_type]; } // Si on a un mime-type insignifiant // text/plain,application/octet-stream ou vide // c'est peut-etre que le serveur ne sait pas // ce qu'il sert ; on va tenter de detecter via l'extension de l'url // ou le Content-Disposition: attachment; filename=... $t = null; if (in_array($mime_type, array('text/plain', '', 'application/octet-stream'))) { if (!$t and preg_match(',\\.([a-z0-9]+)(\\?.*)?$,i', $source, $rext)) { $t = sql_fetsel("extension", "spip_types_documents", "extension=" . sql_quote($rext[1], '', 'text')); } if (!$t and preg_match(",^Content-Disposition:\\s*attachment;\\s*filename=(.*)\$,Uims", $headers, $m) and preg_match(',\\.([a-z0-9]+)(\\?.*)?$,i', $m[1], $rext)) { $t = sql_fetsel("extension", "spip_types_documents", "extension=" . sql_quote($rext[1], '', 'text')); } } // Autre mime/type (ou text/plain avec fichier d'extension inconnue) if (!$t) { $t = sql_fetsel("extension", "spip_types_documents", "mime_type=" . sql_quote($mime_type)); } // Toujours rien ? (ex: audio/x-ogg au lieu de application/ogg) // On essaie de nouveau avec l'extension if (!$t and $mime_type != 'text/plain' and preg_match(',\\.([a-z0-9]+)(\\?.*)?$,i', $source, $rext)) { $t = sql_fetsel("extension", "spip_types_documents", "extension=" . sql_quote($rext[1], '', 'text')); # eviter xxx.3 => 3gp (> SPIP 3) } if ($t) { spip_log("mime-type {$mime_type} ok, extension " . $t['extension']); $a['extension'] = $t['extension']; } else { # par defaut on retombe sur '.bin' si c'est autorise spip_log("mime-type {$mime_type} inconnu"); $t = sql_fetsel("extension", "spip_types_documents", "extension='bin'"); if (!$t) { return false; } $a['extension'] = $t['extension']; } if (preg_match(",\nContent-Length: *([^[:space:]]*),i", "\n{$headers}", $regs)) { $a['taille'] = intval($regs[1]); } } // Echec avec HEAD, on tente avec GET if (!$a and !$max) { spip_log("tenter GET {$source}"); $a = recuperer_infos_distantes($source, _INC_DISTANT_MAX_SIZE); } // S'il s'agit d'une image pas trop grosse ou d'un fichier html, on va aller // recharger le document en GET et recuperer des donnees supplementaires... if (preg_match(',^image/(jpeg|gif|png|swf),', $mime_type)) { if ($max == 0 and $a['taille'] < _INC_DISTANT_MAX_SIZE and strpos($GLOBALS['meta']['formats_graphiques'], $a['extension']) !== false and $charger_si_petite_image) { $a = recuperer_infos_distantes($source, _INC_DISTANT_MAX_SIZE); } else { if ($a['body']) { $a['fichier'] = _DIR_RACINE . nom_fichier_copie_locale($source, $a['extension']); ecrire_fichier($a['fichier'], $a['body']); $size_image = @getimagesize($a['fichier']); $a['largeur'] = intval($size_image[0]); $a['hauteur'] = intval($size_image[1]); $a['type_image'] = true; } } } // Fichier swf, si on n'a pas la taille, on va mettre 425x350 par defaut // ce sera mieux que 0x0 if ($a and $a['extension'] == 'swf' and !$a['largeur']) { $a['largeur'] = 425; $a['hauteur'] = 350; } if ($mime_type == 'text/html') { include_spip('inc/filtres'); $page = recuperer_page($source, true, false, _INC_DISTANT_MAX_SIZE); if (preg_match(',<title>(.*?)</title>,ims', $page, $regs)) { $a['titre'] = corriger_caracteres(trim($regs[1])); } if (!$a['taille']) { $a['taille'] = strlen($page); } # a peu pres } return $a; }
/** * Préparer un fichier CSS avant sa minification * * @param string $css * @param bool|string $is_inline * @param string $fonctions * @return bool|int|null|string */ function &compresseur_callback_prepare_css(&$css, $is_inline = false, $fonctions = null) { if ($is_inline) { return compresseur_callback_prepare_css_inline($css, $is_inline); } if (!preg_match(',\\.css$,i', $css, $r)) { return $css; } $url_absolue_css = url_absolue($css); if (!$fonctions) { $fonctions = compresseur_liste_fonctions_prepare_css(); } elseif (is_string($fonctions)) { $fonctions = array($fonctions); } $sign = implode(",", $fonctions); $sign = substr(md5("{$css}-{$sign}"), 0, 8); $file = basename($css, '.css'); $file = sous_repertoire(_DIR_VAR, 'cache-css') . preg_replace(",(.*?)(_rtl|_ltr)?\$,", "\\1-f-" . $sign . "\\2", $file) . '.css'; if (@filemtime($file) > @filemtime($css) and (!defined('_VAR_MODE') or _VAR_MODE != 'recalcul')) { return $file; } 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; } // retirer le protocole de $url_absolue_css $url_absolue_css = protocole_implicite($url_absolue_css); $contenu = compresseur_callback_prepare_css_inline($contenu, $url_absolue_css, $fonctions); // ecrire la css if (!ecrire_fichier($file, $contenu)) { return $css; } return $file; }
/** * Analyser une URL de site distant, qui peut être une syndication. * * @param string $url * URL du site à analyser * @return array|bool * - array : informations du site * - false : site impossible à récupérer **/ function analyser_site($url) { include_spip('inc/filtres'); include_spip('inc/distant'); // Accepter les URLs au format feed:// ou qui ont oublie le http:// $url = preg_replace(',^feed://,i', 'http://', $url); if (!preg_match(',^[a-z]+://,i', $url)) { $url = 'http://' . $url; } $texte = recuperer_page($url, true); if (!$texte) { return false; } include_spip('inc/syndic'); cdata_echappe($texte, $echappe_cdata); if (preg_match(',<(channel|feed)([\\:[:space:]][^>]*)?' . '>(.*)</\\1>,ims', $texte, $regs)) { $result['syndication'] = 'oui'; $result['url_syndic'] = $url; $channel = $regs[3]; // Pour recuperer l'entete, on supprime tous les items $b = array_merge(extraire_balises($channel, 'item'), extraire_balises($channel, 'entry')); $header = str_replace($b, array(), $channel); if ($t = extraire_balise($header, 'title')) { cdata_echappe_retour($t, $echappe_cdata); $result['nom_site'] = filtrer_entites(supprimer_tags($t)); } if ($t = extraire_balises($header, 'link')) { cdata_echappe_retour($t, $echappe_cdata); foreach ($t as $link) { $u = supprimer_tags(filtrer_entites($link)); if (!strlen($u)) { $u = extraire_attribut($link, 'href'); } if (strlen($u)) { // on installe l'url comme url du site // si c'est non vide, en donnant la priorite a rel=alternate if (preg_match(',\\balternate\\b,', extraire_attribut($link, 'rel')) or !isset($result['url_site'])) { $result['url_site'] = filtrer_entites($u); } } } } $result['url_site'] = url_absolue($result['url_site'], $url); if ($a = extraire_balise($header, 'description') or $a = extraire_balise($header, 'tagline')) { cdata_echappe_retour($a, $echappe_cdata); $result['descriptif'] = filtrer_entites(supprimer_tags($a)); } if (preg_match(',<image.*<url.*>(.*)</url>.*</image>,Uims', $header, $r) and preg_match(',(https?://.*/.*(gif|png|jpg)),ims', $r[1], $r) and $image = recuperer_infos_distantes($r[1])) { if (in_array($image['extension'], array('gif', 'jpg', 'png'))) { $result['format_logo'] = $image['extension']; $result['logo'] = $r[1]; } else { if ($image['fichier']) { spip_unlink($image['fichier']); } } } } else { $result['syndication'] = 'non'; $result['url_site'] = $url; if (preg_match(',<head>(.*(description|title).*)</head>,Uims', $texte, $regs)) { $head = filtrer_entites($regs[1]); } else { $head = $texte; } if (preg_match(',<title[^>]*>(.*),ims', $head, $regs)) { $titre = trim($regs[1]); if (!strlen($titre)) { $titre = substr($head, strpos($head, $regs[0])); } $result['nom_site'] = filtrer_entites(supprimer_tags(preg_replace(',</title>.*$,ims', '', $titre))); } if ($a = array_merge(extraire_balises($head, 'meta'), extraire_balises($head, 'http-equiv'))) { foreach ($a as $meta) { if (extraire_attribut($meta, 'name') == 'description') { $desc = trim(extraire_attribut($meta, 'content')); if (!strlen($desc)) { $desc = trim(extraire_attribut($meta, 'value')); } $result['descriptif'] = $desc; } } } // Cherchons quand meme un backend include_spip('inc/distant'); include_spip('inc/feedfinder'); $feeds = get_feed_from_url($url, $texte); // si on a a trouve un (ou plusieurs) on le note avec select: // ce qui constitue un signal pour exec=sites qui proposera de choisir // si on syndique, et quelle url. if (count($feeds) >= 1) { spip_log("feedfinder.php :\n" . join("\n", $feeds)); $result['url_syndic'] = "select: " . join(' ', $feeds); } } cdata_echappe_retour($result, $echappe_cdata); return $result; }
/** * Vérifie le formatage d'un xml * * @see valider_resultats() * @see valider_dir() * @see valider_pseudo_url() * * @param string $url * @param string $req_ext * @param int $limit * @param array|bool $rec * **/ function valider_xml_ok($url, $req_ext, $limit, $rec) { $url = urldecode($url); $rec = !$rec ? false : array(); if (!$limit) { $limit = 200; } $titre = _T('analyse_xml'); if (!$url) { $url_aff = 'http://'; $onfocus = "this.value='';"; $texte = $bandeau = $err = ''; } else { include_spip('inc/distant'); if (is_dir($url)) { $dir = substr($url, -1, 1) === '/' ? $url : "{$url}/"; $ext = !preg_match('/^[.*\\w]+$/', $req_ext) ? 'php' : $req_ext; $files = preg_files($dir, "{$ext}\$", $limit, $rec); if (!$files and $ext !== 'html') { $files = preg_files($dir, 'html$', $limit, $rec); if ($files) { $ext = 'html'; } } if ($files) { $res = valider_dir($files, $ext, $url); list($err, $res) = valider_resultats($res, $ext === 'html'); $err = ' (' . $err . '/' . count($files) . ')'; } else { $res = _T('texte_vide'); $err = ''; } $bandeau = $dir . '*' . $ext . $err; } else { if (preg_match('@^((?:[.]/)?[^?]*)[?]([0-9a-z_]+)=([^&]*)(.*)$@', $url, $r)) { list(, $server, $dir, $script, $args) = $r; if ((!$server or $server == './' or strpos($server, url_de_base()) === 0) and is_dir($dir)) { $url = $script; // Pour quand le validateur saura simuler // une query-string... // $args = preg_split('/&(amp;)?[a-z0-9_]+=/', $args); $args = true; } } else { $dir = 'exec'; $script = $url; $args = true; } $transformer_xml = charger_fonction('valider', 'xml'); $onfocus = "this.value='" . addslashes($url) . "';"; if (preg_match(',^[a-z][0-9a-z_]*$,i', $url)) { $res = $transformer_xml(charger_fonction($url, $dir), $args); $url_aff = valider_pseudo_url($dir, $script); } else { $res = $transformer_xml(recuperer_page($url)); $url_aff = entites_html($url); } list($texte, $err) = emboite_texte($res); if (!$err) { $err = '<h3>' . _T('spip_conforme_dtd') . '</h3>'; } $res = "<div style='text-align: center'>" . $err . "</div>" . "<div style='margin: 10px; text-align: left'>" . $texte . '</div>'; $bandeau = "<a href='{$url_aff}'>{$url}</a>"; } } $commencer_page = charger_fonction('commencer_page', 'inc'); $debut = $commencer_page($titre); $jq = http_script("", 'jquery.js'); echo str_replace('<head>', "<head>{$jq}", $debut); $onfocus = '<input type="text" size="70" value="' . $url_aff . '" name="var_url" id="var_url" onfocus="' . $onfocus . '" />'; $onfocus = generer_form_ecrire('valider_xml', $onfocus, " method='get'"); echo "<h1>", $titre, '<br>', $bandeau, '</h1>', "<div style='text-align: center'>", $onfocus, "</div>", $res, fin_page(); }
function formulaires_signature_verifier_dist($id_article) { $erreurs = array(); $oblis = array('session_nom', 'session_email'); include_spip('base/abstract_sql'); $row = sql_fetsel('*', 'spip_petitions', 'id_article=' . intval($id_article)); if (!$row) { $erreurs['message_erreur'] = _T('petitions:form_pet_probleme_technique'); } $id_petition = $row['id_petition']; if ($row['site_obli'] == 'oui') { $oblis[] = 'signature_nom_site'; $oblis[] = 'signature_url_site'; set_request('signature_url_site', vider_url(_request('signature_url_site'))); } foreach ($oblis as $obli) { if (!_request($obli)) { $erreurs[$obli] = _T('info_obligatoire'); } } if ($nom = _request('session_nom') and strlen($nom) < 2) { $erreurs['session_nom'] = _T('form_indiquer_nom'); } include_spip('inc/filtres'); if (($mail = _request('session_email')) == _T('info_mail_fournisseur')) { $erreurs['session_email'] = _T('form_indiquer_email'); } elseif ($mail and !email_valide($mail)) { $erreurs['session_email'] = _T('form_email_non_valide'); } elseif (strlen(_request('nobot')) or @preg_match_all(',\\bhref=[\'"]?http,i', _request('message')) > 2) { #$envoyer_mail = charger_fonction('envoyer_mail','inc'); #envoyer_mail('*****@*****.**', 'spam intercepte', var_export($_POST,1)); $erreurs['message_erreur'] = _T('petitions:form_pet_probleme_liens'); } if ($row['site_obli'] == 'oui') { if (!vider_url($url_site = _request('signature_url_site'))) { $erreurs['signature_url_site'] = _T('form_indiquer_nom_site'); } elseif (!count($erreurs)) { include_spip('inc/distant'); if (!recuperer_page($url_site, false, true, 0)) { $erreurs['signature_url_site'] = _T('petitions:form_pet_url_invalide'); } } } if (!count($erreurs)) { // tout le monde est la. $email_unique = $row['email_unique'] == "oui"; $site_unique = $row['site_unique'] == "oui"; // Refuser si deja signe par le mail ou le site quand demande // Il y a un acces concurrent potentiel, // mais ca n'est qu'un cas particulier de qq n'ayant jamais confirme'. // On traite donc le probleme a la confirmation. if ($email_unique) { $r = sql_countsel('spip_signatures', "id_petition=" . intval($id_petition) . " AND ad_email=" . sql_quote($mail) . " AND statut='publie'"); if ($r) { $erreurs['message_erreur'] = _T('petitions:form_pet_deja_signe'); } } if ($site_unique) { $r = sql_countsel('spip_signatures', "id_petition=" . intval($id_petition) . " AND url_site=" . sql_quote($url_site) . " AND (statut='publie' OR statut='poubelle')"); if ($r) { $erreurs['message_erreur'] = _T('petitions:form_pet_site_deja_enregistre'); } } } return $erreurs; }
function configuration_relayeur_post ($http_proxy, $http_noproxy, $test_proxy, $tester_proxy) { // http_proxy : ne pas prendre en compte la modif si le password est '****' if (preg_match(',:\*\*\*\*@,', $http_proxy)) $http_proxy = $GLOBALS['meta']['http_proxy']; $retour = $page = ''; if ($tester_proxy AND preg_match(",https?://,", $http_proxy)) { include_spip('inc/distant'); $t = parse_url($test_proxy); if (!@$t['host']) { $retour = _T('info_adresse_non_indiquee'); } elseif (!need_proxy($t['host'])) { $retour = "<p>"._T('page_pas_proxy')."</p>\n"; } elseif ($page = recuperer_page($test_proxy, true)) { include_spip('inc/texte'); // pour aide, couper, lang $retour = "<p>"._T('info_proxy_ok')."</p>\n<tt>" . couper(entites_html($page),300)."</tt>"; } else $retour = _T('info_impossible_lire_page', array('test_proxy' => $test_proxy)) . " <tt>".no_password_proxy_url($http_proxy)."</tt>." . aide('confhttpproxy'); } if ($http_proxy !== NULL) { ecrire_meta('http_proxy', $http_proxy); } if ($http_noproxy !== NULL) { ecrire_meta('http_noproxy', $http_noproxy); } if ($page) { include_spip('install/etape_fin'); $retour .= install_verifier_htaccess(); } return $retour; }
function cs_action_fichiers_distants(&$outil, $forcer=false, $tester=false) { if(!isset($outil['fichiers_distants'])) return ''; $lib = sous_repertoire(_DIR_PLUGIN_COUTEAU_SUISSE, 'lib'); $a = array(); foreach($outil['fichiers_distants'] as $i) { $erreur = false; $res_pipe = ''; $dir = sous_repertoire($lib, $outil['id']); preg_match('/[^?]*/', basename($outil[$i]), $reg); $f = 'distant_' . $reg[0]; $file = pipeline('fichier_distant', array('outil'=>$outil['id'], 'fichier_local'=>$dir.$f)); $file = $file['fichier_local']; $f = basename($file); $size = ($forcer || @(!file_exists($file)) ? 0 : filesize($file)); if($size) $statut = _T('couteauprive:distant_present', array('date'=>cs_date_long(date('Y-m-d H:i:s', filemtime($file))))); elseif($outil['actif'] || $forcer) { include_spip('inc/distant'); if($distant = recuperer_page($outil[$i])) { $distant = pipeline('fichier_distant', array('outil'=>$outil['id'], 'fichier_local'=>$file, 'fichier_distant'=>$outil[$i], 'message'=>'', 'texte'=>$distant, 'actif'=>$outil['actif'])); $file = $distant['fichier_local']; $message = $distant['message'] . "\n_ " . _T('couteauprive:copie_vers', array('dir'=>dirname($distant['fichier_local']).'/')); $distant = $distant['texte']; if(preg_match(',\.php\d?$,', $file)) { $test = preg_replace(',^.*?\<\?php|\?\>.*?$,', '', $distant); if(!@eval("return true; $test")) $distant = false; else $distant = ecrire_fichier($file, '<'."?php\n\n".trim($test)."\n\n?".'>'); } else $distant = ecrire_fichier($file, $distant); } if($distant) $statut = '<span style="color:green">'._T('couteauprive:distant_charge').'</span>'; else $erreur = $statut = '<span style="color:red">'._T('couteauprive:distant_echoue').'</span>'; } else $erreur = $statut = _T('couteauprive:distant_inactif'); $a[] = "[{$f}->{$outil[$i]}]\n_ ".$statut.$message; } if($tester) return $a; $a = '<ul style="margin:0.6em 0 0.6em 4em;"><li>' . join("</li><li style='margin-top:0.4em;'>", $a) . '</li></ul>'; $b = ($outil['actif'] || !$erreur)?'rss_actualiser':($erreur?'distant_charger':false); $b = $b?"\n<p class='cs_sobre'><input class='cs_sobre' type='submit' value=\" [" . attribut_html(_T('couteauprive:'.$b)).']" /></p>':''; return ajax_action_auteur('action_rapide', 'fichiers_distants', 'admin_couteau_suisse', "arg=$outil[id]|fichiers_distants&cmd=descrip#cs_action_rapide", '<p>' . _T('couteauprive:distant_aide') . '</p>' . '<p style="margin-top:1em"><strong>' . definir_puce() . ' ' . _T('couteauprive:detail_fichiers_distant') . '</strong></p>' . '<div>' . propre($a) . '</div>' . $b); }