За последние 24 часа нас посетили 114122 программиста и 3028 роботов. Сейчас ищут 1463 программиста ...

Как вызвать функцию...

Тема в разделе "PHP для новичков", создана пользователем asm1972, 28 сен 2014.

  1. asm1972

    asm1972 Новичок

    С нами с:
    28 сен 2014
    Сообщения:
    23
    Симпатии:
    0
    Добрый вечер!

    Возникла необходимость выучить PHP. Сейчас у меня возник вопрос: как можно вызвать функцию, имя которой находится в переменой?..

    Например:
    Код (Text):
    1. $name_func="foo()"
    И что писать дальше?..

    Спасибо!
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Имя функции надо писать без скобок
    Код (Text):
    1. $fn = "time";
    2. echo $fn();
     
  3. asm1972

    asm1972 Новичок

    С нами с:
    28 сен 2014
    Сообщения:
    23
    Симпатии:
    0
    Спасибо!
     
  4. asm1972

    asm1972 Новичок

    С нами с:
    28 сен 2014
    Сообщения:
    23
    Симпатии:
    0
    Добрый вечер!

    Функцию создаю как подсказали выше. Apache в error.log пишет:

    Код (Text):
    1.  PHP Fatal error:  Call to undefined function ()
    Функция-то работает, но, судя по ошибке, её имя кто-то не видит: круглые скобки без имени!..

    Не подскажете, в чём проблема?

    Спасибо!
     
  5. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    код покажи
     
  6. asm1972

    asm1972 Новичок

    С нами с:
    28 сен 2014
    Сообщения:
    23
    Симпатии:
    0
    Код (Text):
    1.  
    2. function GET_controller() {
    3.     $words=explode("/",$_GET['words']);
    4.         foreach($words as &$word) {
    5.             $word=mb_strtolower(trim(strip_tags($word)));
    6.         }
    7.     $apps=array('система'=>'system_controller','индекс'=>'index');
    8.     $controller=((string)$apps[$words[0]]);
    9.    $controller(); // 102 строка
    10. }
    Код (Text):
    1.  
    2. print_r($words);
    3.      Array ( [0] => индекс )
    4.  
    5. print_r($apps);
    6.      Array ( [система] => system_controller [индекс] => index )
    Если лог апача надо, то вот:
    Код (Text):
    1.  
    2. .......................................
    3. [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
    4. [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
     
  7. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ошибку на 101 строке видишь? ругается же ж. что написано, переведи.
     
  8. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    В .htaccess скорее всего ошибка. Он не должен был favicon.ico перенаправлять на index.php (ну или куда он там у вас запросы переправляет). Покажите .htaccess, умные люди поправят :)
     
  9. asm1972

    asm1972 Новичок

    С нами с:
    28 сен 2014
    Сообщения:
    23
    Симпатии:
    0
    Код (Text):
    1.  
    2. RewriteEngine on
    3. RewriteBase /
    4. RewriteCond %{REQUEST_URI}       ^/$
    5. RewriteRule ^(.*){1,1}?$ index.php?words=индекс [L,QSA]
    6. RewriteCond %{REQUEST_URI}       ^/index.php$
    7. RewriteRule (^[/])*$ index.php?words=индекс     [L,QSA]
    8. RewriteCond %{REQUEST_FILENAME} !-f
    9. RewriteCond %{REQUEST_FILENAME} !-d
    10. RewriteRule ^(.*)$ index.php?words=$1           [L,QSA]
    Ещё что-ли какое правило добавить?.. Типа:
    Код (Text):
    1.  
    2. RewriteCond %{REQUEST_FILENAME}  ^(.*)favicon.ico$
    3. RewriteRule ^(.*)favicon.ico$ index.php?words=индекс     [L,QSA]
    P.S. Кстати, сработало! Самым первым, после RewriteBase, его вставил. Мож кому пригодится... ;)
     
  10. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Не, там какая-то инструкция есть, которая позволяет все сущ. файлы игнорировать. А то у вас и css-ы, и картинки - всё туда полезет... Я сейчас что-то не вспомню.
     
  11. asm1972

    asm1972 Новичок

    С нами с:
    28 сен 2014
    Сообщения:
    23
    Симпатии:
    0
    CSS вроде работает без проблем. Там же правила: если файла или директории не существует, то перенаправлять на index, а если присутствуют оные - отдавать их... Надо будет исключение какое-нить поставить на случай отсутствия файлов или директорий, которые будут слаться в переменной $_POST['words']

    P.S. Многие ли сейчас в адресную строку забивают что-либо?..
     
  12. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Вот странно, почему фавиконку тогда перенаправляло... Или у вас нету фавиконки? Я по вечерам хуже соображаю :))
     
  13. asm1972

    asm1972 Новичок

    С нами с:
    28 сен 2014
    Сообщения:
    23
    Симпатии:
    0
    Понятно, что - нету. :) Вот я и говорю, исключение , наверное, ставить надо: нет чего-либо (всего не предусмотришь) - на индекс.
     
  14. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    А, тогда не исключение надо ставить, а генерить 404-ю если неизвестная хрень запрашивается у index.php

    Добавлено спустя 55 секунд:
    Ну и можно исключить файлы расширениями типа ico, которые вряд ли будут генерится контроллерами...
     
  15. asm1972

    asm1972 Новичок

    С нами с:
    28 сен 2014
    Сообщения:
    23
    Симпатии:
    0
    А зачем?.. Можно хрень хедером в тартарары отправить. :)))
     
  16. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    на 404
     
  17. asm1972

    asm1972 Новичок

    С нами с:
    28 сен 2014
    Сообщения:
    23
    Симпатии:
    0
    Почему именно туда?..
     
  18. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Патамушта иначе злой сео придумает на тебя делать ссылки "детское гей-порно с васей на его сайте скачать варез без смс" и ты будешь отдавать 200, и яндекс тебя забанит-забанит.
     
  19. asm1972

    asm1972 Новичок

    С нами с:
    28 сен 2014
    Сообщения:
    23
    Симпатии:
    0
    Так я ж писал про тартарары: нет чего-нить - header-ом в топку.
     
  20. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    каким?
     
  21. asm1972

    asm1972 Новичок

    С нами с:
    28 сен 2014
    Сообщения:
    23
    Симпатии:
    0
    Код (Text):
    1. header('Location: http://топка.ру');
    :)
     
  22. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ответ всё равно ж 200
     
  23. asm1972

    asm1972 Новичок

    С нами с:
    28 сен 2014
    Сообщения:
    23
    Симпатии:
    0
    А какой заголовок на 404-ю перенаправляет?..
    Можно header('Location: http://сайт/404.html'); ?..
     
  24. asm1972

    asm1972 Новичок

    С нами с:
    28 сен 2014
    Сообщения:
    23
    Симпатии:
    0
    Насчёт 404. Дописал в скрипте:
    Код (Text):
    1.  
    2.   if(!isset($apps[$words[0]])) {
    3.     header('Location: /404.html');
    4.     exit;
    5.   }
    В .htaccess:
    Код (Text):
    1.  
    2. RewriteCond %{REQUEST_FILENAME}  ^(.*)404.html$
    3. RewriteRule ^(.*)404.html$ 404.php     [L,QSA]
    В access.log выводит:
    Код (Text):
    1.  
    2. 127.0.0.1 - - [01/Oct/2014:05:23:34 +0400] "GET /test.sdsdf HTTP/1.1" 302 138
    3. 127.0.0.1 - - [01/Oct/2014:05:23:34 +0400] "GET /404.html HTTP/1.1" 404 209
    Такой статус - нормальный?..
    404.html - не существует.

    [​IMG]
     
  25. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нет, 404 отдавать можно сразу, без редиректов всяких. Просто http_response_code(404); делай и показывай эту страницу не меняя урла.