Вот такая проблема. Сегодня решил отойти от написания функционала и прошерстить лог сервера на ошибки. Их там огромное количество. Восновном все NOTICE. Большинство я уже почистил и исправил очаг возникновения, а вот с одной ошибкой не могу понять. В логах часто пишет : Undefine index user in... Привожу файл где как бы стреляет ошибка: PHP: $usr = User::getUserById($_SESSION['user']); Старт сессии я определил в главном файле. ID пользователя если вписать echo $_SESSION['user'] тоже отображаеться. Как поправить эту ошибку?
да просто для не авторизованного пользователя у вас не будет существовать индекс user - а проверить или что-то сделать пытаетесь - вот и ругается PHP: $usr = User::getUserById(isset($_SESSION['user']) ? $_SESSION['user'] : 0); как то так сделайте
Спасибо.Попробую.Сейчас разбираюсь с другой ошибкой. Где то вызываеться несуществующий класс и логи забиваються постоянно ошибкой
[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 И не могу понять что именно вызываеться
попробуйте дословно перевести с английского. указан класс, указан метод которого нет и даже номер строки где идет вызов... а нам тут гадать по фото ошибки негоже...
Это все я уже понял, только такая ошибка возникает если нет либо return либо класса. Вот и трабл в том что в роутере все нормально. Есть что то что либо не возвращаеться либо не существует. Пересмотрел все ошибки и понимаю что такая ошибка возникает на каждой страничке сайта, следственно она сидит в каком то глобальном классе который используеться на каждой страничке
Не сочтите за рекламу, во всем просторе интернета нашел точь в точь проблему как у меня: http://phpforum.su/index.php?showtopic=88798&st=45&#entry3130831 . Может кто то сможет понять в чем дело. Я понимаю лишь что проблемма кроеться в регулярке разбития пути
@Intrerio, нормальным английским языком написано. В call_user_func надо передавать нормальный callable, а ты передаёшь имя несуществующего метода. В класса SiteController нужно сделать метод с названием actionIndexfsite, чтобы это не означало. Тогда всё будет нормально. Возможно, ты просто опечатался где-то.
Я читать умею причем на 5 язиках. Но проблема тут не в существовании actionIndexfsite, потому что в завивисмости от странички actionIndexfsite меняеться на actionIndexcsite на actionIndexdsite. Если прочитаешь тему на вышеуказаном форуме то поймешь что вся проблема с Router.php где есть Код (Text): if (preg_match("$uriPattern", $uri)) { советуют поменять на Код (Text): if (preg_match("^$uriPattern$", $uri)) { в таком случае ошибка пропадает но если использовать аякс запрос то появляеться другая ошибка. Если надо могу вывести код роутера
Этот не подойдет ? PHP: <?php class Router { private $routes; public function __construct() { $routesPath = ROOT . '/config/routes.php'; $this->routes = include($routesPath); } /** * Возвращает строку запроса */ private function getURI() { if (!empty($_SERVER['REQUEST_URI'])) { return trim($_SERVER['REQUEST_URI'], '/'); } } public function run() { // Получаем строку запроса $uri = $this->getURI(); // Проверяем наличие такого запроса в массиве маршрутов (routes.php) foreach ($this->routes as $uriPattern => $path) { // Сравниваем $uriPattern и $uri if (preg_match("~$uriPattern~", $uri)) { // Получаем внутренний путь из внешнего согласно правилу. $internalRoute = preg_replace("~$uriPattern~", $path, $uri); //var_dump($internalRoute); // Определить контроллер, action, параметры $segments = explode('/', $internalRoute); $segments_module = explode('/', $internalRoute); $controllerName = array_shift($segments) . 'Controller'; $controllerName = ucfirst($controllerName); $moduleName = $segments_module[0];; $moduleName = ucfirst($moduleName); $actionName = 'action' . ucfirst(array_shift($segments)); $parameters = $segments; // Подключить файл класса-контроллера $controllerFile = ROOT . '/modules/'.$moduleName.'/'. $controllerName . '.php'; if (file_exists($controllerFile)) { include_once($controllerFile); } // Создать объект, вызвать метод (т.е. action) $controllerObject = new $controllerName; /* Вызываем необходимый метод ($actionName) у определенного * класса ($controllerObject) с заданными ($parameters) параметрами */ $result = call_user_func_array(array($controllerObject, $actionName), $parameters); // Если метод контроллера успешно вызван, завершаем работу роутера if ($result != null) { break; }else{ header('Location: /index.php'); } } } } } --- Добавлено --- А это сами роуты PHP: <?php return array( //Авторизація 'login' => 'user/login', 'logout' => 'user/logout', //залишки 'remains/oscpv/pidrozdil/([0-9]+)' => 'remains/oscpvPidrozdil/$1', 'remains/oscpv/viddilennia/([0-9]+)' => 'remains/oscpvViddilennia/$1', 'remains/oscpv/user/([0-9]+)' => 'remains/oscpvUser/$1', 'remains/oscpv' => 'remains/oscpv', //оперативність 'oper/oscpv/pidrozdil/([0-9]+)' => 'oper/oscpvPidrozdil/$1', 'oper/transfer/register/([0-9]+)' => 'oper/transferRegister/$1', 'oper/transfer/pidrozdil/([0-9]+)' => 'oper/transferPidrozdil/$1', 'oper/transfer' => 'oper/transferIndex', 'oper/oscpv' => 'oper/oscpvIndex', //Пошук 'search/blanks/oscpv' => 'search/blanksOscpvIndex', 'search/cars' => 'search/carsIndex', 'search/users' => 'search/usersIndex', //пропозиції 'proposal/show/([0-9]+)' => 'proposal/show/$1', 'proposal/add' => 'proposal/add', 'proposal' => 'proposal/index', //ОСЦПВ 'products/oscpv/searchPolisForm' => 'oscpv/searchPolisForm', 'products/oscpv/checkPolisForm' => 'oscpv/checkPolisForm', 'products/oscpv/searchMarkaForm' => 'oscpv/searchMarkaForm', 'products/oscpv/searchModelForm' => 'oscpv/searchModelForm', 'products/oscpv/calcPriceForm' => 'oscpv/calcPriceForm', 'products/oscpv/searchZonaForm' => 'oscpv/searchZonaForm', 'products/oscpv/searchOscpvClient' => 'oscpv/searchOscpvClient', 'products/oscpv/searchOscpvCar' => 'oscpv/searchOscpvCar', 'products/oscpv/checkBonus' => 'oscpv/checkBonus', 'products/oscpv/addFoundClient' => 'oscpv/addFoundClient', 'products/oscpv/addFoundCar' => 'oscpv/addFoundCar', 'products/oscpv/getDateEnd' => 'oscpv/getDateEnd', 'products/oscpv/print/([0-9]+)/min' => 'oscpv/print/$1/min', 'products/oscpv/print/([0-9]+)/standart' => 'oscpv/print/$1/standart', 'products/oscpv/print/([0-9]+)/all' => 'oscpv/print/$1/all', 'products/oscpv/edit/([0-9]+)' => 'oscpv/edit/$1', 'products/oscpv/add' => 'oscpv/add', 'products/oscpv/done' => 'oscpv/save', 'products/oscpv/new' => 'oscpv/newSave', 'products/oscpv/new' => 'oscpv/new', 'products/oscpv/prolong' => 'oscpv/prolong', 'products/oscpv/uploadScan/([0-9]+)' => 'oscpv/uploadScan/$1', 'products/oscpv/scan/show/([0-9]+)' => 'oscpv/showScan/$1', 'products/oscpv/show/([0-9]+)' => 'oscpv/show/$1', 'products/oscpv/checkPolis' => 'oscpv/checkPolis', //МТСБУ 'mtsbu/new/([0-9]+)/([0-9]+)' => 'mtsbu/new/$1/$2', 'mtsbu/NewRegisters' => 'mtsbu/newRegisters', 'mtsbu/UploadNewRegister' => 'mtsbu/uploadNewRegister', 'mtsbu/show/([0-9]+)' => 'mtsbu/show/$1', 'mtsbu/preloaded' => 'mtsbu/preloaded', 'mtsbu/ofloaded' => 'mtsbu/ofloaded', 'mtsbu/closed' => 'mtsbu/closed', 'mtsbu/new' => 'mtsbu/new/0/0', //перевірка ОСЦПВ 'check/oscpv/saveCheck' => 'oscpvPerevirka/saveCheck', 'check/oscpv/saveTransfer' => 'oscpvPerevirka/saveTransfer', 'check/oscpv/([0-9]+)' => 'oscpvPerevirka/show/$1', 'check/oscpv' => 'oscpvPerevirka/index', //переміщення бланків 'transfer/makeAkt' => 'transfer/makeAkt', 'transfer/changeStatus' => 'transfer/changeStatus', 'transfer/blanks/pidrozdil/([0-9]+)' => 'transfer/rd/$1', 'transfer/blanks/viddilennia/([0-9]+)' => 'transfer/vd/$1', 'transfer/blanks/agent/([0-9]+)' => 'transfer/agent/$1', 'transfer/blanks/search/pidrozdil' => 'transfer/searchPolisRd', 'transfer/blanks/search/viddilennia' => 'transfer/searchPolisVd', 'transfer/blanks/search/agent' => 'transfer/searchPolisAgent', 'transfer/blanks/pidrozdil' => 'transfer/rdIndex', 'transfer/blanks/viddilennia' => 'transfer/vdIndex', 'transfer/blanks/agent' => 'transfer/agentIndex', //viber 'viber/admin' => 'viber/adminScan', 'viber/changeStatus' => 'viber/changeStatus', 'viber/searchPolis' => 'viber/searchPolis', 'viber/scanDir' => 'viber/scanDir', 'viber/statistic/show/([0-9]+)' => 'viber/showOperators/$1', 'viber/statistic/operators' => 'viber/statisticOperators', 'viber/statistic/operation/operators' => 'viber/statisticOperationOperators', 'viber/statistic/insert' => 'viber/statisticInsert', 'viber/statistic/scans' => 'viber/statisticScans', 'viber/statistic' => 'viber/statisticIndex', 'viber' => 'viber/index', //фінанси 'finance/savePay' => 'finance/savePay', 'finance/unPay' => 'finance/unPay', 'finance/show/([0-9]+)' => 'finance/show/$1', 'finance/excel/([0-9]+)' => 'finance/excel/$1', 'finance/archive/([0-9]+)' => 'finance/archiveShow/$1', 'finance/archive' => 'finance/archive', 'finance' => 'finance/index', //підрозділи 'pidrozdil/edit/([0-9]+)' => 'pidrozdil/edit/$1', 'pidrozdil/searchUser' => 'pidrozdil/searchUser', 'pidrozdil/all' => 'pidrozdil/all', 'pidrozdil/show/([0-9]+)' => 'pidrozdil/show/$1', 'pidrozdil/add' => 'pidrozdil/add', 'pidrozdil/changeDirector/([0-9]+)' => 'pidrozdil/changeDirector/$1', 'pidrozdil' => 'pidrozdil/index', //відділення 'viddilennia/show/([0-9]+)' => 'viddilennia/show/$1', 'viddilennia/changeDirector/([0-9]+)' => 'viddilennia/changeDirector/$1', 'viddilennia/my' => 'viddilennia/my', 'viddilennia/rd' => 'viddilennia/rd', 'viddilennia/all' => 'viddilennia/all', //реєстри 'registers/deleteBlankFromRegister' => 'register/deleteBlankFromRegister', 'registers/makeNewOscpvRegister' => 'register/makeNewOscpvRegister', 'registers/rd/excel/([0-9]+)' => 'excelRegisters/oscpvRdOneRegister/$1', 'registers/rd/show/([0-9]+)' => 'register/oscpvShow/$1', 'registers/rd/page-([0-9]+)' => 'register/oscpvRdIndex/$1', 'registers/rd/monthly' => 'register/monthRegisters', 'registers/rd' => 'register/oscpvRdIndex', 'registers/vd' => 'register/oscpvVdIndex', 'registers/doplata/all' => 'register/doplataAll', 'registers/doplata/rd' => 'register/doplataRd', 'registers/doplata/vd' => 'register/doplataVd', 'registers/doplata/agent' => 'register/doplataAgent', //бланки 'blanks/insert' => 'blanks/insert', //права доступу 'rules/group/([0-9]+)' => 'rules/groupRules/$1', 'rules/give' => 'rules/give', 'rules' => 'rules/index', //новини 'news/add' => 'news/add', //центри 'police/delete' => 'police/delete', 'police/edit/([0-9]+)' => 'police/edit/$1', 'police' => 'police/index', //користувачі 'user/([0-9]+)' => 'user/show/$1', //ТЗ 'car/([0-9]+)' => 'cars/show/$1', //тест 'test/one' => 'viber/test', // Главная страница 'index.php/page-([0-9]+)' => 'site/index/$1', // actionIndex в SiteController 'page-([0-9]+)' => 'site/index/$1', // actionIndex в SiteController 'index.php' => 'site/index', // actionIndex в SiteController '' => 'site/index', // actionIndex в SiteController );
Ну если он самостоятельно создаёт имена неизвестных функций Выглядит вроде ничего, но если не отлажен, я бы выкинул. Или задача написать самому? Роутеров - полный гитхаб
Все исправил. Теперь все хорошо работает и без ошибок.Кому нежен будет мой вариант выхода из проблемы - пишите