我想尝试包含这样一个简单的脚本:
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
答案 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()