【问题标题】:How to require index.php of third party which also requires stuff如何要求第三方的 index.php 也需要东西
【发布时间】:2018-10-18 00:13:23
【问题描述】:

我遇到了这个问题:

pseudoRoot/Dir/api/index.php 我有:

<php
    require "SomeFolder/index.php";
?>

pseudoRoot/Dir/api/SomeFolder/index.php 我有:

<php
    require "SomeDeepFolder/someScript.php";
?>

pseudoRoot/Dir/api/SomeFolder/SomeDeepFolder/someScript.php.

现在SomeFolder 中的所有内容都是一些我不想弄乱的第 3 方库,并且需要/包含在上面的 SomeFolder/index.php 的伪中。调用pseudoRoot/Dir/api/index.php 会导致错误failed to open stream: No such file or directory。据我了解,这与 PHP 处理相对路径的奇怪方式有关(第二个 require/include 具有第一个文件的相对路径而不是他自己的)但是我怎样才能使这种路由工作而不必弄乱lib的文件意味着不接触.../SomeFolder中的任何东西并且只使用.../api/index.php?我试过使用require dirname(__FILE__) . /SomeFolder/index.php,但没有成功。

啊,“流”通过.htaccess 中的重写规则到达pseudoRoot/Dir/api/index.php,将所有请求路由到它。

对不起,如果问题重复,还没有找到任何答案。

【问题讨论】:

    标签: php routing include require


    【解决方案1】:

    如果您使用 Composer,它会为您处理需求。

    您也可以使用__DIR__ 代替dirname(__FILE__)。但它返回的是当前文件的目录。

    只要添加的部分与当前目录相关,使用__DIR__ 应该可以工作。您也可以将其保存为 $rootDirectory 并使用它来加载与此根目录相关的所有文件。

    <?php
    dirname(__DIR__, 1); // the extra parameter is for getting a level (or more) up from the current directory.
    ?>
    

    【讨论】:

    • Composer 旨在自动加载类而不是脚本!
    • 您想更改 PHP 语言。它旨在从您输入的第一个文件运行。包含相对于该文件。不更改第 3 方库的原因是什么?它不应该使用 Composer 来自动加载类吗?
    • lib 不是问题,我想我是问题:D 在旅途中测试和学习 PHP,显然我想要的是不可能的,而且我的方法从一开始就是错误的。我什至还没有某种框架/架构,只是想稍微调整一下并保护我的代码。
    猜你喜欢
    • 1970-01-01
    • 2021-06-29
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 2017-02-04
    • 2019-04-16
    相关资源
    最近更新 更多