PHP目录结构和访问

PHP目录结构和访问,php,Php,我整个上午都在阅读和测试,但自从将项目移到webroot之外后,我仍在努力解决这个问题。不用说,事情还是坏的 一切都位于var中/ 我的场景/问题:两个index.php文件都需要位于var/libs/inc中的slide.php,因为其中一个索引页处于另一个级别。我一直在使用以下工具: var/www/html/index.php-require_once'../../libs/inc/slide.php' var/www/html/acc/index.php-require_once'../

我整个上午都在阅读和测试,但自从将项目移到webroot之外后,我仍在努力解决这个问题。不用说,事情还是坏的

一切都位于var中/

我的场景/问题:两个index.php文件都需要位于var/libs/inc中的slide.php,因为其中一个索引页处于另一个级别。我一直在使用以下工具:

var/www/html/index.php-require_once'../../libs/inc/slide.php'

var/www/html/acc/index.php-require_once'../../../../libs/inc/slide.php'

然而,slide.php还利用了connection.php,它比slide.php高出两级,然后返回另一个名为connect的目录。我一直在使用下面的,它适用于上面的index.php文件之一

var/libs/inc/slide.php-require_once'../../connect/connection.php'

var/connect/connection.php

问题是在html目录中,acc的子目录及其页面可以访问slide.php,但无法获取connection.php

我如何才能做到这一点? 当前结构:

var/www/html/index.php-require_once'../../libs/inc/slide.php'

var/www/html/acc/index.php-require_once'../../../../libs/inc/slide.php'

var/libs/inc/slide.php-require_once'../../connect/connection.php'


var/connect/connection.php有三种常见做法

您只需为每个include指定绝对路径/var/libs/,这样它就可以指向文件,而不管包含在哪里。例如:/var/libs/inc/slide.php 您可以将lib路径添加到php在使用时查找文件的位置列表中。这将允许您只指定inc/slide.php来包含一个文件。 使用绝对路径,但在常量中定义第一部分,如define'LIB_path',var/libs/'。将它放在一个配置文件中,该文件包含在所有地方,然后在包含时使用它,比如:includeLIB_PATH.'inc/slide.php'。
1号可能是最快的,但有点脏。如果您只是在进行原型设计,并且需要快速完成以测试某些东西,那就太好了。第二个是可行的,但我个人不喜欢,我个人不喜欢在运行时更改配置变量,但这就是我。数字3是大多数库中最常见的。此外,全局作用域中定义的常量在所有作用域中都可用,因此它们可以在函数和类中使用,而不必像变量一样调用全局。

通常,您可以对每个include使用完整路径/var/libs,这样include文件的路径就无关紧要,或者使用这将允许您只指定inc/slide.php…等等。另一种常见做法是在配置文件中的某个位置创建一个常量,该常量随lib的路径一起包含到lib中定义'lib_path','/var/libs/',然后包括使用该includeLIB_路径。'inc/slide.php'。这很好,因为如果路径发生变化,你只需要改变常数。谢谢乔纳森。我试试你的第二个建议。听起来更令人愉快。我会让你知道事情的进展,乔纳森,所以我选择了第三个。我将它包含在某些需要的文件中,但现在我注意到:常量LIB已经在定义它的/var/pathToConfigFile中定义。这很奇怪,因为我没有在根索引页面上看到它,但是当发送到子索引时,我收到了这个通知。有什么想法吗?您可能会在多个脚本中包含配置文件。就像A.php包含配置文件,而B.php也包含配置文件一样。您可以将include更改为include|一次,配置脚本将仅在第一次调用时被包含,或者在定义变量之前检查变量是否已定义,其中定义了快速速记“LIB”|定义“LIB”和“value”;。定义部分仅在定义为false时运行。哈哈哈。是的,我找到了。我是。啊。我将它们都设置为包含一次