【问题标题】:php require_once not working the way I want it to.. relative path issuephp require_once 没有按我想要的方式工作.. 相对路径问题
【发布时间】:2011-01-16 06:04:55
【问题描述】:

我在为 require_once 分配相对路径时遇到问题。我确定这很简单,我没有看到...

文件夹目录结构 级别 1:站点 2级:包括 2级:类

所以... site/include/global.php

当我尝试使用时

function__autoload($className)
{
     require_once '../class/'.$className.'.php';

}

我明白了:

警告:require_once(../class/db.php) [function.require-once]:打开流失败:没有这样的文件或目录

致命错误:require_once() [function.require]: 无法打开所需的 '../class/db.php' (include_path='.;./includes;./pear')

我做错了什么?如果我将 global.php 放在类文件夹中,它会正常工作,所以我假设这是我对导致问题的相对路径的理解不足..

谢谢

【问题讨论】:

    标签: php require-once


    【解决方案1】:

    require(_once)include(_once) 相对于 first 脚本的路径起作用,即实际调用的脚本

    如果您需要 require 包含或必需文件中的某些内容,并且希望相对于该文件工作,请使用

    dirname(__FILE__)."/path/to/file";
    

    或者正如@Arkh 指出的那样,从 PHP 5.3 开始

    __DIR__."/path/to/file";
    

    【讨论】:

    • 太快了:(。你也可以在php5.3+中使用__DIR__
    • 谢谢伙计。 require_once dirname(FILE).'/../class/'.$className .'.php';完美运行!我不知道 require 默认从根目录开始。我假设(你永远不应该假设)它来自当前目录。无论如何,谢谢佩卡。
    • @payling 不客气。一个重要的区别,“根”是指在浏览器中调用的脚本,不一定是根目录。我的措辞有点误导,抱歉。我稍微修改了一下。
    • 明白了。主页(调用自动加载功能)位于站点目录中。 global.php 页面位于我的包含目录中,但由于我将 global.php 包含在主页中,因此目前它在技术上位于站点目录中。 'class/'.$className.'.php';可以,但最好使用我们提出的第一个解决方案,使用 dirname,因为我可以将脚本包含在站点目录以外的位置,因此“class/”并不总是有效!再次感谢!
    • 没错。完美放置!干杯。
    【解决方案2】:

    这行得通吗(仅限apache,我相信

    require_once($_SERVER['DOCUMENT_ROOT'] . '/class/' . $classname '.php');
    

    【讨论】:

    • 我不想使用文档根目录,因为我正在远程工作。我有两个版本的站点,主站点和我的测试版本,站点文件夹的名称与测试版本不同。如果我想让测试和主要工作都正常工作,绝对路径将不起作用..:/
    • 哦。不是单独的端口,只是 /test 和 /main。这意味着您的开发环境不是您将如何部署的镜像,但我知道其中的诱惑。
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 2013-11-18
    相关资源
    最近更新 更多