public static function getId() { Once::exec(__FILE__ . 'getId_cache', function () { Nostore::on(); }); return (int) View::getCookie(Session::getName('id')); }
/** * в автозапуск инициализацию вынести нельзя так как нет причин обращаться к Nostore а автозапуск * привязан к обращение к классу **/ public static function init() { $conf = Nostore::$conf; $action = Ans::GET('-nostore', 'string'); if ($action === 'true') { return Nostore::on(); } if ($conf['public']) { //Значения по умолчанию выставляются Nostore::pub(); //Администраторы вкурсе кэша } else { Nostore::off(); //Администраторы не знают как отключать кэш в браузере или для удобства } }
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']; }
<?php use infrajs\access\Access; use infrajs\ans\Ans; use infrajs\nostore\Nostore; $action = Ans::GET('-access'); if ($action == 'false') { if (Access::isTest()) { Access::$conf['test'] = true; } else { Access::$conf['test'] = false; } //Повышать права нельзя, если я не тестер, то нетестером и останусь!!! Access::$conf['debug'] = false; Access::$conf['admin'] = false; Nostore::on(); } else { if ($action == 'true') { Access::test(true); Access::adminSetTime(); Nostore::on(); //Страница с таким параметром не кэшируется в браузере и её можно всегда спокойно вызывать //Устанавливает будто админ только что заходил... это мягко обновит кэши шаблонов и проверит изменения файлов } }
/** * Access::admin(true) - пропускает только если ты администратор, иначе выкидывает окно авторизации * Access::admin(false) - пропускает только если ты НЕ администратор, иначе выкидывает окно авторизации * $ans выводится в json если нажать отмена * Access::admin(array('login','pass'));. */ public static function admin($break = null, $ans = array('msg' => 'Требуется авторизация', 'result' => 0)) { $data = static::$conf['admin']; $_ADM_NAME = $data['login']; $_ADM_PASS = $data['password']; $admin = null; //Неизвестно $realkey = md5($_ADM_NAME . $_ADM_PASS . $_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']); if (is_array($break)) { Nostore::on(); //Если имя в конфиге указано, и переданные данные в массиве соответствуют $admin = $_ADM_NAME && $break[0] === $_ADM_NAME && $break[1] === $_ADM_PASS; if ($admin) { View::setCookie('infra_admin', $realkey); } else { View::setCookie('infra_admin'); } } else { $key = View::getCookie('infra_admin'); $admin = $key === $realkey; if ($break === false) { Nostore::on(); View::setCookie('infra_admin'); $admin = false; } elseif ($break === true && !$admin) { Nostore::on(); //Если имя в конфиге указано, и переданные данные по HTTP соответствуют $admin = $_ADM_NAME && @$_SERVER['PHP_AUTH_USER'] == $_ADM_NAME && @$_SERVER['PHP_AUTH_PW'] == $_ADM_PASS; if ($admin) { View::setCookie('infra_admin', $realkey); } else { header('WWW-Authenticate: Basic realm="Protected Area"'); header('HTTP/1.0 401 Unauthorized'); echo json_encode($ans); exit; } } } return $admin; }