За последние 24 часа нас посетили 20590 программистов и 1102 робота. Сейчас ищут 384 программиста ...

PHP для новичка

Тема в разделе "Прочие вопросы по PHP", создана пользователем Митя, 4 фев 2006.

  1. Митя

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

    С нами с:
    4 фев 2006
    Сообщения:
    1
    Симпатии:
    0
    Вот у нас некий скрипт появился терь надо научиться его юзать:

    <?php include(\$name) ?>

    Он нам необходим для того чтобы можно было вот такое к примеру открыть и вывести:

    http://www.someserver.com/path/index.ph ... urpage.htm


    Как это реализовать?
     
  2. Anonymous

    Anonymous Guest

    Посмотри fopen
     
  3. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    думаю, что совсем не факт, что если при вызове идет ?name=mypage.html внутри все устроено именно так. 8)

    скорей всего выполняется поиск по базе и страница генерируется исходя из найденного контента по запросу, а не так вот тупо через include()

    подсунут вам что-нить типа ?name=/etc/password и будет вам счастьн ...
     
  4. Kolo

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

    С нами с:
    3 фев 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    SPb
    Можно еще адрес удаленной страницы с призвольным кодом подсунуть и он будет выполнен на сервере.
     
  5. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    ну таки да ... повеселится можно удачно. 8)
     
  6. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    фрагмент который я написал год назад вполне защищает от подобных фишек
    (конечно можно написать и в 10 раз проще, но сейчас речь не совсем об этом)
    Код (Text):
    1. $mode = 'default';
    2. if ( isset($_GET['mode']) ) {
    3.    if ( !empty($_GET['mode']) ) {
    4.       if ( !preg_match("#[^a-z]#s", $_GET['mode']) ) {
    5.          $mode = $_GET['mode'];
    6.       }
    7.    }
    8. }
    9. $filename = 'modules/module_' . $mode . '.php';
    10. if ( file_exists($filename) ) {
    11.    include $filename;
    12. } else {
    13.    include 'includes/error.php';
    14. }
     
  7. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    я бы еще включения делал от $DOCUMENT_ROOT. 8)
    + включаемые файлы сделал *.inc и запретил их показ через апач.
     
  8. ONK

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

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    Это всё лишнее, достаточно, чтобы х.php файлы модулей ничего не делали при прямом их вызове. А функциональность их вызывалась движком по средством создания и использования соответствующих объектов или процедур содержащихся в этом файле.
     
  9. Kolo

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

    С нами с:
    3 фев 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    SPb
    От file_exists я бы избавился. Не самая быстрая штука.
     
  10. ONK

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

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    Поздравляю! Наверно это было самым узким местом твоего ПХП приложения. ;)

    На самом деле, если есть желание подключать файлы, указанные пользователем, надо где-то хранить полный список разрешенных к подключению файлов. И подключать файлы именно из него.
     
  11. Kolo

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

    С нами с:
    3 фев 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    SPb
    Нет, у меня как раз с самого начала был массив с "имя_раздела" => "имя_файла". Чего и остальным советую :roll:
     
  12. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    На счёт file_exists() не вижу никакой проблемы, в моём скрипте из которого я взял этот код важна была исключительно простота установки новых модулей, скорость в данном случае стояла на последнем месте так-как планировалось поставить это дело на сайт с посещаемостью менее 10-ти человек в день...
     
  13. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    file_exists кеширует результаты, так что работать должно быстро.

    Вообще системы, в которых имя модуля (подключаемого файла) передается через параметр, набили уже ТАКУЮ оскомину и для меня лично в какой-то степени свидетельствуют о непрофессионализме программиста (ну или, в крайнем случае, отсутствии у него воображения) ;) Оригинальнее надо быть! Почему бы не сделать сразу /mypage.html вместо index.php?name=mypage.html? И смотрится красивее, и меньше соблазна взломать...
     
  14. Kolo

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

    С нами с:
    3 фев 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    SPb
    IMHO это достаточно простой и удобный для новичков способ. С хотябы примитивнейшей проверкой, вполне безопасный.
     
  15. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    1. кеширует не сам file_exists() а файловая система.

    2. лучше делать /mypage/ и класть туда index.php Тогда совсем понятно будет. 8) ЧПУ рулит ...

    но такой подход требует другой логики построения самого ядра сайта. он немного сложнее в реализации, зато дает более глубокое понимание процессов.
     
  16. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Dagdamor
    В корне не согласен, во первых ЧПУ достигается реврайтом и нет смысла изобретать велосипед, во вторых при правильной реализации скорее АД замёрзнет чем кто нибудь взломает, в третих это очень удобный и простой метод

    Возможно вы не совсем понимаете что такое профессионализм, тогда конечно простительно (когда я только начал изучать РНР я тоже искал во всём обходные пути) но факт остаётся фактом "Всё гениальное просто" а уровень профессионализма определяется не сложностью обходных путей, а тем насколько хорошо реализованы прямые пути !!!
     
  17. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    ну реврайт меняет внешнюю/видимую часть, но внутренняя реализация остается прежней. т.е. суть не меняется. все разруливает /index.php.

    есть другой подход, когда разруливает ядро и вызовы /about/person/?p=abc яляются прямыми и там лежат соответстующие файлы требуемые только для этой операции, а не тянется все скопом.

    например http://search.php.ru/index.html выгядит так:
    Код (Text):
    1. <?
    2.  
    3. include_once('oops.inc');
    4.  
    5. ?>
    все остальное реализуется ядром. 8) Это о "Все гениальное просто"

    хотя, конечно, каждый выбирает свой путь. и я не спорю, что лучше, а что хуже.
     
  18. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Согласись что кусок кода приведённого мной никто не взломает, однако товарищь утверждает что это не правильный (опасный) подход !!!
     
  19. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Кстати на счёт
    Зачем хранить где-то ещё если это вполне успешно хранится в файловой системе ? (зачем изобретать велосипед с квадратными колёсами ?)
     
  20. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    по выполнении скрипта кеш живет дальше? 8) ага ...

    440hz: p.s. сорри. случано отредактировал вместо цитаты ...
     
  21. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Мне например надоело что у меня изображение на мониторе а печатаю я на клавиатуре
    (было бы прикольно для разнообразия печатать на чашке с кофе, а форум читать на подошве батинка)
    Вот тут то как раз и играет роль профессионализм, ламеры даже не попробуют пропускать через что-либо вовсе...
    Для генерации урл я обычно делаю отдельную функцию которая генерирует URL (в зависимости от наличия/отсутсвия различных параметров) а в шаблон я его передаю исключительно на уровне логики скрипта.
     
  22. wolandino

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

    С нами с:
    5 фев 2006
    Сообщения:
    193
    Симпатии:
    0
    Адрес:
    Россия, Астрахань
    [off]
    у вас прям какая-то мания(фобия?) на ламеров... такое чувство, что вы боитесь, что вас ламером обзовут :lol:
     
  23. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Нет, этого не боюсь, я боюсь самих ламеров, (так-что фобия)
    так-как не однократно страдал от их действий...
    (хотя иногда они наоборот мне помогают заработать деньги)
     
  24. ONK

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

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    Затем, что не всё, что хранится в файловой системе предназначено для просмотра пользователями. Даже если обставить подключение файлов всевозможными условиями, нет гарантии, что в будущем не появится файл соответствующий этим условиям и одновременно содержащий конфиденциальную информацию.
    Принудительно перечисление файлов, необходимых для работы модуля исключает возможность возникновения подобных проблем и одновременно повышает гибкость системы, т.к. не накладывает ограничений на размещение файлов модуля.
     
  25. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    В папке для подключаемых файлов должны быть подключаемые файлы, (тем более с именем "module_[a-z].php") а если пихать туда всё что под руку попадётся тогда будет не скрипт а бардак...