Exemple #1
0
 private function makeMark($data)
 {
     if (!$data) {
         return '';
     }
     self::rksort($data);
     $key = md5(serialize($data));
     $that = $this;
     $mark = Once::exec($this->prefix . $key, function () use($data, $that, $key) {
         $isoutdate = true;
         $raise = $this->raise;
         //На сколько символов разрешено увеличивать хэш
         $note = $this->note;
         //При увеличении на сколько записывается сообщение в лог
         $len = $this->len - 1;
         while ($isoutdate && $len < $this->len + $raise) {
             $len++;
             $mark = substr($key, 0, $len);
             $src = Path::theme('~.marks/' . $that->prefix . $mark . '.json');
             if ($src) {
                 $otherdata = file_get_contents($src);
                 $otherdata = Load::json_decode($otherdata, true);
             } else {
                 $otherdata = false;
             }
             //$otherdata=infra_mem_get($that->prefix.$mark);
             if ($otherdata && is_array($otherdata['data']) && $otherdata['time']) {
                 if ($otherdata['data'] == $data) {
                     $isoutdate = false;
                     //Такая метка уже есть и она правильная
                 } else {
                     //Решается судьба старой метки
                     $isoutdate = time() > $data['time'] + $this->warrantytime;
                 }
             } else {
                 $isoutdate = false;
             }
         }
         if ($len >= $this->len + $note) {
             $that->notice = 'Mark adding to hash ' . ($len - $this->len) . ' symbol(s) for save time warranty ' . print_r($data, true);
             error_log($that->notice);
         }
         if ($isoutdate) {
             //Все метки актуальны... перезаписываем первую
             $that->error = 'Mark rewrite actual hashmark';
             error_log($that->error);
             $mark = substr($key, 0, $this->len);
         }
         $src = Path::theme('~.marks/');
         if (!$src) {
             die('Fatal error no marks dir');
         }
         $src = $src . $this->prefix . $mark . '.json';
         $data = Load::json_encode(array('time' => time(), 'data' => $data));
         $data = file_put_contents($src, $data);
         //infra_mem_set($that->prefix.$mark, array(
         //	'time'=>time(),
         //	'data'=>$data
         //));
         return $mark;
     });
     return $mark;
 }
Exemple #2
0
 private static function load($path)
 {
     $args = array($path);
     $res = Once::exec('Load::load', function ($path) {
         //php файлы эмитация веб запроса
         //всё остальное file_get_content
         $_r_e_s_ = array();
         $_r_e_s_['cache'] = !Nostore::check(function () use($path, &$_r_e_s_) {
             if (Path::isDir($path)) {
                 $p = explode('?', $path, 2);
                 $p[0] .= 'index.php';
                 $path = implode('?', $p);
             }
             $load_path = Path::theme($path);
             $fdata = Load::srcinfo($load_path);
             if ($load_path && $fdata['file']) {
                 $plug = Path::theme($fdata['path']);
                 if ($fdata['ext'] == 'php') {
                     $getstr = Path::toutf($fdata['query']);
                     //get параметры в utf8, с вопросом
                     $getstr = preg_replace("/^\\?/", '', $getstr);
                     parse_str($getstr, $get);
                     if (!$get) {
                         $get = array();
                     }
                     $GET = $_GET;
                     $_GET = $get;
                     $REQUEST = $_REQUEST;
                     $_REQUEST = array_merge($_GET, $_POST, $_COOKIE);
                     $SERVER_QUERY_STRING = $_SERVER['QUERY_STRING'];
                     $_SERVER['QUERY_STRING'] = $getstr;
                     $from_php_old = Load::isphp();
                     Load::isphp(true);
                     ob_start();
                     //headers надо ловить
                     $ans = array();
                     $rrr = (include $plug);
                     $result = ob_get_contents();
                     $resecho = $result;
                     ob_end_clean();
                     Load::isphp($from_php_old);
                     if ($rrr !== 1 && !is_null($rrr)) {
                         //Есть возвращённый результат
                         $result = $rrr;
                         if ($resecho) {
                             //Сообщение об ошибке... далее всё ломаем
                             $result = $resecho . Load::json_encode($result);
                             //Есть вывод в браузер и return
                         }
                     }
                     $_SERVER['QUERY_STRING'] = $SERVER_QUERY_STRING;
                     $_REQUEST =& $REQUEST;
                     $_GET =& $GET;
                     $data = $result;
                     //$data='php file';
                 } else {
                     $data = file_get_contents($plug);
                 }
                 $_r_e_s_ = array();
                 //Если в include это имя использовалось. Главное чтобы оно небыло ссылкой &
                 $_r_e_s_['status'] = 200;
                 $_r_e_s_['value'] = $data;
             } else {
                 $_r_e_s_['status'] = 404;
                 $_r_e_s_['value'] = '';
             }
         });
         return $_r_e_s_;
     }, $args);
     if (!$res['cache']) {
         Nostore::on();
     }
     return $res['value'];
 }
