php - require_once 忽略

标签 php xampp windows-vista require-once

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 包含到 index.php 中:

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

core.php 中包含 config.php 它将是:

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

等等。

使用绝对文件系统路径可以避免任何歧义。

关于php - require_once 忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1283629/

相关文章:

php - 将任何类或任何方法声明为 "final"的示例场景是什么?

windows-vista - 在 Windows Vista 上,我可以使用任何帐户将数据写入何处,并且可以从所有其他帐户查看?

c++ - 在 Vista/7 (C++) 上获取音量变化通知

php - 无法从下拉列表 PHP 获取数据到 Xampp MySQL

php - MySQL为了开发临时修改数据库

php - 带有预装扩展的 Joomla

mysql - .Net 连接字符串无需密码即可连接 MySQL localhost

php - Laravel artisan 迁移 :refresh xammp give's weird error

php - 如何使用 xampp 将 PHP 5.4 降级到 5.1.6。

c# - 如何检查应用程序是否从\program files\运行