From eaab880909ac1d94bf35d867ece41fbf56dab408 Mon Sep 17 00:00:00 2001 From: Mitsukarenai Date: Tue, 5 Feb 2013 00:08:17 +0100 Subject: [PATCH] =?UTF-8?q?=09new=20file:=20=20=20=5Fexperimental/gatitac/?= =?UTF-8?q?index.php=20=09renamed:=20=20=20=20=5Fexperimental/vvb.ini=20->?= =?UTF-8?q?=20=5Fexperimental/gatitac/vvb.ini=20=09new=20file:=20=20=20=5F?= =?UTF-8?q?experimental/icon-logo.svg=20=09modified:=20=20=20=5Fexperiment?= =?UTF-8?q?al/index.php=20=09new=20file:=20=20=20=5Fexperimental/xsaf3.php?= =?UTF-8?q?=20/!\=20NON=20FONCTIONNEL=20-=20pr=C3=A9paration=20du=20code?= =?UTF-8?q?=20pour=20XSAF3=20et=20import=20DB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _experimental/gatitac/index.php | 1 + _experimental/{ => gatitac}/vvb.ini | 0 _experimental/icon-logo.svg | 1 + _experimental/index.php | 463 +++++++++++++++++++++++++++- _experimental/xsaf3.php | 151 +++++++++ 5 files changed, 615 insertions(+), 1 deletion(-) create mode 100755 _experimental/gatitac/index.php rename _experimental/{ => gatitac}/vvb.ini (100%) create mode 100755 _experimental/icon-logo.svg create mode 100755 _experimental/xsaf3.php diff --git a/_experimental/gatitac/index.php b/_experimental/gatitac/index.php new file mode 100755 index 0000000..2481298 --- /dev/null +++ b/_experimental/gatitac/index.php @@ -0,0 +1 @@ + diff --git a/_experimental/vvb.ini b/_experimental/gatitac/vvb.ini similarity index 100% rename from _experimental/vvb.ini rename to _experimental/gatitac/vvb.ini diff --git a/_experimental/icon-logo.svg b/_experimental/icon-logo.svg new file mode 100755 index 0000000..1b73481 --- /dev/null +++ b/_experimental/icon-logo.svg @@ -0,0 +1 @@ +Never surrenderto censorship diff --git a/_experimental/index.php b/_experimental/index.php index b960739..e57fc2b 100755 --- a/_experimental/index.php +++ b/_experimental/index.php @@ -1 +1,462 @@ - +loadXML($data) or die('xml malformé'); + $title = $dom->getElementsByTagName('title'); + return $title->item(0)->nodeValue; + } + +function get_link_from_feed($url) + { + // get site link from feed + $data = file_get_contents("$url"); + $xml = simplexml_load_string($data); // quick feed check + if (isset($xml->entry)) // ATOM feed. + {$result="true";} + elseif (isset($xml->item)) // RSS 1.0 /RDF + {$result="true";} + elseif (isset($xml->channel->item)) // RSS 2.0 + {$result="true";} + else + {$result="false";} + if($result == "false") { die('le flux n\'a pas une syntaxe valide'); } + $check = substr($data, 0, 5); + if($check !== 'channel->link; + if($channel['link'] === NULL) + { + $dom = new DOMDocument; + $dom->loadXML($data) or die('xml malformé'); + $link = $dom->getElementsByTagName('uri'); + return $link->item(0)->nodeValue; + } + else + { + return $channel['link']; + } + } + +function serverUrl() +{ + $https = (!empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS'])=='on')) || $_SERVER["SERVER_PORT"]=='443'; // HTTPS detection. + $serverport = ($_SERVER["SERVER_PORT"]=='80' || ($https && $_SERVER["SERVER_PORT"]=='443') ? '' : ':'.$_SERVER["SERVER_PORT"]); + return 'http'.($https?'s':'').'://'.$_SERVER["SERVER_NAME"].$serverport; +} + +function NoProtocolSiteURL($url) + { + $siteurlnoprototypes = array("http://", "https://"); + $siteurlnoproto = str_replace($siteurlnoprototypes, "", $url); + return $siteurlnoproto; + } + +function DetectRedirect($url) +{ +$response = get_headers($url, 1); +if(!empty($response['Location'])) + { + $response2 = get_headers($response['Location'], 1); + if(!empty($response2['Location'])) + {die('too much redirection');} + else { return $response['Location']; } + } +else + { + return $url; + } +} + +if (isset($_GET['check'])) +{ +$randomtime=rand(86400, 259200); /* intervalle de mise à jour: de 1 à 3 jours (pour éviter que le statut de tous les autoblogs soit rafraichi en bloc et bouffe le CPU) */ +$expire=time() -$randomtime ; + +/* SVG minimalistes */ +$svg_vert='OK'; +$svg_jaune='mv'; +$svg_rouge='err'; +$svg_twitter=''; +$svg_identica=''; +$svg_statusnet=''; + + if(strpos($_GET['check'], 'twitter') !== FALSE) { header('Content-type: image/svg+xml');die($svg_twitter); } + if(strpos($_GET['check'], 'identica') !== FALSE) { header('Content-type: image/svg+xml');die($svg_identica); } + if(strpos($_GET['check'], 'statusnet') !== FALSE) { header('Content-type: image/svg+xml');die($svg_statusnet); } + + $errorlog="./".$_GET['check']."/error.log"; + if(file_exists($errorlog) && filemtime($errorlog) < $expire) { unlink($errorlog); } /* errorlog périmé ? Suppression. */ + if(file_exists($errorlog)) /* errorlog existe encore ? se contenter de lire sa taille pour avoir le statut */ + { + header('Content-type: image/svg+xml'); + if(filesize($errorlog) == "0") {die($svg_vert);} + else if(filesize($errorlog) == "1") {die($svg_jaune);} + else {die($svg_rouge);} + } + else /* ..sinon, lancer la procédure de contrôle */ + { + $ini = parse_ini_file("./".$_GET['check']."/vvb.ini") or die; + header('Content-type: image/svg+xml'); + $headers = get_headers("$ini[FEED_URL]"); + if(empty($headers)) { file_put_contents($errorlog, '..'); die($svg_rouge); } /* le flux est indisponible (typiquement: erreur DNS ou possible censure) - à vérifier */ + $code=explode(" ", $headers[0]); + if($code[1] == "200") { file_put_contents($errorlog, ''); die($svg_vert);} /* code retour 200: flux disponible */ + else {file_put_contents($errorlog, '.'); die($svg_jaune);} /* autre code retour: un truc a changé (redirection, changement de CMS, .. bref vvb.ini doit être corrigé) */ + } +} + +if (isset($_GET['export'])) +// autoblog exporting +{ +header('Content-Type: application/json'); +$directory = "./"; +$subdirs = glob($directory . "*"); +foreach($subdirs as $unit) + { + if(is_dir($unit)) + { + $unit=substr($unit, 2); + $ini = parse_ini_file($unit.'/vvb.ini'); + $config = new stdClass; + foreach ($ini as $key=>$value) + { + $key = strtolower($key); + $config->$key = $value; + } + unset($ini); + $title=$config->site_title; + $url=$config->site_url; + $feed=$config->feed_url; + $reponse[$unit] = array("$title", "$url", "$feed"); + } + } +echo json_encode($reponse); +die; +} + +if (isset($_GET['feedexport'])) +// autoblog exporting -feed only +{ +header('Content-Type: application/json'); +$directory = "./"; +$reponse=""; +$subdirs = glob($directory . "*"); +foreach($subdirs as $unit) + { + if(is_dir($unit)) + { + $unit=substr($unit, 2); + $ini = parse_ini_file($unit.'/vvb.ini'); + $config = new stdClass; + foreach ($ini as $key=>$value) + { + $key = strtolower($key); + $config->$key = $value; + } + unset($ini); + $feed=$config->feed_url; + $reponse=$reponse.";$feed"; + } + } +$reponse=substr($reponse, 1); +echo json_encode(explode(';', $reponse)); +die; +} + +if (isset($_GET['sitemap'])) +// url-list sitemap +{ +header('Content-Type: text/plain'); +$directory = "./"; +$subdirs = glob($directory . "*"); +foreach($subdirs as $unit) + { + if(is_dir($unit)) + { + $unit=substr($unit, 2); + $proto=$_SERVER['HTTPS']?"https://":"http://"; + echo $proto.$_SERVER['SERVER_NAME'].substr($_SERVER['PHP_SELF'], 0, -9)."$unit/"."\n"; + } + } +die; +} + +function escape($str) +{ + return htmlspecialchars($str, ENT_COMPAT, 'UTF-8', false); +} + +$form = '

+
'; + +if(!empty($_GET['via_button']) && !empty($_GET['rssurl']) && $_GET['number'] === '17') +{ + if(isset($_GET['add']) && $_GET['add'] === '1' && !empty($_GET['siteurl']) && !empty($_GET['sitename'])) + { + $rssurl = DetectRedirect(escape($_GET['rssurl'])); + $siteurl = escape($_GET['siteurl']); + $foldername = sha1(NoProtocolSiteURL($siteurl)); + if(substr($siteurl, -1) == '/'){ $foldername2 = sha1(NoProtocolSiteURL(substr($siteurl, 0, -1))); }else{ $foldername2 = sha1(NoProtocolSiteURL($siteurl).'/');} + $sitename = escape($_GET['sitename']); + $sitedomain1 = preg_split('/\//', $siteurl, 0); + $sitedomain2=$sitedomain1[2]; + $sitedomain3=explode(".", $sitedomain2); + $sitedomain3=array_reverse($sitedomain3); + $sitedomain = $sitedomain3[1].'.'.$sitedomain3[0]; + if(file_exists($foldername) || file_exists($foldername2)) { die('Erreur: l\'autoblog existe déjà.'); } + if ( mkdir('./'. $foldername, 0755, false) ) { + $fp = fopen('./'. $foldername .'/index.php', 'w+'); + if( !fwrite($fp, "") ) + {die("Impossible d'écrire le fichier index.php");} + fclose($fp); + $fp = fopen('./'. $foldername .'/vvb.ini', 'w+'); + if( !fwrite($fp, '[VroumVroumBlogConfig] +SITE_TITLE="'. $sitename .'" +SITE_DESCRIPTION="Ce site n\'est pas le site officiel de '. $sitename .'
C\'est un blog automatisé qui réplique les articles de '. $sitename .'" +SITE_URL="'. $siteurl .'" +FEED_URL="'. $rssurl .'" +DOWNLOAD_MEDIA_FROM='.$sitedomain) ) + {die("Impossible d'écrire le fichier vvb.ini");} + fclose($fp); + {die('autoblog crée avec succès.afficher l\'autoblog');} + } +else + {die("Impossible de créer le répertoire.");} + + } + else + { + // checking procedure + $rssurl = DetectRedirect($_GET['rssurl']); + $siteurl = get_link_from_feed($rssurl); + $foldername = sha1(NoProtocolSiteURL($siteurl)); + if(substr($siteurl, -1) == '/'){ $foldername2 = sha1(NoProtocolSiteURL(substr($siteurl, 0, -1))); }else{ $foldername2 = sha1(NoProtocolSiteURL($siteurl).'/');} + $sitename = get_title_from_feed($rssurl); + $sitedomain1 = preg_split('/\//', $siteurl, 0);$sitedomain2=$sitedomain1[2];$sitedomain3=explode(".", $sitedomain2);$sitedomain3=array_reverse($sitedomain3);$sitedomain = $sitedomain3[1].'.'.$sitedomain3[0]; + if(file_exists($foldername) || file_exists($foldername2)) { die('Erreur: l\'autoblog existe déjà.'); } + $form = 'Merci de vérifier les informations suivantes, corrigez si nécessaire.
+
+ +
+
+
+
'; + echo $form; die; + } +} + +if(!empty($_POST['socialaccount']) && !empty($_POST['socialinstance'])) +{ +$socialaccount = strtolower(escape($_POST['socialaccount'])); + if(escape($_POST['socialinstance']) === 'twitter') { $socialinstance = 'twitter'; } + if(escape($_POST['socialinstance']) === 'identica') { $socialinstance = 'identica'; } + if(escape($_POST['socialinstance']) === 'statusnet') { $socialinstance = 'statusnet'; } + $folder = "$socialinstance-$socialaccount";if(file_exists($folder)) { die('Erreur: l\'autoblog existe déjà.'); } + if($socialinstance === 'twitter') { $siteurl = "http://twitter.com/$socialaccount"; $rssurl = "http://api.twitter.com.nyud.net/1/statuses/user_timeline.rss?screen_name=$socialaccount"; } + if($socialinstance === 'identica') { $siteurl = "http://identi.ca/$socialaccount"; $rssurl = "http://identi.ca.nyud.net/api/statuses/user_timeline/$socialaccount.rss"; } + if($socialinstance === 'statusnet' && !empty($_POST['socialurl'])) { $siteurl = "http://".escape($_POST['socialurl'])."/$socialaccount"; $rssurl = "http://".escape($_POST['socialurl'])."/api/statuses/user_timeline/$socialaccount.rss"; } + $headers = get_headers($rssurl, 1); + if (strpos($headers[0], '200') == FALSE) {$error[] = "Flux inaccessible (compte inexistant ?)";} else { } +if( empty($error) ) { + if( !preg_match('#\.\.|/#', $folder) ) { + if ( mkdir('./'. $folder, 0755, false) ) { + $fp = fopen('./'. $folder .'/index.php', 'w+'); + if( !fwrite($fp, "") ) + $error[] = "Impossible d'écrire le fichier index.php"; + fclose($fp); + $fp = fopen('./'. $folder .'/vvb.ini', 'w+'); + if( !fwrite($fp, '[VroumVroumBlogConfig] +SITE_TITLE="'.$socialinstance.'-'.$socialaccount.'" +SITE_DESCRIPTION="AutoMicroblog automatisé de " +SITE_URL='. $siteurl .' +FEED_URL="'. $rssurl .'"') ) + $error[] = "Impossible d'écrire le fichier vvb.ini"; + fclose($fp); + $error[] = 'AutoMicroblog ajouté avec succès.'; + } + else + $error[] = "Impossible de créer le répertoire."; + } + else + $error[] = "Nom de site invalide."; + } + +} + + +if( !empty($_POST) && empty($_POST['socialinstance']) ) { + $error = array(); + if(empty($_POST['rssurl'])) + {$error[] = "Veuillez entrer l'adresse du flux.";} + if(empty($_POST['number'])) + {$error[] = "Le chiffre. Écrivez le chiffre.";} + if($_POST['number'] !== '17') + {$error[] = "C'est pas le bon chiffre.";} + + if(empty($error)) + { + $rssurl = DetectRedirect(escape($_POST['rssurl'])); + if(!empty($_POST['siteurl'])) + { + // check done, writing out + $siteurl = escape($_POST['siteurl']); + $foldername = sha1(NoProtocolSiteURL($siteurl));$sitename = get_title_from_feed($rssurl); + if(substr($siteurl, -1) == '/'){ $foldername2 = sha1(NoProtocolSiteURL(substr($siteurl, 0, -1))); }else{ $foldername2 = sha1(NoProtocolSiteURL($siteurl).'/');} + $sitedomain1 = preg_split('/\//', $siteurl, 0);$sitedomain2=$sitedomain1[2];$sitedomain3=explode(".", $sitedomain2);$sitedomain3=array_reverse($sitedomain3);$sitedomain = $sitedomain3[1].'.'.$sitedomain3[0]; + if(file_exists($foldername) || file_exists($foldername2)) { die('Erreur: l\'autoblog existe déjà.'); } + if ( mkdir('./'. $foldername, 0755, false) ) { + $fp = fopen('./'. $foldername .'/index.php', 'w+'); + if( !fwrite($fp, "") ) + $error[] = "Impossible d'écrire le fichier index.php"; + fclose($fp); + $fp = fopen('./'. $foldername .'/vvb.ini', 'w+'); + if( !fwrite($fp, '[VroumVroumBlogConfig] +SITE_TITLE="'. $sitename .'" +SITE_DESCRIPTION="Ce site n\'est pas le site officiel de '. $sitename .'
C\'est un blog automatisé qui réplique les articles de '. $sitename .'" +SITE_URL="'. $siteurl .'" +FEED_URL="'. $rssurl .'" +DOWNLOAD_MEDIA_FROM='.$sitedomain) ) + $error[] = "Impossible d'écrire le fichier vvb.ini"; + fclose($fp); + $error[] = 'autoblog crée avec succès.afficher l\'autoblog'; + } + else + $error[] = "Impossible de créer le répertoire."; + + + } + else + { + // checking procedure + $rssurl = DetectRedirect($rssurl); + $siteurl = get_link_from_feed($rssurl); + $foldername = sha1(NoProtocolSiteURL($siteurl)); + $sitename = get_title_from_feed($rssurl); + if(substr($siteurl, -1) == '/'){ $foldername2 = sha1(NoProtocolSiteURL(substr($siteurl, 0, -1))); }else{ $foldername2 = sha1(NoProtocolSiteURL($siteurl).'/');} + $sitedomain1 = preg_split('/\//', $siteurl, 0);$sitedomain2=$sitedomain1[2];$sitedomain3=explode(".", $sitedomain2);$sitedomain3=array_reverse($sitedomain3);$sitedomain = $sitedomain3[1].'.'.$sitedomain3[0]; + if(file_exists($foldername) || file_exists($foldername2)) { die('Erreur: l\'autoblog existe déjà.'); } + $form = 'Merci de vérifier les informations suivantes, corrigez si nécessaire.
+

+
+
+
'; + } + + } +} +?> + + + + + Le Projet Autoblog + + + +

LE PROJET AUTOBLOG

+
+ + Note
+ Voici une liste d'autoblogs hébergés sur (plus d'infos sur le projet).

