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 没有按我想要的方式工作.. 相对路径问题的主要内容,如果未能解决你的问题,请参考以下文章