Добрый вечер! Возникла необходимость выучить PHP. Сейчас у меня возник вопрос: как можно вызвать функцию, имя которой находится в переменой?.. Например: Код (Text): $name_func="foo()" И что писать дальше?.. Спасибо!
Добрый вечер! Функцию создаю как подсказали выше. Apache в error.log пишет: Код (Text): PHP Fatal error: Call to undefined function () Функция-то работает, но, судя по ошибке, её имя кто-то не видит: круглые скобки без имени!.. Не подскажете, в чём проблема? Спасибо!
Код (Text): function GET_controller() { $words=explode("/",$_GET['words']); foreach($words as &$word) { $word=mb_strtolower(trim(strip_tags($word))); } $apps=array('система'=>'system_controller','индекс'=>'index'); $controller=((string)$apps[$words[0]]); $controller(); // 102 строка } Код (Text): print_r($words); Array ( [0] => индекс ) print_r($apps); Array ( [система] => system_controller [индекс] => index ) Если лог апача надо, то вот: Код (Text): ....................................... [Tue Sep 30 23:05:05 2014] [error] [client 127.0.0.1] PHP Notice: Undefined index: favicon.ico in D:\\servers\\web\\mysite\\www\\system\\functions.php on line 101 [Tue Sep 30 23:05:05 2014] [error] [client 127.0.0.1] PHP Fatal error: Call to undefined function () in D:\\servers\\web\\mysite\\www\\system\\functions.php on line 102
В .htaccess скорее всего ошибка. Он не должен был favicon.ico перенаправлять на index.php (ну или куда он там у вас запросы переправляет). Покажите .htaccess, умные люди поправят
Код (Text): RewriteEngine on RewriteBase / RewriteCond %{REQUEST_URI} ^/$ RewriteRule ^(.*){1,1}?$ index.php?words=индекс [L,QSA] RewriteCond %{REQUEST_URI} ^/index.php$ RewriteRule (^[/])*$ index.php?words=индекс [L,QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?words=$1 [L,QSA] Ещё что-ли какое правило добавить?.. Типа: Код (Text): RewriteCond %{REQUEST_FILENAME} ^(.*)favicon.ico$ RewriteRule ^(.*)favicon.ico$ index.php?words=индекс [L,QSA] P.S. Кстати, сработало! Самым первым, после RewriteBase, его вставил. Мож кому пригодится...
Не, там какая-то инструкция есть, которая позволяет все сущ. файлы игнорировать. А то у вас и css-ы, и картинки - всё туда полезет... Я сейчас что-то не вспомню.
CSS вроде работает без проблем. Там же правила: если файла или директории не существует, то перенаправлять на index, а если присутствуют оные - отдавать их... Надо будет исключение какое-нить поставить на случай отсутствия файлов или директорий, которые будут слаться в переменной $_POST['words'] P.S. Многие ли сейчас в адресную строку забивают что-либо?..
Вот странно, почему фавиконку тогда перенаправляло... Или у вас нету фавиконки? Я по вечерам хуже соображаю )
Понятно, что - нету. Вот я и говорю, исключение , наверное, ставить надо: нет чего-либо (всего не предусмотришь) - на индекс.
А, тогда не исключение надо ставить, а генерить 404-ю если неизвестная хрень запрашивается у index.php Добавлено спустя 55 секунд: Ну и можно исключить файлы расширениями типа ico, которые вряд ли будут генерится контроллерами...
Патамушта иначе злой сео придумает на тебя делать ссылки "детское гей-порно с васей на его сайте скачать варез без смс" и ты будешь отдавать 200, и яндекс тебя забанит-забанит.
Насчёт 404. Дописал в скрипте: Код (Text): if(!isset($apps[$words[0]])) { header('Location: /404.html'); exit; } В .htaccess: Код (Text): RewriteCond %{REQUEST_FILENAME} ^(.*)404.html$ RewriteRule ^(.*)404.html$ 404.php [L,QSA] В access.log выводит: Код (Text): 127.0.0.1 - - [01/Oct/2014:05:23:34 +0400] "GET /test.sdsdf HTTP/1.1" 302 138 127.0.0.1 - - [01/Oct/2014:05:23:34 +0400] "GET /404.html HTTP/1.1" 404 209 Такой статус - нормальный?.. 404.html - не существует.
нет, 404 отдавать можно сразу, без редиректов всяких. Просто http_response_code(404); делай и показывай эту страницу не меняя урла.