PHP如何自动包含?
我有以下项目结构:PHP如何自动包含?,php,Php,我有以下项目结构: \ |- FolderA | |- FolderB | | |- index.php | |- index.php |- index.php |- config.php 每当我访问以下内容时,我希望自动加载我的config.php(index.php中没有“include”指令): http:://MySiteName/index.php http:://MySiteName/FolderA/index.php http:://MySiteName/FolderA/
\
|- FolderA
| |- FolderB
| | |- index.php
| |- index.php
|- index.php
|- config.php
每当我访问以下内容时,我希望自动加载我的config.php(index.php中没有“include”指令):
http:://MySiteName/index.php
http:://MySiteName/FolderA/index.php
http:://MySiteName/FolderA/FolderB/index.php
或者我的项目中的任何其他php文件
如何实现这一点?如果您可以动态更改PHP配置(通过
.htaccess
或本地PHP.ini
)来限制对应用程序的更改,您可以尝试使用该指令。如果您可以动态更改PHP配置(通过.htaccess
或本地PHP.ini
)要限制对应用程序的更改,可以尝试使用该指令。唯一可行的方法是使用php.ini指令:
auto_prepend_file = /path/to/config.php
或在.htaccess中:
唯一可行的方法是使用php.ini指令:
auto_prepend_file = /path/to/config.php
或在.htaccess中:
如果您正在运行Apache web服务器,请将以下内容放在根web目录的
.htaccess
文件中:
php_value auto_prepend_file "/absolute/location/of/config.php"
如果您正在运行Apache web服务器,请将以下内容放在根web目录的
.htaccess
文件中:
php_value auto_prepend_file "/absolute/location/of/config.php"
我能想到的最好的答案(除了可能会给您带来麻烦的
自动预处理文件
)是使用.htaccess
文件实际加载到加载实际文件的特定启动文件中。
示例如下:
\
|- FolderA
| |- index.php
|- index.php
|- config.php
|- boot.php
|- .htaccess
boot.php的内容
:
<?php
include_once('config.php');
$real_file = $_SERVER['REDIRECT_URL'];
include_once($real_file);
?>
因此,基本上,我们告诉它所有以index.php
结尾的请求都应该发送到boot.php
。
这个
boot.php
只需加载您的配置,然后加载原始的index.php
文件,不管它在哪个子文件夹中。重写规则仅针对index.php
文件进行了调整,以便图像(和其他文件)正常工作。如果您有其他文件,如index2.php
,只需相应地修改htaccess正则表达式。我能想到的最佳答案(除了可能会给您带来麻烦的自动预结束文件
之外)是使用.htaccess
文件实际加载到加载实际文件的特定启动文件中。
示例如下:
\
|- FolderA
| |- index.php
|- index.php
|- config.php
|- boot.php
|- .htaccess
boot.php的内容
:
<?php
include_once('config.php');
$real_file = $_SERVER['REDIRECT_URL'];
include_once($real_file);
?>
因此,基本上,我们告诉它所有以index.php
结尾的请求都应该发送到boot.php
。
这个
boot.php
只需加载您的配置,然后加载原始的index.php
文件,不管它在哪个子文件夹中。重写规则仅针对index.php
文件进行了调整,以便图像(和其他文件)正常工作。如果您有其他文件,比如index2.php
,只需相应地修改htaccess正则表达式。我知道没有办法this@Gazler-我认为这在现实中是不可能的,除非他在每个index.php
中编写这样的自动加载代码,哪种方法会破坏不使用include
@Lu4的目的?我通常不会质疑OP的目的,但这次很奇怪。请看下面我的回答……请重新表述“我通常不会质疑OP的目的,但这次很奇怪”的疯狂想法,但冒犯那些试图帮助你的人通常不是一个很好的长期方法。我知道这是没有办法的this@Gazler-我认为这在现实中是不可能的,除非他在每个index.php
中都写了这样的自动加载代码,否则这会破坏不使用include
@Lu4的目的-我通常不会质疑OP的目的,但这次很奇怪。请看下面我的答案……请重新表述“我通常不会质疑OP的目的,但这次它很奇怪”的疯狂想法,但冒犯试图帮助您的人通常不是一个好的长期方法。如果我使用名称空间,不带名称空间的php代码可能会导致错误?@Lu4我不知道你的意思。任何非命名空间的代码都会放入。如果您使用的是命名空间,则不能在命名空间之外使用代码,如果配置文件(没有命名空间)将被前置到index.php文件,则index.php(有命名空间)将混合使用非命名空间和命名空间代码,这可能会导致错误…@Lu4使用auto\u prepend\u file
包含的任何文件都会以与require
相同的方式合并(如果阅读手册页面,您会知道这一点)。这并不是魔术般地为实际剧本做准备谢谢你的回答菲尔·布朗,这真的很有帮助。我正在考虑使用你的解决方案。但如果你能更宽容地对待与你交流的人,那就太好了。我认为你的“如果你阅读手册页面,你就会知道这一点”是一种冒犯……如果我使用名称空间,在没有名称空间的php代码前面加上前缀可能会导致错误呢?@Lu4我不知道你的意思。任何非命名空间的代码都会放入。如果您使用的是命名空间,则不能在命名空间之外使用代码,如果配置文件(没有命名空间)将被前置到index.php文件,则index.php(有命名空间)将混合使用非命名空间和命名空间代码,这可能会导致错误…@Lu4使用auto\u prepend\u file
包含的任何文件都会以与require
相同的方式合并(如果阅读手册页面,您会知道这一点)。这并不是魔术般地为实际剧本做准备谢谢你的回答菲尔·布朗,这真的很有帮助。我正在考虑使用你的解决方案。但如果你能更宽容地对待与你交流的人,那就太好了。我认为你的“如果你阅读手册页面,你就会知道这一点”是一种冒犯…自动预处理文件可能会导致什么问题?主机服务器可能不允许你设置它,它可以从htaccess、ini等禁用。。。哦,对于未来的开发人员来说,这可能不是那么明显。如果mod_rewrite
不可用,这将非常糟糕。它总是可用:)。廉价主机也开始允许它。在这种廉价/共享主机上设置INI设置总是失败