如何在子文件夹的PHP文件中调用根目录的数据库连接文件(不使用../相对路径)?
无需使用相对路径符号调用根目录
connection.php的解决方案 我来帮你搞定这个路径问题,你之前尝试用URL路径来require文件是走不通的——PHP的require/include需要的是服务器本地的文件系统路径,不是Web访问的URL。下面给你几个靠谱的方案:
方案1:使用$_SERVER['DOCUMENT_ROOT'](最推荐)
$_SERVER['DOCUMENT_ROOT']是Web服务器配置的网站根目录绝对文件路径,不管你的PHP文件在哪个子文件夹里,用它都能直接指向根目录的文件:
require($_SERVER['DOCUMENT_ROOT'] . '/connection.php');
比如你的网站根目录在/var/www/html,这个变量就会返回该路径,拼接后就是/var/www/html/connection.php,完全不受当前文件所在目录影响,也不用写../这类相对路径符号。
方案2:定义全局根路径常量
在connection.php文件里添加一行定义根目录的常量:
// 在connection.php中新增 define('ROOT_PATH', __DIR__); // __DIR__会返回当前文件所在的目录,也就是网站根目录
之后不管在哪个子文件里,只要用这个常量就能调用connection.php:
// 在client/list.php里 require(ROOT_PATH . '/connection.php');
这个方案的好处是如果以后根目录路径变化,只需要修改connection.php里的常量定义就行。
方案3:配置PHP的include_path
你可以把网站根目录添加到PHP的include_path中,这样PHP会自动在这些目录里查找你要require的文件:
方法A:修改php.ini(全局生效)
找到php.ini里的include_path配置项,把你的网站根目录加进去:
include_path = ".:/path/to/your/web/root"
方法B:在代码中动态设置(仅当前请求生效)
在list.php的开头添加:
set_include_path(get_include_path() . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT']);
之后你就可以直接像根目录文件那样调用:
require('connection.php');
为什么你之前的尝试失败了?
- 第一种写法
require($_SERVER['HTTP_HOST'].'/connection.php'):$_SERVER['HTTP_HOST']是你的域名(比如example.com),拼接后得到的是example.com/connection.php,这是Web访问的URL,不是服务器本地的文件路径,PHP会把它当成相对当前文件的路径去查找,自然找不到。 - 第二种写法存在语法错误(引号拼接出错),而且本质上还是在使用URL路径,同样不符合PHP
require对路径的要求。
内容的提问来源于stack exchange,提问作者user9437856
相关产品推荐
相关产品推荐