+ Autres fermes
+ → Rechercher

+ Ajouter un compte social

+
+
+ Twitter
+ Identica
+
+ +

+ Ajouter un site web
+Erreur(s) :

'; +} +?> +Si vous souhaitez que héberge un autoblog d'un site,
remplissez le formulaire suivant:

+ +
Pour ajouter facillement un autoblog, glissez ce bouton dans votre barre de marque-pages => ";var%20popup=window.open("","Add%20autoblog",'height=180,width=670');popup.document.writeln('');popup.document.write('Url%20feed%20%20:%20
');var%20feed_links=new%20Array();var%20links=document.getElementsByTagName('link');if(links.length>0){for(var%20i=0;i'+links[i].title+"%20(%20"+links[i].href+"%20)
");}}}popup.document.writeln("");popup.document.writeln("");popup.document.writeln("
");popup.document.writeln("");})();">Projet Autoblog
+
+
+

Autoblogs hébergés

+ +$value) + { + $key = strtolower($key); + $config->$key = $value; + } + $autoblogs[$unit] = ' + '; + unset($ini); + } + } +} +if(!empty($autoblogs)){ + sort($autoblogs, SORT_STRING); + foreach ($autoblogs as $autoblog) { + echo $autoblog; + } +} +?> +
+".count($autoblogs)." autoblogs d'hébergés"; ?> +
+Autoblogs propulsés par VroumVroumBlog 0.2.10 [SQLite] (Domaine Public)
index2 inspiré par Arthur et développé par Mitsu et Oros (Domaine Public) +
Code source du projet +".$HTML_footer; } ?> + + + diff --git a/_experimental/xsaf3.php b/_experimental/xsaf3.php new file mode 100755 index 0000000..03e49ff --- /dev/null +++ b/_experimental/xsaf3.php @@ -0,0 +1,151 @@ + $expire) { + echo "too early"; + die; + }else{ + unlink($lockfile); + file_put_contents($lockfile, ''); + } +}else{ + file_put_contents($lockfile, ''); +} + +define('ROOT_DIR', __DIR__); +function escape($str) { + return htmlspecialchars($str, ENT_COMPAT, 'UTF-8', false); +} + +function serverUrl() { + $https = (!empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS'])=='on')) || $_SERVER["SERVER_PORT"]=='443'; // HTTPS detection. + $serverport = ($_SERVER["SERVER_PORT"]=='80' || ($https && $_SERVER["SERVER_PORT"]=='443') ? '' : ':'.$_SERVER["SERVER_PORT"]); + return 'http'.($https?'s':'').'://'.$_SERVER["SERVER_NAME"].$serverport; +} + +function NoProtocolSiteURL($url) { + $siteurlnoprototypes = array("http://", "https://"); + $siteurlnoproto = str_replace($siteurlnoprototypes, "", $url); + return $siteurlnoproto; +} + +libxml_use_internal_errors(true); +// $max_exec_time = temps max d'exécution en seconde +function xsafimport($xsafremote, $max_exec_time) { + echo "\n*Traitement $xsafremote en maximum $max_exec_time secondes"; + $max_exec_time+=time()-1; // -1 car l'import prend environ 1 seconde +/* détection de ferme autoblog */ if(strpos($xsafremote, '?export') === false) {$get_remote_db="0";} else {$get_remote_db="1";} + $json_import = file_get_contents($xsafremote); + if(!empty($json_import)) { + $to_update=array(); + foreach (json_decode($json_import, true) as $value) { + $infos=""; + if(count($value)==3 && !empty($value['SITE_TYPE']) && !empty($value['SITE_TITLE']) && !empty($value['SITE_URL']) && !empty($value['FEED_URL'])) { + $sitetype = $value['SITE_TYPE']; + $sitename = $value['SITE_TITLE']; + $siteurl = escape($value['SITE_URL']); + $rssurl = escape($value['FEED_URL']); + + $foldername = $sitename;$foldername2 = $sitename; + + if(!file_exists($foldername) && !file_exists($foldername2)) { + if ( mkdir('./'. $foldername, 0755, false) ) { + $fp = fopen('./'. $foldername .'/index.php', 'w+'); + + $response = get_headers($rssurl, 1); // check for redirections + if(!empty($response['Location'])) { + $result="false"; + }else{ + $xml = simplexml_load_file($rssurl); // quick feed check + + if($xml === FALSE){ + $result="false"; + }elseif (isset($xml->entry)) { // ATOM feed. + $result="true"; + }elseif (isset($xml->item)) { // RSS 1.0 /RDF + $result="true"; + }elseif (isset($xml->channel->item)) { // RSS 2.0 + $result="true"; + }else{ + $result="false"; + } + } + + /* autoblog */ + if($result!=="false") { + if( !fwrite($fp, "") ) { + $infos = "\nImpossible d'écrire le fichier index.php dans ".$foldername; + fclose($fp); + }else{ + fclose($fp); + $fp = fopen('./'. $foldername .'/vvb.ini', 'w+'); + if( !fwrite($fp, '[VroumVroumBlogConfig] +SITE_TYPE="'. $sitetype .'" +SITE_TITLE="'. $sitename .'" +SITE_DESCRIPTION="Ce site n\'est pas le site officiel de '. $sitename .'
C\'est un blog automatisé qui réplique les articles de '. $sitename .'" +SITE_URL="'. $siteurl .'" +FEED_URL="'. $rssurl .'"') ){ + fclose($fp); + $infos = "\nImpossible d'écrire le fichier vvb.ini dans ".$foldername; + }else{ + fclose($fp); +/* ============================================================================================================================================================================== */ +/* récupération de la DB distante */ $remote_db=str_replace("?export", $foldername."/articles.db", $xsafremote); copy($remote_db, './'. $foldername .'/articles.db'); +/* ============================================================================================================================================================================== */ + $infos = "\nautoblog crée avec succès : $foldername"; + $to_update[]=serverUrl().preg_replace("/(.*)\/(.*)$/i","$1/".$foldername , $_SERVER['SCRIPT_NAME']); // url of the new autoblog + } + } + } else { + $infos = "\n$rssurl -> flux invalide"; + } + /* end of file writing */ + }else { + $infos = "\nImpossible de créer le répertoire ".$foldername; + } + } else { + /*$infos = "\nFin d'itération ou Le répertoire ".$foldername." existe déjà ($sitename;$siteurl;$rssurl)";*/ + } + if(DEBUG){ + echo $infos; + } + } + echo "\n time : ".(time() - $max_exec_time); + if(time() >= $max_exec_time){ + break; + } + } + /*if(!empty($to_update)){ + if(DEBUG){ + echo "\nupdate of autoblogs ..."; + } + // because it's could be very long, we finish by updating new autoblogs + foreach ($to_update as $url) { + get_headers($url); + } + if(DEBUG){ + echo "done\n\n"; + } + }*/ + } + return; +} + +/* And now, the XSAF links to be imported, with maximal execusion time for import in second ! */ +xsafimport('https://raw.github.com/mitsukarenai/xsaf-bootstrap/master/2.json', 5); +//xsafimport('https://www.ecirtam.net/autoblogs/?export', 5); +//xsafimport('https://autoblog.suumitsu.eu/?export', 5); + +if(DEBUG) { + echo "\n\nXSAF import finished\n\n"; +} +die; +?>