function myErrorHandler($no = null, $msg = null, $file = null, $line = null, $plus = null) { $no1 = $no; if (!$no) { #called as shutdown function $error = error_get_last(); if ($error !== NULL && $error["type"] == 1) { $no = E_ERROR; $msg = $error['message']; $file = $error['file']; $line = $error['line']; } } static $errors; if ($no === 1 && $errors) { $s = ''; foreach ($errors as $k => $v) { $s .= '-' . $k . ' ' . $v . "\n"; } $errors = []; file_put_contents(ini_get('error_log'), $s, FILE_APPEND); return; /*records all encountered errors*/ } $errorType = [E_DEPRECATED => 0, E_NOTICE => 0, E_USER_NOTICE => 0, E_STRICT => 0, E_ERROR => 'ERROR', E_WARNING => 'WARNING', E_PARSE => 'PARSING ERROR', E_CORE_ERROR => 'CORE ERROR', E_CORE_WARNING => 'CORE WARNING', E_COMPILE_ERROR => 'COMPILE ERROR', E_COMPILE_WARNING => 'COMPILE WARNING', E_USER_ERROR => 'USER ERROR', E_USER_WARNING => 'USER WARNING', E_RECOVERABLE_ERROR => 'RECOVERABLE ERROR']; if (array_key_exists($no, $errorType)) { $no = $errorType[$no]; } else { $no = 'others'; } #if($error){echo in_array($no,[null,'ignore']);print_r(compact('no','error','msg'));} if (in_array($no, [null, 'ignore'])) { return; } #0 matches all string #specials if (strpos($msg, 'annot redeclare')) { Dbm(SU . ' fun defined ' . $msg, db2()); } if (!$msg) { return 0; } #stand error handler continues here :) $msg=SU; if (strpos($msg, "\n") !== false) { $msg = explode("\n", $msg); $msg = reset($msg); } #no stack trace !! $errors[str_replace('/z/', '', $file) . ':' . $line] = $no . ' : ' . $msg; #if($no=='WARNING')throw new \Exception($msg,$no1);#no catch: uncaught exception .. if ($no == 'ERROR') { #fatal, no more would be handler if (stripos($error['message'], 'Call to undefined function') !== false) { $f = 'lib/fun.map.php'; if (!$_ENV['funmap'] && is_file($f)) { $_ENV['funmap'] = unserialize(file_get_contents($f)); #tion r302 -> fun.php } if (preg_match('#function ([^\\(]+)\\(\\) #', $error['message'], $m)) { if (array_key_exists($m[1], $_ENV['funmap'])) { $load = new $m[1](); #requires autoload.php } } } myErrorHandler(1); ob_end_clean(); header("HTTP/1.0 500 Internal Server Error", 1, 500); if (AJAX) { die('/*500*/'); } #js or css echo "<html><head><title>500 error</title><style>body{background:#003;color:#AAA;}</style></head><body><table width=100% height=100% border=0 align=center><tr><td><center><h1>500 - une erreur est survenue<br>" . (is_string($m) ? $m : '') . "<br><a href='/'><img src='http://x24.fr/immologo1.png'><br>Retour a l'accueil</a></h1><br><form action='http://google.fr/search' method=get><input type=hidden name=q value='site:" . H . "'><input name=q><input type=submit value=rechercher></form></td></tr></table>" . $f . "</body></html>"; die; return 1; } return compact('msg', 'file', 'line'); #for try catch block }
function UnikData($data = '', $db = 'titre', $size = 10) { $res = ''; $sup = $_ENV['ksup']; $s[] = "origindata:" . $data; if (RS == 404) { return; } if (!isgoodurl() or preg_match("~url.data:|image/png;|base64|/(adtech|iframeproxy)~", U) or e(',badurl', 1)) { return; } static $trig; if (!$trig) { Gt('unikdata:start'); $trig = 1; } #Returns only unique Array Data ! For Titles + descriptions (1Mo + 13ms) if (strpos(u3, '.jpg')) { return; } $rev = 1342976292; Gt('udata'); $u = $db . ':' . hu3; #Maj if ($y = param($data, '&')) { extract($y); } #extraction paramètres ...? $origin = Rem($data, CLT(surl)); $data = trim(str_replace(array('»', 'Â', '£', 'N%253BO=D'), ' ', $data), '!?»,. '); if (!$_ENV['auth']) { $u = Preg_Replace("~(#|\\?|&).*~", '', $u); } else { $u = Preg_Replace("~[#|\\?|&][^(&|\\?)" . $_ENV['auth'] . "]+~", '', $u); } #!genius!really nice syntax-"~(#|\?|&)[^(".$_ENV['auth'].")].*~" while (strlen($data) < $size && $sup) { $next = Array_shift($sup); if (!stripos($data, $next)) { $data .= ' ' . $next; } } #push ksup inside if (strpos(SURL, '?', 0)) { Preg_match_all("~=([^&]+)~is", SURL, $t); if ($t) { $t = $t[1]; $data .= ' ' . implode(' ', $t); } } #si titre similaire, pusher le query string $ret = $data; #av("data:$data db:$db ret:$ret".pre($s)); ###Si pas de résultats : invalider le record en placant un "1" dessus if (1 or H == 'a74.fr') { $arg = 'no=1,bd=' . sip; $prev = array(); #previously db -> comes to mysql unikdata:id,url,db,data,score #CREATE TABLE `unikdata`(`id` INT(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,`url` VARCHAR(255) NOT NULL,`data` TEXT NOT NULL,`score` INT(5) NOT NULL) ENGINE = MYISAM;#`db` VARCHAR(25) NOT NULL, $s[] = "select sql_cache data from " . DB . ".unikdata where url=\"{$u}\""; $x = sql5(['cache' => 1, 'sql' => end($s)], "bd=" . sip) or $noexist = 1; #if(strpos(U,'webcam.php')){print_r(compact('y','s','u','x'));die;} $s[] = "result:" . count($x) . "/" . $x . "/data:" . $data; if ($x == $data) { return $data; } else { #on défini le score puis On recherche si des correspondances existent déjà if (!Q && e('tprio,forcetitre', 1)) { $score[$u] = 0; } else { $score[$u] = substr_count(u, '/') * 20 + substr_count(u, '?') * 10 + substr_count(u, '&') * 10 + strlen(u); } /*Score de lui même*/ $datas[$u] = $data; $s[] = "select sql_cache url,score from " . DB . ".unikdata where data=\"{$data}\" and url<>\"{$u}\" and left(url,6) rlike'{$db}:" . H . ".*' order by score asc"; $y = sql5(['cache' => 1, 'sql' => end($s)], $arg); /* select * from ben.unikdata where url='titre:a74.fr/z/webcam.php'; select sql_cache url,score from ben.unikdata where data="Webcams Ski Haute Savoie" and url<>"titre:a74.fr/z/webcam.php" and left(url,6) rlike'titre:a74.fr.*' order by score asc insert into ben.unikdata(url,data,score)VALUES("titre:a74.fr/z/webcam.php","Webcams Ski Haute Savoie","32") */ #Si une ou plusieurs Pages have the same results if ($y) { if (!is_array($y)) { $y = [$y]; } foreach ($y as $t) { $score[$t['url']] = $t['score']; $datas[$t['url']] = $data; } } if (count($score) == 1) { if ($noexist) { return $data; $s[] = "insert ignore into " . DB . ".unikdata(url,data,score)VALUES(\"{$u}\",\"{$data}\",\"{$score[$u]}\")"; sql5(end($s), $arg); } else { return $data; $s[] = "update " . DB . ".unikdata set data=\"{$data}\",score=\"{$score[$u]}\" where url=\"{$u}\""; $x = sql5(end($s), $arg); } #Non car le score est unique ! #if($db=='titre')DbM('unikdata',surl."<li>db?$db / ".hu3."->$data<li>noexist?$noexist<li>sql:".pre($s)."<li>score:".pre($score)."<li>datas:".pre($datas)."<li>res:".pre($res)."<li>GT:".pre($_ENV['dbt']),1); return $data; } else { #si plusieurs résultats pour mêmes données, il peut exister des similarités .. $s[] = "select sql_cache url,data,score from " . DB . ".unikdata where data rlike(\"{$data}*\") and url rlike'{$db}:" . H . ".*' and url<>\"{$u}\" order by score asc"; $y = sql5(['cache' => 1, 'sql' => end($s)], $arg); #les autres résultats proches, on s'en tape ! if ($y) { foreach ($y as $t) { $score[$t['url']] = $t['score']; $datas[$t['url']] = $t['data']; } } Asort($score); foreach ($score as $url => $v) { #calcul des doublons et population de la matrice des résultats $n = 0; $t2 = $temp = $datas[$url]; while (in_Array(accents(strtolower($t2)), $prev) && $n < 20) { #déjà un doublon de score inférieur - 20 opérations maximum if ($trig != 'chiffres' && Preg_match_all("~([0-9]+)~", u, $m)) { $n++; $i = implode('', $m[1]); $t2 = $temp . " {$i}"; $trig = 'chiffres'; continue; } $i++; $t2 = $temp . " {$i}"; #sinon on incrémente } $res[$url] = $t2; $prev[] = accents(strtolower($t2)); #les scores les plus pourris ramassent la merde if ($url == $u) { $ret = $t2; } #calcule le retour pour l'url courante } foreach ($res as $url => $v) { if ($noexist && $url == $u) { $s[] = "insert into " . DB . ".unikdata(url,data,score)VALUES(\"{$u}\",\"{$v}\",\"{$score[$u]}\")"; sql5(end($s), $arg); continue; } $s[] = "update " . DB . ".unikdata set data=\"{$v}\" where url=\"{$url}\""; sql5(end($s), $arg); #Il est possible que l'url courante n'aie pas d'enregistrements !!! } } if ($db == 'titre') { DbM('unikdata', surl . "<li>db?{$db} / " . hu3 . "->{$data}<li>noexist?{$noexist}<li>sql:" . pre($s) . "<li>score:" . pre($score) . "<li>datas:" . pre($datas) . "<li>res:" . pre($res) . "<li>GT:" . pre($_ENV['dbt']), 1); } return $ret; } } else { $u = u3; #local db mode if ($db == 'titre' && filemtime(DR . $db . '.db') < $rev) { Unlink(DR . $db . '.db'); } #Unlink the whole file #if(!strpos(u3,'=')&&$_ENV['soloQ'])$u=Preg_replace("~\?(?!({$_ENV['soloQ']})).*~is",'',u3);#déjà calculée dans autoappend #Determine unique Array 1 while (strlen($data) < $size && $_ENV['ksup']) { $next = Array_shift($_ENV['ksup']); if (!stripos($data, $next)) { $data .= ' ' . $next; } } #push ksup inside Rem($key, $u, 'index'); $x = FGC(DR . $db . '.db'); #if(J9)die(pre($x)); if ($x[$key] && now > $_ENV['rev'] && !strpos($_ENV['args'], 'forcetitre')) { return $x[$key]; } #Si la clé date d'avant la dernière révision on la retourne if ($x[$key] != $data) { #différente ou non définie $score[$key] = substr_count(u, '/') * 20 + substr_count(u, '?') * 10 + substr_count(u, '&') * 10 + strlen(u); #Score de lui même if (strpos($_ENV['args'], ',tprio')) { $score[$key] = 0; } if (strpos(surl, '?', 0)) { Preg_match_all("~=([^&]+)~is", surl, $t); if ($t) { $t = $t[1]; $data .= ' ' . implode(' ', $t); } #si titre similaire, ajouter le query string } #Cas 1 : il y a un chiffre dans l'url et il est différent des titres des autres, s'il y a déjà un chiffre, on remplace ce dernier par 156 if (is_Array($x)) { null; } else { dbM("x is not array-no f*****g way:{$x[$key]}§" . pre($x)); } #elseif(!$x){dbM("uniktitre:x is null ?? wtf ??");return;} $y = Array_map('strtolower', $x); $e = print_r(error_get_last(), 1); #if(stripos($e,'array given'))dBM("uniktitre:$db:{$x[$key]}\n<br>err:".pre($e)."\n<Br>y:".pre($y)."<Br>x:".pre($x)); $found = array_keys($y, strtolower($data)); #Arrive très souvent..; if (count($found) && Preg_match_all("~([0-9]+)~", u, $m)) { #avec des chiffres à injecter dans le titre $i = implode('', $m[1]); $data = $origin . " {$i}"; $found = array_keys($y, strtolower($data)); #last verif if (count($found) < 1) { FAP("tx=1&file=" . DR . $db . '.db', array($u => $data)); db('found:numbers injected in title'); return $data; } #Ok si aucun doublon } if (count($found)) { #des doublons de titres ont été trouvés foreach ($found as $k2) { #si les scores sont égaux, on ne pourra la comparer à un autre numéro.. $score[$k2] = substr_count($k2, '/') * 20 + substr_count($k2, '?') * 10 + substr_count($k2, '&') * 10 + strlen($k2); if ($k2 == 'index') { $score[$k2] = 0; } #raz page 0 } Asort($score); $os = $score; foreach ($score as $k => $v) { #Remplacer le score par les valeurs titre while (in_array($data, $score) && $n < 10) { $n++; $i++; $data = $origin . " {$i}"; } if ($n > 10) { Dbm("{$db} n:{$n}; data:" . pre($data) . "score:" . pre($score)); } $score[$k] = $data; GT('whilescore'); #crée autant } #if($score[0]==$score[self])Best=1;swap titles #if(count($score)<2)$score=end($score); FAP("tx=2,{$key}&file=" . dr . $db . '.db', $score); #DbM('unikdata',surl."<li>data:$data<li>x[key]:".print_r($x[$key],1)."<li>found:".print_r($found,1)."<li>score:".print_r($os,1)."<li>res:".print_r($score,1)); return $score[$key]; } if ($x[$key] && now > $_ENV['rev'] && !strpos($_ENV['args'], 'forcetitre')) { return $x[$key]; } } #swap those values pour url prioritaire!!! if ($x[$key] && now > $_ENV['rev'] && !strpos($_ENV['args'], 'forcetitre')) { return $x[$key]; } #ajouter ici les valeurs des query strings ! if ($data && $key) { FAP("tx=3,{$key}&file=" . dr . $db . '.db', $key, $data); gt('l' . __LINE__); return $data; } DB(surl . ':notitle found:' . count($found) . 'x[key]' . $x[$key] . 'data:' . $data . 'origin:' . $origin); } }
function FPC($fil, $data = '', $A = '') { #alias pour file_put_contents if (e('erver:pre', 1) && strpos($fil, 'tmp')) { e(',pre:no tmp files write'); return; } if (preg_match("~/l/[0-9]{1,3}\\.~", $fil)) { FPC(ERLOGS, "\nfpc:{$fil}:" . SU, 4); } #if(preg_match("~punposts~",$fil))FPC(ERLOGS,"\nfpc:$fil:".SU,4);#est fiable !! #if(strpos($fil,IP)&&!preg_match('~dev/shm/|perf/|block/~',$fil)){FPC(ERLOGS,"rif:".__FILE__.Preg_replace("~\r|\n|\t| {2,}|\.{2,}~",' ',print_r(dbgt(),1))."\n",1);return;} #if(strpos($fil,'l2/'))Pat($fil,$data); static $todo, $file, $in, $i = []; $in++; #if(US=='ben')kill('--'.print_r(dbgt(),1)); if ($fil == 'fpdata' or !$fil) { return; } if (j9 && strpos($fil, 'pdata/')) { kill(pre(db2())); } if ($fil === 2) { return count($todo); } #delayée#Attention à ne pas planter avant if ($fil == 1) { if ($todo) { foreach ($todo as $f => $v) { FPC($f, $v); } } unset($todo); return; } #Simple if ($A == 4) { $todo[$fil] = $data; } #regrouper et delayer les écritures on kill; if (!$fil) { Db('fpc:' . SU); } #Controleur Principal I/O if (strpos($fil, 'tp:/')) { Block('spam?k=' . $fil); } #Db("fpc:$fil via ".SU); if (is_Array($data)) { $data = json_encode($data); } #fixSer($data); #if(strpos(' '.$k,'tp://'))block(); if (H == 'ben' && in_array($fil, array(L2 . 'php.db', L2 . 'debug.db'))) { echo "FPC2Ben host -> debug<li>{$data}"; return; } $gt = GT("fpc{$fil}:0"); $ti = round($gt / 1000); if (!strpos($fil, '557b') && preg_match('~array~i', $fil)) { Db("FPC:{$fil}" . SU, '', 'prio'); } #Temporiser les écritures dans le fichier - Le faire en processus shutdown Génère plein de lignes de débug en trop ! if (!preg_match('~2001|admin~i', u)) { if ($file == $fil) { if (array_key_exists($fil, $i)) { if ($i[$fil] > 3) { Db("3times fpc :{$fil}"); } } } $file = $fil; if ($i[$fil]) { $i[$fil]++; } else { $i[$fil] = 1; } #si on tente d'écrire dans le fichier précédent } #preg_match('/\.([^\.]*$)/', $this->file_src_name, $extension); if ((strlen($data) > 70000000 || $ti > 10) && !preg_match('~Test|admin|2001~i', u) && !preg_match("~err|debug|decalees|\\.size~", $fil) && us != 'ben') { $tri = 1; Db("{$ti} sec," . $i[$fil] . "times (FPC:{$fil})" . su2 . print_r($_ENV, 1), '', 'prio'); } #recursion,strlen($data).#['dbe']['db'] #&&$tri!=1 if ($A == 3) { $f = fmkt($fil); file_put_contents($fil, $data); if (!$f) { $f = 1; } touch($fil, $f); return; } if ($A == 2) { FAP($fil, $data); return; } if (in_Array($A, array('1', 'app', 'append'))) { file_put_contents($fil, $data, FILE_APPEND); return; } File_put_contents($fil, $data); GT("fpc{$fil}:1"); $x = error_get_last(); if (strpos($x['message'], 'participation') && !strpos($x['message'], 'defined index')) { Dbm('error', db2()); } }