示例#1
0
 public static function getId()
 {
     Once::exec(__FILE__ . 'getId_cache', function () {
         Nostore::on();
     });
     return (int) View::getCookie(Session::getName('id'));
 }
示例#2
0
 /**
  * в автозапуск инициализацию вынести нельзя так как нет причин обращаться к 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();
         //Администраторы не знают как отключать кэш в браузере или для удобства
     }
 }
示例#3
0
文件: Load.php 项目: infrajs/load
 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'];
 }
示例#4
0
文件: infra.php 项目: infrajs/access
<?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();
        //Страница с таким параметром не кэшируется в браузере и её можно всегда спокойно вызывать
        //Устанавливает будто админ только что заходил... это мягко обновит кэши шаблонов и проверит изменения файлов
    }
}
示例#5
0
文件: Access.php 项目: infrajs/access
 /**
  * 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;
 }