【问题标题】:fat free framework and php -S: some URLs inexplicably not working无脂肪框架和 php -S:一些 URL 莫名其妙地不起作用
【发布时间】:2015-08-21 22:39:04
【问题描述】:

我正在尝试在php -S,php 的内置 Web 服务器(用于本地测试)下运行 F3 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 将只提供静态内容,不执行脚本。他们在想什么?

【问题讨论】:

    标签: php fat-free-framework


    【解决方案1】:

    看起来像内置服务器中的一个错误:当调用/rest/1.0/team 时,PHP 将$_SERVER['SCRIPT_NAME'] 设置为/rest/1.0,即使调用的脚本是index.php...

    其意图可能是支持此类调用:/rest/index.php/team,但在我们的例子中,这无关紧要,因为:

    • 脚本名称已作为参数传递给服务器
    • 没有这样的脚本叫做1.0

    您可以通过在index.php 的顶部设置正确的$_SERVER['SCRIPT_NAME'] 来解决此错误:

    <?php
    $_SERVER['SCRIPT_NAME']=basename(__FILE__);
    $f3=require('lib/base.php');
    //etc...
    

    【讨论】:

    • 在我的情况下 index.php 甚至没有被执行 - 这不会解决。我需要修补上面的 php 服务器代码以执行任何操作 - 显然它只是在寻找路径中任何地方都有点的静态文件。 (在我的情况下 index.php 在根目录中。)
    • 你怎么称呼php -S?它应该看起来像 php -S localhost:8080 index.php
    • 没有 index.php - 那么它几乎可以工作,如所述。使用 index.php,它的行为与 apache 下完全不同。 (我不是这些事情的巫师。)
    • 我鼓励您在专用于框架的Google Group 上描述您的问题。那将是调试您的设置的合适位置。但简而言之:在 Apache 下,由于 .htaccess,所有请求都被重定向到 index.php;当使用 PHP 内置服务器时,同样可以通过提供 index.php 作为 php -S 的参数来实现。
    猜你喜欢
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 2014-02-06
    • 2019-12-28
    • 2012-03-12
    • 1970-01-01
    相关资源
    最近更新 更多