Windows 上的 php 出现奇怪的问题...我的应用程序加载一个“核心”文件,该文件加载设置文件、注册自动加载、进行初始化等。在核心文件的顶部我有 include_once("config.php");这对于当前目录中的任何内容都适用,如果我包含来自单独目录的核心文件,尽管它只是默默地忽略配置文件的包含...以前有人见过这个吗?
/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") 不应该选择相对于 core.php 的文件吗?这段代码在 Mac 或 Linux 上的工作原理与我预期的一样,但在 Windows 上根本不起作用(如果我更改要求以使用完整路径或 ../,它就可以工作)
真正疯狂的是 require_once("config.php") 不会抛出任何错误,但里面的代码没有被执行!
如果 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.php
into index.php
:
require_once APP_DIR . '/../config.php';
In core.php
包括config.php
这将是:
require_once APP_DIR . '/../config.php';
等等。
使用绝对文件系统路径可以防止任何歧义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)