Mic*_*ael 2 php xampp require-once windows-vista
Windows上的PHP奇怪的问题...我的应用程序加载一个'核心'文件,加载设置文件,注册自动加载,初始化等在核心文件的顶部我有include_once("config.php"); 这适用于当前目录中的任何内容,如果我从一个单独的目录中包含核心文件,虽然它只是默默地忽略配置文件的包含...有没有人见过这个?
/webroot/core.php
<?php
require_once "config.php";
//register autoloads
//do some initialization... standard stuff
?>
Run Code Online (Sandbox Code Playgroud)
/webroot/config.php
<?php
define("WEB_ROOT","/webroot");
define("DB_USER","root");
// ... more stuff...
?>
Run Code Online (Sandbox Code Playgroud)
/webroot/admin/index.php
<?php
require_once("../dbconnect.php");
echo WEB_ROOT;
// print string literal WEB_ROOT rather than value in config.php
?>
Run Code Online (Sandbox Code Playgroud)
我的理解是文件操作是相对于发出请求的文件的目录,不应该require_once("config.php")选择相对于core.php的文件?这个代码就像我在mac或Linux上所期望的那样,但在Windows上却没有,(如果我改变了要求使用完整路径或../,它可以工作)
真正的疯狂是require_once("config.php")不会抛出任何错误,但内部代码都没有被执行!
如果PHP默默地忽略错误,请尝试放在请求的文件顶部:
ini_set('display_errors', 'On');
error_reporting(E_ALL);
Run Code Online (Sandbox Code Playgroud)
现在所有错误都应该是可见的.
然后,最佳实践(根据我)是在请求的文件中(不包含在任何包含的文件中)使用应用程序根的完整文件系统路径定义一些常量.因此,index.php
如果应用程序root是/webroot/admin
:
define('APP_DIR', dirname(__FILE__));
Run Code Online (Sandbox Code Playgroud)
在此之后,当您包含某些内容时,请使用此常量.如果目录结构是:
/webroot/
admin/
index.php
config.php
core.php
Run Code Online (Sandbox Code Playgroud)
而你要包括config.php
到index.php
:
require_once APP_DIR . '/../config.php';
Run Code Online (Sandbox Code Playgroud)
在core.php
包括config.php
这将是:
require_once APP_DIR . '/../config.php';
Run Code Online (Sandbox Code Playgroud)
等等.
使用绝对文件系统路径可以防止任何歧义.
归档时间: |
|
查看次数: |
6058 次 |
最近记录: |