sanu0074
Новичок
Ребята, мне нужна помощь в оптимизации скрипта сайта. Данный скрипт является авто-загружаемой либой в CodeIgniter, т.е. это основной скрипт который выполняется на каждой странице сайта.
Мне не нравится как этот скрипт работает, где-то я накосячил, особенно в определении языкового предпочтения юзера, ну и в общем, тоже всё плохо. Помогите правильно все сделать чтобы его прожорливость стала меньше.
Мне не нравится как этот скрипт работает, где-то я накосячил, особенно в определении языкового предпочтения юзера, ну и в общем, тоже всё плохо. Помогите правильно все сделать чтобы его прожорливость стала меньше.
PHP:
<?php
class User {
public $dbh, //соединение
$metaTags = array('meta_t'=>NULL,'meta_d'=>NULL,'meta_k'=>NULL),
$langs = array(
'ru' => array('ru','be','uk','kk','ka','lt','lv','et','mo','az','tg','uz','tk'), //русский
'de' => array('de','sl','hu','rm','nl'), //немецкий
'fr' => array('fr','lb','bi','cm','br'), //французкий
'sv' => array('sv','fi'), //шведский
'zh' => 'zh', //китайский
'es' => array('es','gn','qu','ay'), //испанский
'it' => array('it','la','sc','sl'), //итальянский
'pl' => array('pl','cs','sk','ro'), //польский
'pt' => 'pt', //португальский
'da' => array('da','fo') //датский
),
$langs_text = array(
'en' => 'English',
'ru' => 'Русский',
'de' => 'Deutsch',
'fr' => 'Français',
'sv' => 'Svenska',
'zh' => '中國',
'es' => 'Español',
'it' => 'Italiano',
'pl' => 'Polski',
'pt' => 'Português',
'da' => 'Dansk'
);
function __construct() {
$CI =& get_instance();
define('MODULE_DIR',APPPATH.'views/modules/'); //корневой каталог модулей
define('ROOTCDIR', 'd/');
define('TMP_DIR', 'd/tmp/');
define('CHACHEDIR', 'd/c/');
define('ROOTFILESDIR', '../f/');
define('HOST', $CI->config->base_url(''));
define('DBNAME', 'test-db');
//извлечение первого параметр урла - предполож языковой индекс
$this->dbh = new PDO("mysql:host=localhost;dbname=".DBNAME,'test','1111',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
/***
* проверка параметра обновления сессии
****/
if(!empty($_SESSION['ID'])){
$q = $this->dbh->prepare("SELECT COUNT(*) FROM `usr` WHERE `id`=? AND `r`=?");
$q->execute(array(xss($_SESSION['ID']),1));
if($q->fetchColumn()>0){
//exit('x');
$q = $this->dbh->prepare("UPDATE `usr` SET `r`=? WHERE `id`=?");
$q->execute(array(0,xss($_SESSION['ID'])));
$_SESSION = NULL;
session_destroy();
}
}
require_once APPPATH.'libraries/db.php'; // библиотека для работы с БД
$id = NULL; //ид юзера
$login = NULL; //логин
$lvl = NULL; //ост данные
$avatar = NULL;
$prp = NULL;
$prm = NULL;
$cmtp = NULL;
$cmtm = NULL;
$reg = NULL;
$first_name = NULL;
$last_name = NULL;
$sex = NULL;
$format = FALSE;
$mobile = FALSE;
if (isset($_SESSION['FORMAT'])) { //если авторизация была
$id = $_SESSION['ID'];
$login = $_SESSION['LOGIN'];
$lvl = $_SESSION['LVL'];
$reg = $_SESSION['R'];
$avatar = $_SESSION['AVATAR'];
$prp = $_SESSION['PRP'];
$prm = $_SESSION['PRM'];
$cmtp = $_SESSION['CMTP'];
$cmtm = $_SESSION['CMTM'];
$sex = $_SESSION['SEX'];
$first_name = $_SESSION['F_NAME'];
$last_name = $_SESSION['L_NAME'];
$format = $_SESSION['FORMAT'];
$mobile = $_SESSION['MOBILE'];
}
if(!isset($_SESSION['R']) && !empty($_COOKIE['HS']) && !empty($_COOKIE['ID']) ){
$q = $this->dbh->prepare("SELECT COUNT(*) FROM `usr` WHERE `id`=? AND `hs`=?");
$q->execute(array(xss($_COOKIE['ID']),xss($_COOKIE['HS'])));
if($q->fetchColumn()>0){
$q = $this->dbh->prepare("SELECT `id`,`login`,`lvl`,`first_name`,`last_name`,`sex`,`opt_avatar`,`op`,`om`,`opp`,`opm` FROM `usr` WHERE `id`=? AND `hs`=?");
$q->execute(array(xss($_COOKIE['ID']),xss($_COOKIE['HS'])));
$r = $q->fetch();
$id = $r['id'];
$login = $r['login'];
$lvl = $r['LVL'];
$sex = $r['sex'];
$avatar = $r['opt_avatar'];
$reg = TRUE;
$first_name = $r['first_name'];
$last_name = $r['last_name'];
$prp = $r['op'];
$prm = $r['om'];
$cmtp = $r['opp'];
$cmtm = $r['opm'];
}
}
if(!isset($_SESSION['MOBILE']) ){
$userData = $this->getUserData();
$format = FALSE;
$mobile = 0;
if($userData['mobile']){
$mobile = 1;
}
if($userData['android']){
$mobile = 1;
if((int)$userData['android_version']>=4){
$format = TRUE;
}
}
if($userData['browser']=='chrome' || $userData['browser']=='opera'){
$format = TRUE;
}
}
if(empty($_SESSION['LANG'])){ //если нет в сессии языка то присвоим его по AccepLng
$lang = $this->setHL($CI);
$_SESSION['LANG'] = $lang;
}else {
$lang = $_SESSION['LANG'];
}
$_SESSION['LANG'] = $lang;
$_SESSION['FORMAT'] = $format;
$_SESSION['MOBILE'] = $mobile;
$_SESSION['ID'] = $id;
$_SESSION['LOGIN'] = $login;
$_SESSION['LVL'] = $lvl;
$_SESSION['R'] = $reg;
$_SESSION['AVATAR'] = $avatar;
$_SESSION['F_NAME'] = $first_name;
$_SESSION['L_NAME'] = $last_name;
$_SESSION['SEX'] = $sex;
$_SESSION['PRP'] = $prp;
$_SESSION['PRM'] = $prm;
$_SESSION['CMTP'] = $cmtp;
$_SESSION['CMTM'] = $cmtm;
define('LANG',$lang);
define('ID',$id);
define('LOGIN', $login);
define('lvl', $lvl);
define('REG', $reg);
define('F_NAME', $first_name);
define('L_NAME', $last_name);
define('AVATAR', $avatar);
define('PRP', $prp);
define('PRM', $prm);
define('CMTP', $cmtp);
define('CMTM', $cmtm);
define('SEX', $sex);
define('FORMAT', $format);
define('MOBILE', $mobile);
define('C_LINES', 50);
define('LM_SEC', 51);
define('LM_EL', 52);
define('DATE_FORMAT', "Y-m-d G:i:s");
define('SUPPORT_MAIL', '[email protected]');
/***
***если зареганный то обновим последнее посещение
***/
if(REG){
$q = $this->dbh->prepare("UPDATE `usr` SET `last_visit`=? WHERE `id`=?");
$q->execute(array(date(DATE_FORMAT),ID));
define('NOTIFY', $this->getCountNotify());
}else{
define('NOTIFY',FALSE);
}
}
public function getCountNotify() {
$q = $this->dbh->prepare("SELECT COUNT(*) FROM `ntf` WHERE `u_id`=?");
$q->execute(array(ID));
return $q->fetchColumn();
}
public function setHL($CI) { //получает язык юзера
$CI->load->library('lang_detect');
$lang = $CI->lang_detect->getBestMatch('en', $this->langs);
return $lang;
}
private function getUserData() {
if(preg_match('/Opera Mini/',$_SERVER['HTTP_USER_AGENT'])){$browser='opera_mini';}
else if(preg_match('/Opera/',$_SERVER['HTTP_USER_AGENT'])){$browser='opera';}
else if(preg_match('/Firefox/',$_SERVER['HTTP_USER_AGENT'])){$browser='mozilla';}
else if(preg_match('/Chrome/',$_SERVER['HTTP_USER_AGENT'])){$browser='chrome';}
else if(preg_match('/(MSIE)|(rv)/',$_SERVER['HTTP_USER_AGENT'])){$browser='msie';}
else if(preg_match('/AppleWebKit/',$_SERVER['HTTP_USER_AGENT'])){$browser='safari';}
else{$browser='chrome';}
$data['browser'] = $browser;
require_once APPPATH.'libraries/mobile_detect.php';
$detect = new Mobile_Detect;
$data['android']=$detect->isAndroidOS();
$data['android_version']=$detect->version('Android');
if($detect->isMobile() || $detect->isTablet()){
$data['mobile'] = TRUE;
}else{
$data['mobile'] = FALSE;
}
return $data;
}
//to do more actions....
}
?>