php require_once 没有按我想要的方式工作.. 相对路径问题

Posted

技术标签:

【中文标题】php require_once 没有按我想要的方式工作.. 相对路径问题【英文标题】:php require_once not working the way I want it to.. relative path issue 【发布时间】: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 放在类文件夹中,它会正常工作,所以我假设这是我对导致问题的相对路径的理解不足..

谢谢

【问题讨论】:

【参考方案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。这意味着您的开发环境不是您将如何部署的镜像,但我知道其中的诱惑。

以上是关于php require_once 没有按我想要的方式工作.. 相对路径问题的主要内容,如果未能解决你的问题,请参考以下文章

接近动态 php 包括在没有前端控制器的遗留项目上

我的查询过滤没有按我想要的方式工作

我的 CodeIgniter 图像处理库没有按我想要的方式工作

syslog-ng 匹配和过滤器没有按我想要的方式工作

我无法让 x 轴按我想要的方式工作

没有邮件类 require_once php