Exemple #3
0
<?php

use infrajs\update\Update;
use infrajs\config\Config;
use infrajs\load\Load;
use infrajs\path\Path;
$conf = Config::get();
$sys = array();
foreach ($conf as $name => $c) {
    if ($c['clutch']) {
        $sys[$name] = array();
        $sys[$name]['clutch'] = $c['clutch'];
    }
}
$json = Load::json_encode($sys);
file_put_contents(Path::$conf['cache'] . '/.infra.json', $json);
Exemple #4
0
        }
    }
    $br = infra_imager_browser();
    $name = preg_replace("/(.*\\/)*/", '', $isrc);
    if (!$name) {
        $name = Path::encode($isrc);
    }
    $name = Imager::toutf($name);
    if (!preg_match('/ff/', $br)) {
        $name = rawurlencode($name);
    }
    if (preg_match('/ie6/', $br)) {
        $name = preg_replace("/\\s/", '%20', $name);
    }
    if (!$type) {
        $type = 'image/jpeg';
    }
    $ans = array('name' => $name, 'type' => $type);
    //return $data;
    //}, $args, isset($_GET['re']));
    //)
    file_put_contents($cachesrc . '.data', $data);
    file_put_contents($cachesrc, Load::json_encode($ans));
    $ans['data'] = $data;
} else {
    $ans = Load::loadJSON($cachesrc);
    $ans['data'] = Load::loadTEXT($cachesrc . '.data');
}
header('Content-Disposition: filename="' . $ans['name'] . '";');
header('content-type: image/' . $ans['type']);
echo $ans['data'];
Exemple #5
0
} elseif ($type == 'takefile') {
    if ($submit) {
        $take = (bool) $_GET['take'];
        $ans['take'] = $take;
        $file = autoedit_theme($id);
        $file = Path::toutf($file);
        if (!$file) {
            $ans['noaction'] = true;
            //Собственно всё осталось как было
        } else {
            $takepath = autoedit_takepath($file);
            if (!$take && is_file($takepath)) {
                $r = @unlink($takepath);
                if (!$r) {
                    return Ans::err($ans, 'Неудалось отпустить файл');
                }
            } elseif ($take && !is_file($takepath)) {
                //Повторно захватывать не будем
                $save = array('path' => $id, 'date' => time(), 'ip' => $_SERVER['REMOTE_ADDR'], 'browser' => $_SERVER['HTTP_USER_AGENT']);
                $r = file_put_contents($takepath, Load::json_encode($save));
                if (!$r) {
                    return Ans::err('Неудалось захватить файл');
                }
            } else {
                $ans['noaction'] = true;
                //Собственно всё осталось как было
            }
        }
    }
}
return Ans::ret($ans);
Exemple #6
0
 function err($ans, $msg)
 {
     $ans['msg'] = $msg;
     echo Load::json_encode($ans);
 }
Exemple #7
0
<?php

namespace infrajs\controller;

