За последние 24 часа нас посетили 55299 программистов и 1682 робота. Сейчас ищут 1097 программистов ...

$_SESSION undefined

Тема в разделе "PHP для новичков", создана пользователем Intrerio, 15 май 2017.

  1. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    Вот такая проблема. Сегодня решил отойти от написания функционала и прошерстить лог сервера на ошибки. Их там огромное количество. Восновном все NOTICE. Большинство я уже почистил и исправил очаг возникновения, а вот с одной ошибкой не могу понять. В логах часто пишет :
    Undefine index user in...
    Привожу файл где как бы стреляет ошибка:
    PHP:
    1.  $usr = User::getUserById($_SESSION['user']);
    Старт сессии я определил в главном файле. ID пользователя если вписать echo $_SESSION['user'] тоже отображаеться. Как поправить эту ошибку?
     
  2. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Не бывает так что ключа нет, но он отображается. Или его нет, или ошибка не там.
     
  3. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    Да и я это понимаю но ...
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    да просто для не авторизованного пользователя у вас не будет существовать индекс user - а проверить или что-то сделать пытаетесь - вот и ругается
    PHP:
    1. $usr = User::getUserById(isset($_SESSION['user']) ? $_SESSION['user'] : 0);
    как то так сделайте
     
  5. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    Спасибо.Попробую.Сейчас разбираюсь с другой ошибкой. Где то вызываеться несуществующий класс и логи забиваються постоянно ошибкой
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    при вызове класса - проверяйте его существование
     
  7. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    [Mon May 15 16:37:48.118806 2017] [:error] [pid 54158] [client 130.180.211.43:60064] PHP Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'SiteController' does not have a method 'actionIndexfsite' in /home/admin/web/my.ctdominanta.com.ua/public_html/components/Router.php on line 67, referer: http://my
    .ctdominanta.com.ua/products/oscpv/add

    И не могу понять что именно вызываеться
     
  8. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    попробуйте дословно перевести с английского.
    указан класс, указан метод которого нет и даже номер строки где идет вызов...
    а нам тут гадать по фото ошибки негоже...
     
  9. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    Это все я уже понял, только такая ошибка возникает если нет либо return либо класса. Вот и трабл в том что в роутере все нормально. Есть что то что либо не возвращаеться либо не существует. Пересмотрел все ошибки и понимаю что такая ошибка возникает на каждой страничке сайта, следственно она сидит в каком то глобальном классе который используеться на каждой страничке
     
  10. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    Не сочтите за рекламу, во всем просторе интернета нашел точь в точь проблему как у меня: http://phpforum.su/index.php?showtopic=88798&st=45&#entry3130831 . Может кто то сможет понять в чем дело. Я понимаю лишь что проблемма кроеться в регулярке разбития пути
     
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    @Intrerio, нормальным английским языком написано. В call_user_func надо передавать нормальный callable, а ты передаёшь имя несуществующего метода. В класса SiteController нужно сделать метод с названием actionIndexfsite, чтобы это не означало. Тогда всё будет нормально. Возможно, ты просто опечатался где-то.
     
  12. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    Я читать умею причем на 5 язиках. Но проблема тут не в существовании actionIndexfsite, потому что в завивисмости от странички actionIndexfsite меняеться на actionIndexcsite на actionIndexdsite. Если прочитаешь тему на вышеуказаном форуме то поймешь что вся проблема с Router.php где есть
    Код (Text):
    1. if (preg_match("$uriPattern", $uri)) {
    советуют поменять на
    Код (Text):
    1. if (preg_match("^$uriPattern$", $uri)) {
    в таком случае ошибка пропадает но если использовать аякс запрос то появляеться другая ошибка. Если надо могу вывести код роутера
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Ну так возьми откуда-нибудь приличный роутер :)
     
  14. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    Этот не подойдет :) ?
    PHP:
    1. <?php
    2.  
    3. class Router
    4. {
    5.  
    6.     private $routes;
    7.  
    8.     public function __construct()
    9.     {
    10.         $routesPath = ROOT . '/config/routes.php';
    11.  
    12.         $this->routes = include($routesPath);
    13.     }
    14.  
    15.     /**
    16.      * Возвращает строку запроса
    17.      */
    18.     private function getURI()
    19.     {
    20.         if (!empty($_SERVER['REQUEST_URI'])) {
    21.             return trim($_SERVER['REQUEST_URI'], '/');
    22.         }
    23.     }
    24.  
    25.     public function run()
    26.     {
    27.         // Получаем строку запроса
    28.         $uri = $this->getURI();
    29.  
    30.         // Проверяем наличие такого запроса в массиве маршрутов (routes.php)
    31.         foreach ($this->routes as $uriPattern => $path) {
    32.  
    33.             // Сравниваем $uriPattern и $uri
    34.             if (preg_match("~$uriPattern~", $uri)) {
    35.  
    36.                 // Получаем внутренний путь из внешнего согласно правилу.
    37.                 $internalRoute = preg_replace("~$uriPattern~", $path, $uri);
    38.                 //var_dump($internalRoute);
    39.                 // Определить контроллер, action, параметры
    40.  
    41.                 $segments = explode('/', $internalRoute);
    42.                 $segments_module = explode('/', $internalRoute);
    43.  
    44.                 $controllerName = array_shift($segments) . 'Controller';
    45.                 $controllerName = ucfirst($controllerName);
    46.                
    47.                 $moduleName = $segments_module[0];;
    48.                 $moduleName = ucfirst($moduleName);
    49.  
    50.                 $actionName = 'action' . ucfirst(array_shift($segments));
    51.  
    52.                 $parameters = $segments;
    53.  
    54.                 // Подключить файл класса-контроллера
    55.                 $controllerFile = ROOT . '/modules/'.$moduleName.'/'.
    56.                         $controllerName . '.php';
    57.                 if (file_exists($controllerFile)) {
    58.                     include_once($controllerFile);
    59.                 }
    60.  
    61.                 // Создать объект, вызвать метод (т.е. action)
    62.                 $controllerObject = new $controllerName;
    63.  
    64.                 /* Вызываем необходимый метод ($actionName) у определенного
    65.                  * класса ($controllerObject) с заданными ($parameters) параметрами
    66.                  */
    67.                
    68.                     $result = call_user_func_array(array($controllerObject, $actionName), $parameters);
    69.                
    70.                            
    71.                 // Если метод контроллера успешно вызван, завершаем работу роутера
    72.                 if ($result != null) {
    73.                     break;
    74.                 }else{
    75.                     header('Location: /index.php');
    76.                 }
    77.             }
    78.         }
    79.     }
    80.  
    81. }
    --- Добавлено ---
    А это сами роуты
    PHP:
    1. <?php
    2.  
    3. return array(  
    4.     //Авторизація
    5.     'login' => 'user/login',
    6.     'logout' => 'user/logout',
    7.    
    8.     //залишки  
    9.     'remains/oscpv/pidrozdil/([0-9]+)' => 'remains/oscpvPidrozdil/$1',
    10.     'remains/oscpv/viddilennia/([0-9]+)' => 'remains/oscpvViddilennia/$1',
    11.     'remains/oscpv/user/([0-9]+)' => 'remains/oscpvUser/$1',  
    12.     'remains/oscpv' => 'remains/oscpv',
    13.    
    14.     //оперативність
    15.     'oper/oscpv/pidrozdil/([0-9]+)' => 'oper/oscpvPidrozdil/$1',
    16.     'oper/transfer/register/([0-9]+)' => 'oper/transferRegister/$1',
    17.     'oper/transfer/pidrozdil/([0-9]+)' => 'oper/transferPidrozdil/$1',
    18.     'oper/transfer' => 'oper/transferIndex',
    19.     'oper/oscpv' => 'oper/oscpvIndex',
    20.    
    21.     //Пошук
    22.     'search/blanks/oscpv' => 'search/blanksOscpvIndex',  
    23.     'search/cars' => 'search/carsIndex',
    24.     'search/users' => 'search/usersIndex',
    25.    
    26.     //пропозиції
    27.     'proposal/show/([0-9]+)' => 'proposal/show/$1',
    28.     'proposal/add' => 'proposal/add',
    29.     'proposal' => 'proposal/index',
    30.    
    31.     //ОСЦПВ
    32.     'products/oscpv/searchPolisForm' => 'oscpv/searchPolisForm',
    33.     'products/oscpv/checkPolisForm' => 'oscpv/checkPolisForm',
    34.     'products/oscpv/searchMarkaForm' => 'oscpv/searchMarkaForm',
    35.     'products/oscpv/searchModelForm' => 'oscpv/searchModelForm',
    36.     'products/oscpv/calcPriceForm' => 'oscpv/calcPriceForm',
    37.     'products/oscpv/searchZonaForm' => 'oscpv/searchZonaForm',
    38.     'products/oscpv/searchOscpvClient' => 'oscpv/searchOscpvClient',
    39.     'products/oscpv/searchOscpvCar' => 'oscpv/searchOscpvCar',
    40.     'products/oscpv/checkBonus' => 'oscpv/checkBonus',
    41.     'products/oscpv/addFoundClient' => 'oscpv/addFoundClient',
    42.     'products/oscpv/addFoundCar' => 'oscpv/addFoundCar',
    43.     'products/oscpv/getDateEnd' => 'oscpv/getDateEnd',
    44.     'products/oscpv/print/([0-9]+)/min' => 'oscpv/print/$1/min',
    45.     'products/oscpv/print/([0-9]+)/standart' => 'oscpv/print/$1/standart',
    46.     'products/oscpv/print/([0-9]+)/all' => 'oscpv/print/$1/all',
    47.     'products/oscpv/edit/([0-9]+)' => 'oscpv/edit/$1',
    48.     'products/oscpv/add' => 'oscpv/add',
    49.     'products/oscpv/done' => 'oscpv/save',
    50.     'products/oscpv/new' => 'oscpv/newSave',
    51.     'products/oscpv/new' => 'oscpv/new',
    52.     'products/oscpv/prolong' => 'oscpv/prolong',
    53.     'products/oscpv/uploadScan/([0-9]+)' => 'oscpv/uploadScan/$1',
    54.     'products/oscpv/scan/show/([0-9]+)' => 'oscpv/showScan/$1',
    55.     'products/oscpv/show/([0-9]+)' => 'oscpv/show/$1',
    56.     'products/oscpv/checkPolis' => 'oscpv/checkPolis',
    57.    
    58.     //МТСБУ
    59.     'mtsbu/new/([0-9]+)/([0-9]+)' => 'mtsbu/new/$1/$2',  
    60.     'mtsbu/NewRegisters' => 'mtsbu/newRegisters',
    61.     'mtsbu/UploadNewRegister' => 'mtsbu/uploadNewRegister',
    62.     'mtsbu/show/([0-9]+)' => 'mtsbu/show/$1',    
    63.     'mtsbu/preloaded' => 'mtsbu/preloaded',
    64.     'mtsbu/ofloaded' => 'mtsbu/ofloaded',
    65.     'mtsbu/closed' => 'mtsbu/closed',  
    66.     'mtsbu/new' => 'mtsbu/new/0/0',
    67.    
    68.     //перевірка ОСЦПВ
    69.     'check/oscpv/saveCheck' => 'oscpvPerevirka/saveCheck',  
    70.     'check/oscpv/saveTransfer' => 'oscpvPerevirka/saveTransfer',
    71.     'check/oscpv/([0-9]+)' => 'oscpvPerevirka/show/$1',
    72.     'check/oscpv' => 'oscpvPerevirka/index',
    73.    
    74.     //переміщення бланків
    75.     'transfer/makeAkt' => 'transfer/makeAkt',
    76.     'transfer/changeStatus' => 'transfer/changeStatus',
    77.     'transfer/blanks/pidrozdil/([0-9]+)' => 'transfer/rd/$1',
    78.     'transfer/blanks/viddilennia/([0-9]+)' => 'transfer/vd/$1',
    79.     'transfer/blanks/agent/([0-9]+)' => 'transfer/agent/$1',
    80.     'transfer/blanks/search/pidrozdil' => 'transfer/searchPolisRd',
    81.     'transfer/blanks/search/viddilennia' => 'transfer/searchPolisVd',
    82.     'transfer/blanks/search/agent' => 'transfer/searchPolisAgent',
    83.     'transfer/blanks/pidrozdil' => 'transfer/rdIndex',
    84.     'transfer/blanks/viddilennia' => 'transfer/vdIndex',
    85.     'transfer/blanks/agent' => 'transfer/agentIndex',
    86.    
    87.     //viber
    88.     'viber/admin' => 'viber/adminScan',
    89.     'viber/changeStatus' => 'viber/changeStatus',
    90.     'viber/searchPolis' => 'viber/searchPolis',
    91.     'viber/scanDir' => 'viber/scanDir',  
    92.     'viber/statistic/show/([0-9]+)' => 'viber/showOperators/$1',
    93.     'viber/statistic/operators' => 'viber/statisticOperators',
    94.     'viber/statistic/operation/operators' => 'viber/statisticOperationOperators',
    95.     'viber/statistic/insert' => 'viber/statisticInsert',
    96.     'viber/statistic/scans' => 'viber/statisticScans',  
    97.     'viber/statistic' => 'viber/statisticIndex',
    98.     'viber' => 'viber/index',
    99.    
    100.     //фінанси
    101.     'finance/savePay' => 'finance/savePay',
    102.     'finance/unPay' => 'finance/unPay',
    103.     'finance/show/([0-9]+)' => 'finance/show/$1',
    104.     'finance/excel/([0-9]+)' => 'finance/excel/$1',
    105.     'finance/archive/([0-9]+)' => 'finance/archiveShow/$1',
    106.     'finance/archive' => 'finance/archive',
    107.     'finance' => 'finance/index',
    108.    
    109.     //підрозділи
    110.     'pidrozdil/edit/([0-9]+)' => 'pidrozdil/edit/$1',
    111.     'pidrozdil/searchUser' => 'pidrozdil/searchUser',
    112.     'pidrozdil/all' => 'pidrozdil/all',
    113.     'pidrozdil/show/([0-9]+)' => 'pidrozdil/show/$1',
    114.     'pidrozdil/add' => 'pidrozdil/add',
    115.     'pidrozdil/changeDirector/([0-9]+)' => 'pidrozdil/changeDirector/$1',
    116.     'pidrozdil' => 'pidrozdil/index',
    117.    
    118.     //відділення
    119.     'viddilennia/show/([0-9]+)' => 'viddilennia/show/$1',
    120.     'viddilennia/changeDirector/([0-9]+)' => 'viddilennia/changeDirector/$1',
    121.     'viddilennia/my' => 'viddilennia/my',
    122.     'viddilennia/rd' => 'viddilennia/rd',
    123.     'viddilennia/all' => 'viddilennia/all',
    124.    
    125.    
    126.     //реєстри
    127.     'registers/deleteBlankFromRegister' => 'register/deleteBlankFromRegister',
    128.     'registers/makeNewOscpvRegister' => 'register/makeNewOscpvRegister',
    129.     'registers/rd/excel/([0-9]+)' => 'excelRegisters/oscpvRdOneRegister/$1',
    130.     'registers/rd/show/([0-9]+)' => 'register/oscpvShow/$1',
    131.     'registers/rd/page-([0-9]+)' => 'register/oscpvRdIndex/$1',
    132.     'registers/rd/monthly' => 'register/monthRegisters',
    133.     'registers/rd' => 'register/oscpvRdIndex',
    134.     'registers/vd' => 'register/oscpvVdIndex',
    135.     'registers/doplata/all' => 'register/doplataAll',
    136.     'registers/doplata/rd' => 'register/doplataRd',
    137.     'registers/doplata/vd' => 'register/doplataVd',
    138.     'registers/doplata/agent' => 'register/doplataAgent',
    139.    
    140.     //бланки
    141.     'blanks/insert' => 'blanks/insert',
    142.    
    143.    
    144.     //права доступу
    145.     'rules/group/([0-9]+)' => 'rules/groupRules/$1',
    146.     'rules/give' => 'rules/give',
    147.     'rules' => 'rules/index',
    148.    
    149.     //новини
    150.     'news/add' => 'news/add',
    151.    
    152.     //центри
    153.     'police/delete' => 'police/delete',
    154.     'police/edit/([0-9]+)' => 'police/edit/$1',
    155.     'police' => 'police/index',
    156.    
    157.     //користувачі
    158.     'user/([0-9]+)' => 'user/show/$1',
    159.    
    160.     //ТЗ
    161.     'car/([0-9]+)' => 'cars/show/$1',
    162.    
    163.     //тест
    164.     'test/one' => 'viber/test',
    165.    
    166.     // Главная страница
    167.     'index.php/page-([0-9]+)' => 'site/index/$1', // actionIndex в SiteController
    168.     'page-([0-9]+)' => 'site/index/$1', // actionIndex в SiteController
    169.     'index.php' => 'site/index', // actionIndex в SiteController
    170.     '' => 'site/index', // actionIndex в SiteController
    171. );
     
  15. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Ну если он самостоятельно создаёт имена неизвестных функций :) Выглядит вроде ничего, но если не отлажен, я бы выкинул. Или задача написать самому? Роутеров - полный гитхаб
     
  16. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    А можете посоветовать простой роутер?
     
  17. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    Все исправил. Теперь все хорошо работает и без ошибок.Кому нежен будет мой вариант выхода из проблемы - пишите