2009-08-16 88 views
2

奇怪的问题,在Windows上的PHP ...我的应用程序加载,加载一个设置文件,寄存器自动加载一个“核心”文件,不初始化等为核心文件的顶部我有include_once(“config.php文件“);这适用于当前目录中的任何内容,如果我从一个单独的目录中包含核心文件,尽管它只是默默地忽略配置文件的包含......有没有人看到过这个?require_once忽略

/webroot/core.php

<?php 
    require_once "config.php"; 
    //register autoloads 
    //do some initialization... standard stuff 
?> 

/webroot/config.php

<?php 
    define("WEB_ROOT","/webroot"); 
    define("DB_USER","root"); 
    // ... more stuff... 
?> 

/webroot/admin/index.php

<?php 
    require_once("../dbconnect.php"); 
    echo WEB_ROOT; 
    // print string literal WEB_ROOT rather than value in config.php 
?> 

我的理解是,文件操作是相对于发出请求的文件的目录而言的,不应该在require_once(“config.php”)中选择文件re lative到core.php?这段代码的工作原理与我在Mac或Linux上所期望的一样,但在Windows上完全没有,(如果我改变require的使用完整路径或../,它会起作用)

真正的疯狂是require_once(“config.php”)不会抛出任何错误,但是里面的代码都不会被执行!

+0

已经有人注意到的index.php是装载dbconnect.php而不是config.php或core.php?您还需要显示dbconnect.php的内容以及... – 2013-10-03 07:16:32

回答

7

如果PHP忽略这些错误,尽量把在被请求的文件的顶部:

ini_set('display_errors', 'On'); 
error_reporting(E_ALL); 

现在,所有错误都应该是可见的。

那么最好的做法(据我)是在请求(没有任何的包含文件)文件中定义了一些与应用程序根目录完整文件系统路径不变。因此,在index.php如果应用程序根目录是/webroot/admin

define('APP_DIR', dirname(__FILE__)); 

后,当你有一些东西,使用此常量。如果目录结构是:

/webroot/ 
    admin/ 
     index.php 
    config.php 
    core.php 

而且要包括config.phpindex.php

require_once APP_DIR . '/../config.php'; 

core.php包括config.php这将是:

require_once APP_DIR . '/../config.php'; 

等。

使用绝对文件系统路径将防止任何含糊之处。

+0

使用dirname(__ FILE__)是定义绝对路径的好方法!不幸的是,我正在处理的应用程序在配置文件中手动设置,然后将其用作'APP_DIR'。我真的不知道为什么! – Michael 2009-08-16 08:00:00

1

也许你正在运行到PHP的open_basedir限制?为了防止一些恶意脚本,PHP有一个“安全模式”,除其他外,它限制了可以从哪里加载文件。如果xampp默认启用了这个功能,那么你可能会遇到它。

您还可能要检查你的web服务器的错误日志,看看是否有故障出现的任何迹象(和打开错误报告,最好为E_ALL,直到你得到的问题排序)。

+0

我确实检查了ini以查看安全模式是否启用,但情况并非如此,而是非常棒的建议! 错误报告被设置为忽略声明,但有香草E_ALL我刚刚得到这个: 注意:使用未定义的常量FILE_ROOT的 - 假设“FILE_ROOT”在C:\ webroot的\ core.php中上线87 甚至不在卸载的配置文件中发出通知! – Michael 2009-08-16 07:48:33

2

如果你想使用相对于文件的路径做列入包括一个文件,你必须预先考虑的完整路径,如:

<?php 
require_once(dirname(__FILE__) . "/config.php"); 
?> 
+1

不在nixes ...它很奇怪,PHP只是默默地忽略了这种情况下的要求! – Michael 2009-08-16 08:04:31

+0

这行实际上来自我在Linux上专门开发的一个脚本。沉默的无视位确实很奇怪,我不能帮你解决这个问题。我刚刚发布了我在多年前改编的最佳做法。 – Thorarin 2009-08-16 08:20:32