use infrajs\router\Router;
use infrajs\load\Load;
if (!is_file('vendor/autoload.php')) {
    chdir('../../../../');
    require_once 'vendor/autoload.php';
    Router::init();
}
$data = Controller::$conf['index'];
Run::exec($data, function &(&$layer) {
    while (@$layer['external'] && !Layer::pop($layer, 'onlyclient')) {
        $ext =& $layer['external'];
        External::checkExt($layer, $ext);
    }
    $r = null;
    return $r;
});
$data = Load::json_encode($data);
?>
infrajs.checkAdd(<?php 
echo $data;
?>
);
Event.handler('Crumb.onchange', function () {
	infrajs.check();
}, 'infrajs');<?php 
Exemple #8
0
<?php

use infrajs\load\Load;
use infrajs\config\Config;
use infrajs\router\Router;
use infrajs\ans\Ans;
if (!is_file('vendor/autoload.php')) {
    chdir('../../../');
    require_once 'vendor/autoload.php';
    Router::init();
}
$js = 'if (!window.infra) window.infra={}; if (!window.infrajs) window.infrajs={}; infra.conf=(' . Load::json_encode(Config::pub()) . '); ';
$js .= 'infra.config = function (name){ if(!name)return infra.conf; return infra.conf[name]; };';
$js .= 'window.Config = {}; Config.get = infra.config; Config.conf = infra.conf;';
return Ans::js($js);
Exemple #9
0
 public static function writeNews($list, $session_id)
 {
     if (!$list) {
         return;
     }
     $db =& Db::pdo();
     global $infra_session_lasttime;
     $isphp = !!$infra_session_lasttime;
     $sql = 'insert into `ses_records`(`session_id`, `name`, `value`, `time`) VALUES(?,?,?,FROM_UNIXTIME(?))';
     $stmt = $db->prepare($sql);
     $sql = 'delete from `ses_records` where `session_id`=? and `name`=? and `time`<=FROM_UNIXTIME(?)';
     $delstmt = $db->prepare($sql);
     Each::exec($list, function &($rec) use($isphp, &$delstmt, &$stmt, $session_id) {
         $r = null;
         if (!$isphp && $rec['name'][0] == 'safe') {
             return $r;
         }
         $name = Sequence::short($rec['name']);
         $delstmt->execute(array($session_id, $name, $rec['time']));
         $stmt->execute(array($session_id, $name, Load::json_encode($rec['value']), $rec['time']));
         if (!$isphp && !$name) {
             //Сохранится safe
             Session::clear();
         }
         return $r;
     });
 }
Exemple #10
0
$conf = Config::get('subscribe');
if (empty($_REQUEST['email'])) {
    return Ans::err($ans, $conf['msg']);
}
if (strlen($_REQUEST['email']) > 1000) {
    return Ans::err($ans, 'Слишком много данных. ' . $conf['msg']);
}
$email = strip_tags($_REQUEST['email']);
$email = trim($email);
$email = Path::encode($email);
$agent = $_SERVER['HTTP_USER_AGENT'];
$ip = $_SERVER['REMOTE_ADDR'];
session_start();
if (empty($_SESSION['submit_time'])) {
    $_SESSION['submit_time'] = 0;
}
if (time() - $_SESSION['submit_time'] < 60) {
    return Ans::err($ans, 'Письмо уже отправлено! Новое сообщение можно будет отправить через 1 минуту!');
}
$_SESSION['submit_time'] = time();
$data = array('email' => $email, 'agent' => $agent, 'ip' => $ip, 'host' => $_SERVER['HTTP_HOST']);
$body = Template::parse('-subscribe/subscribe.mail.tpl', $data);
Mail::toAdmin('Запрос ' . $data['host'] . ' ' . $email, 'noreplay@' . $data['host'], $body);
$src = Path::resolve('~.subscribe.json');
$subs = Load::loadJSON($src);
if (!$subs) {
    $subs = array();
}
$subs[$email] = date('d.m.Y');
file_put_contents($src, Load::json_encode($subs));
return Ans::ret($ans, 'Ваша заявка принята');