За последние 24 часа нас посетили 56878 программистов и 1791 робот. Сейчас ищут 837 программистов ...

include и динамические ссылки

Тема в разделе "PHP для новичков", создана пользователем gooffy, 21 авг 2008.

  1. gooffy

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

    С нами с:
    8 апр 2008
    Сообщения:
    42
    Симпатии:
    0
    main.php:

    Код (Text):
    1. <a href="static.php?content=link1">link1</a><br>
    2. <a href="static.php?content=link2">link2</a><br>
    3. <a href="static.php?content=link3">link3</a><br>
    static.php:

    Код (Text):
    1. <?php
    2. include '$_GET["content"].html';
    3. ?>
    Файлы link1.html и т.д. существуют, лежат в той же директории, что и php-файлы.
    При переходе по ссылке с main.php выдает ошибку:

    Warning: include($_GET["content"].html) [function.include]: failed to open stream: Invalid argument in C:\Program Files\Apache Group\Apache2\htdocs\dynamic\static.php on line 2

    Warning: include() [function.include]: Failed opening '$_GET["content"].html' for inclusion (include_path='.;C:\php5\pear') in C:\Program Files\Apache Group\Apache2\htdocs\dynamic\static.php on line 2

    Если подставить include 'link1.html', то все нормально отображается.
    Если вывести переменную $content, то она тоже нормально отображается.
     
  2. Elkaz

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

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    gooffy
    Прочитайте про разницу одинарных и двойных кавычек

    А что вы скажете если я выполню такой запрос

    static.php?content=http://www.elkaz.ru/something/trojan-horse
     
  3. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    PHP:
    1. <?php
    2. switch $_GET["content"]{
    3.         case 1:
    4.                 include '1.html';
    5.                 break;
    6.   /* ... Ну и т.д. ... */
    7. }
     
  4. gooffy

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

    С нами с:
    8 апр 2008
    Сообщения:
    42
    Симпатии:
    0
    [vs] как вариант, но если ссылок к примеру 1000 штук.

    Elkaz Одинарные кавычки не распознают переменные. Поменял на двойные. Теперь ошибка выглядит так:

    Parse error: syntax error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\Program Files\Apache Group\Apache2\htdocs\dynamic\static.php on line 10


    PHP:
    1. <?php
    2. /*switch ($_GET["content"])
    3. {
    4.     case "link1":
    5.     {
    6.         include 'link1.html';
    7.         break;
    8.     }
    9. }*/
    10. include ("$_GET["content"].html");
    11. ?>
    По поводу того, что в ссылку можно подставить все, что угодно. Думаю, это легко исправляется проверкой данных (например, возможностью открытия страниц только с определенного сервера).
     
  5. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
  6. gooffy

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

    С нами с:
    8 апр 2008
    Сообщения:
    42
    Симпатии:
    0
    Да уж. Жесткий синтаксис получается
    PHP:
    1. include "".$_GET["content"].".html";

    Luge,[vs],Elkaz спасибо!
     
  7. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    gooffy
    А логика?
    PHP:
    1. <?php
    2. for($i=1;$i<=1000;$i++){
    3.         if($_GET['content']==$i){
    4.                 include "$i.html";
    5.         }
    6. }
    Ясен пень будет ошибка, потому что слово content как видишь оказывается между закрывающей и открывающей кавычкой.
    Надо так -
    • ...{$_GET["content"]}...