Php 全局问题,包括所有类文件
我有一个包含文件,其中有几个类文件:Php 全局问题,包括所有类文件,php,Php,我有一个包含文件,其中有几个类文件: |includes |-> database.class.php |-> user.class.php |-> functions.php 等等。。在my functions.php中,我包含了所有类文件: include_once 'database.class.php'; 我想通过将结构更改为以下方式将一些标准文件与类文件分开: |includes |-> functions.php |-> class |-&g
|includes
|-> database.class.php
|-> user.class.php
|-> functions.php
等等。。在my functions.php中,我包含了所有类文件:
include_once 'database.class.php';
我想通过将结构更改为以下方式将一些标准文件与类文件分开:
|includes
|-> functions.php
|-> class
|-> database.class.php
|-> user.class.php
因此,当我尝试使用glob
时:
foreach (glob('/class/*.class.php', GLOB_NOCHECK) as $filename) {
include_once $filename;
}
我得到以下错误:
警告:include_once(/class/*.class.php):无法打开流:第13行的/home/matt500b/dev2.csgoberry.com/includes/functions.php中没有此类文件或目录
我必须将其更改为:
glob('../../includes/class/*.class.php', GLOB_NOCHECK)
当我可以只做一次“class/database.class.php”include_once时,我想了解原因代码>正常
为什么glob依赖于用户正在查看的文件,而不是根据手册包含的功能文件?e、 g.如果我深入研究文件结构:
|public
|-> tournament
|-> dir2
|-> index.php
|includes
|-> database.class.php
|-> user.class.php
|-> functions.php
|public
|-> tournament
|-> index.php // Where the ../../includes/functions.php'; is
我需要使用glob('../../../includes/class/*.class.php',glob\u NOCHECK)
functions.php文件包含在我的index.php文件中,使用include'../../includes/functions.php'代码>
总文件结构:
|public
|-> tournament
|-> dir2
|-> index.php
|includes
|-> database.class.php
|-> user.class.php
|-> functions.php
|public
|-> tournament
|-> index.php // Where the ../../includes/functions.php'; is
您应该做的是使用$\u SERVER['DOCUMENT\u ROOT']
(假设您的包含在网站根目录中),这样无论您在什么页面上,PHP都会使用绝对路径引用包含,从而使其对任何位置都完全灵活
因此:
变成
include_once $_SERVER['DOCUMENT_ROOT']."/includes/class/database.class.php";
同样的方法也可以应用于网站任何页面中的所有包含函数和相对路径函数(如glob
)
为什么
如果文件夹不是绝对指定的,PHP将使用当前目录作为路径文件夹的“基础”
因此,如果您给PHP的路径被检测为绝对引用,如/home/website/public\u html/
,则使用绝对值,否则PHP使用。您可以手动更改PHP当前的工作目录,但实际上,这仍然是一个相对的更改,因此尽可能绝对地引用文件地址更安全、更灵活
包含的文件使用它们所包含的文件的目录位置。当前工作目录是(如果未手动更改)包含的文件的目录,而不是包含的文件的目录 您应该使用$\u SERVER['DOCUMENT\u ROOT']
(假设您的include位于网站根目录中),这样无论您在什么页面上,PHP都会使用绝对路径引用include,从而使其对任何位置都完全灵活
因此:
变成
include_once $_SERVER['DOCUMENT_ROOT']."/includes/class/database.class.php";
同样的方法也可以应用于网站任何页面中的所有包含函数和相对路径函数(如glob
)
为什么
如果文件夹不是绝对指定的,PHP将使用当前目录作为路径文件夹的“基础”
因此,如果您给PHP的路径被检测为绝对引用,如/home/website/public\u html/
,则使用绝对值,否则PHP使用。您可以手动更改PHP当前的工作目录,但实际上,这仍然是一个相对的更改,因此尽可能绝对地引用文件地址更安全、更灵活
包含的文件使用它们所包含的文件的目录位置。当前工作目录是(如果未手动更改)包含的文件的目录,而不是包含的文件的目录 为什么不include_once'class/database.class.php
?@splash58正如我所说,我尝试过这样做,但它抛出了错误,说找不到这个目录。所以我需要做。/../class/*
我可能错了,但我认为您显示的目录结构不正确tree@splash58我更新了我的问题;但是文件结构是正确的。您需要在文件引用失败时确定PHP当前工作目录。为什么不include_once'class/database.class.PHP
?@splash58正如我所说,我尝试过这样做,但它抛出了错误,说找不到该目录。所以我需要做。/../class/*
我可能错了,但我认为您显示的目录结构不正确tree@splash58我更新了我的问题;但是文件结构是正确的。您需要在文件引用失败时确定PHP当前工作目录。由于数据库连接,包含的文件在公共目录之外。然后您可以手动为路径地址定义一个值,例如/home/accountname/includefolder/`作为ROOTPATH
Defined value(例如)正如您所说,定义指向我的文件夹的路径效果很好。请注意,这种方法将无法使用别名位置,例如。使用\uuuuu DIR\uuuuuu
以获得更好的可移植性。@JeffPuckettII我很困惑。哪个部分会因别名而失败?由于数据库连接,包含的文件在公共目录之外。然后,您可以手动为路径地址定义一个值,例如/home/accountname/includefolder/`作为根路径定义的值(例如),如您所说,定义“我的文件夹”的路径效果很好。请注意,如果出现别名位置,此方法将失败,例如。使用\uuuuu DIR\uuuuuu
以获得更好的可移植性。@JeffPuckettII我很困惑。哪个部分会因别名而失败?