Безжировая структура и php -S: некоторые URL-адреса необъяснимым образом не работают

Я пытаюсь запустить приложение F3 php под php -S, встроенным веб-сервером php (для локального тестирования).

У меня есть следующие маршруты:

GET /rest/1.0/team=TeamRestController->index
GET /rest/1.0/team/@id=TeamRestController->index

Доступ к ним завершается с ошибкой 404.

Когда я добавляю эти маршруты:

GET /rest/10/team=TeamRestController->index
GET /rest/10/team/@id=TeamRestController->index

доступ к ним рабочий. Похоже, точка здесь чему-то мешает. Форма 1.0 работает под apache.

Что здесь происходит?

Редактировать: Эээ, это:

while (q > request->vpath) {
    if (*q-- == '.') {
        is_static_file = 1;
        break;
    }
}

т.е. если в URL-адресе есть точка, тогда php будет обслуживать только статический контент, а не выполнять сценарии. Что они думали?


person Andreas Krey    schedule 21.08.2015    source источник


Ответы (1)


Похоже на ошибку встроенного сервера: при вызове /rest/1.0/team PHP устанавливает $_SERVER['SCRIPT_NAME'] в /rest/1.0, хотя вызываемый скрипт index.php...

Намерение, вероятно, состоит в том, чтобы поддерживать такие вызовы: /rest/index.php/team но в нашем случае это не имеет значения, поскольку:

  • имя скрипта уже передано серверу в качестве аргумента
  • нет такого скрипта под названием 1.0

Вы можете обойти эту ошибку, установив правильный $_SERVER['SCRIPT_NAME'] в верхней части index.php:

<?php
$_SERVER['SCRIPT_NAME']=basename(__FILE__);
$f3=require('lib/base.php');
//etc...
person xfra35    schedule 21.08.2015
comment
В моем случае index.php даже не выполняется - это не обходной путь. Мне нужно исправить приведенный выше код php-сервера, чтобы что-то выполнялось - очевидно, он ищет только статические файлы, где в пути есть точка. (В моем случае index.php находится в корне.) - person Andreas Krey; 24.08.2015
comment
Как вы называете php -S? Это должно выглядеть как php -S localhost:8080 index.php. - person xfra35; 24.08.2015
comment
Без index.php - тогда почти работает, как описано. С index.php ведет себя совершенно иначе, чем под апачем. (Я не волшебник в этих вещах.) - person Andreas Krey; 25.08.2015
comment
Я рекомендую вам описать свою проблему в группе Google, посвященной рамки. Это было бы подходящим местом для отладки вашей установки. Но вкратце: под Apache все запросы перенаправляются на index.php благодаря .htaccess ; при использовании встроенного сервера PHP то же самое достигается предоставлением index.php в качестве аргумента php -S. - person xfra35; 25.08.2015