如何包含相对路径“向上”的文件

时间:2010-07-06 07:59:33

标签: php include

我想尝试包含这样一个简单的脚本:

ini_set('include_path', ini_get('include_path').':'.dirname(__FILE__));
include('../configuration/live/database.php');

当我运行脚本(使用sudo)时,PHP返回:

  

PHP警告:include(../ configuration / live / database.php):无法打开流:/ home / adil / workspace-netbeans / trunk / applications / dudu / scripts / ejabberd_populate中没有此类文件或目录。第17行的PHP

为了澄清,database.php确实存在于

  

/home/adil/workspace-netbeans/trunk/applications/dudu/configuration/live/database.php

在我的脚本中,dirname(__ FILE__)返回

  

/家庭/阿迪尔/工作空间的netbeans /中继/应用/嘟嘟/脚本

因此,以下工作:

include(dirname(__FILE__).'/../configuration/live/database.php')

我想要了解的是为什么我的代码(包含include_path)不起作用?有没有办法看看如何在include_path中搜索包含文件?

这个相同的脚本适用于我们的生产服务器。它遵循相同的文件层次结构。

注意:最简单的解决方案是定义一个'SITE_ROOT'并添加包含,但这不是这篇文章的原因。我想知道为什么以上不起作用。

PS:我在Ubuntu 10.04上使用PHP 5.3.2

4 个答案:

答案 0 :(得分:2)

确定。我终于找到了问题。

我是通过shell运行脚本的,结果是您的相对路径包含基于shell中当前目录(pwd)的工作

所以这段代码:

sudo php workspace-netbeans/trunk/applications/dudu/scripts/ejabberd_populate.php 

没有用,因为我在shell中的pwd是我的家,路径没有从那里解决。但是这个

cd workspace-netbeans/trunk/applications/dudu/scripts/
sudo php ejabberd_populate.php 

作品。

我不确定为什么include_path不起作用。

谢谢大家,特别是。普拉普尔上校,帮助我解决这个看似愚蠢的问题。

答案 1 :(得分:1)

它不起作用,因为该路径上不存在该文件。

答案 2 :(得分:1)

上述答案正在偏离真正的问题。

为了遇到类似问题的人,这是最直接的解决方案:

require(dirname(__FILE__)."/../configuration/live/master.php");

在PHP 5.3中,您也可以

require(__DIR__."/../configuration/live/master.php");

答案 3 :(得分:0)

你可以这样做:

require( dirname( dirname(__FILE__) ).'/configuration/live/master.php' );

如果你需要向上“深入”,只需包装更多的dirname()