gpt4 book ai didi

php - require_once 忽略

转载 作者:行者123 更新时间:2023-12-03 23:04:41 30 4
gpt4 key购买 nike

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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com