"PHP" / Говнокод #12261 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
$this->_requestUri = 0 === strpos($_SERVER['REQUEST_URI'], $_SERVER['SCRIPT_NAME'])
            ? substr(
                $_SERVER['REQUEST_URI'], strlen($_SERVER['SCRIPT_NAME'])
            )
            : $_SERVER['REQUEST_URI'];

Запостил: __proto__ __proto__, (Updated )

Комментарии (15) RSS

  • А разве REQUEST_URI может начинаться не так, как SCRIPT_NAME?
    Ответить
    • index.php обычно можно опустить, т.е. оно может присутствовать а может и нет.
      Ответить
      • Спасибо, т.е. код работает как-то так?
        "/test/index.php?a=2", "/test/index.php" => "/test/index.php"
        "/?a=3", "/index.php" => "/?a=3"

        Не пойму его смысл...
        Ответить
        • "/test/index.php?a=2", "/test/index.php" => "?a=2"
          в первом вариванте. Второй аргумент у substr - начало. Только тут наверное урлы типа index.php/some/args, т.к. в обычном виде через "?" эти аргументы можно было бы вытащить из $_SERVER['QUERY_STRING']... Правда, у автора переменная как-то не так называется...
          Ответить
          • Тест:
            echo 'REQUEST_URI = ' . $_SERVER['REQUEST_URI'];
            echo ', SCRIPT_NAME = ' . $_SERVER['SCRIPT_NAME'];

            Результаты
            Вход: /
            Выход: REQUEST_URI = /, SCRIPT_NAME = /index.php

            Вход: /index.php
            Выход: REQUEST_URI = /index.php, SCRIPT_NAME = /index.php

            Вход: /?a=2
            Выход: REQUEST_URI = /?a=2, SCRIPT_NAME = /index.php

            Вход: /index.php?a=2
            Выход: REQUEST_URI = /index.php?a=2, SCRIPT_NAME = /index.php

            Вход: index.php/some/args
            Выход: REQUEST_URI = /index.php/some/args, SCRIPT_NAME = /index.php

            Резюме: в $_SERVER['REQUEST_URI'] всегда лежит исходный запрос (ВНЕЗАПНО!), а в $_SERVER['SCRIPT_NAME'] — адрес скрипта, принявшего этот запрос (тоже внезапно).
            Ответить
      • Чуть не забыл. В Апаче с настройками по умолчанию суффикс «.php» тоже можно опустить. Т. е. /, /index.php и /index будут обрабатываться одним скриптом. Код, опубликованный __proto__, этот случай не учитывает.
        Ответить
        • В апаче вообще работа с расширениями славилась своей причудливостью.
          Ответить
          • Лень сейчас гуглить, но давно читал рекомендации по проектированию сайтов. Автор предлагал расширения опускать всегда, кроме случаев, когда они необходимы для разрешения неоднозначностей. В качестве аргумента приводил, что тогда можно будет менять язык скриптов или формат графики без смены URI.

            То есть кому-то такая причудливость даже нравится.
            Ответить
              • Возможность заливки шелла зависит не столько от обработки расширений, сколько от интерпретации скриптов из директории аплоада. Просто не надо скрипты и статику в одну директорию сваливать.
                Ответить
    • Легко. В Zend Framework всегда SCRIPT_NAME = /index.php, а REQUEST_URI может содержать произвольную (в некоторых рамках) строку.
      Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8