如何在不指定子文件夹路径的情况下包含php文件

2022-08-30 18:23:38

通常,我们使用以下代码将php文件包含在彼此内部:

<?php 

include_once 'include/config.php';
// OR
include 'include/config.php'; 
// OR 
include_once $_SERVER['DOCUMENT_ROOT'].'include/config.php';
// ect...
?>

但上述代码仅适用于php文件位于根文件中的情况。我的意思是,如果我们将文件移动到子文件夹中。我们需要对php文件中包含的代码进行更改。例如:

<?php 
    include_once 'subfolder/include/config.php';
    // OR
    include 'subfolder/include/config.php'; 
    // OR 
    include_once $_SERVER['DOCUMENT_ROOT'].'/subfolder/include/config.php';
    // ect...
?>

我想说的是,当我们将php文件移动到子文件夹中时,include_once希望看到像()这样的子文件夹名称。这是一个具有挑战性的情况,因为我们需要为许多文件中包含的页面执行此操作。include_once 'subfolder/include/config.php';

例如,我包括从,也包括这个包括.php文件从所有php文件,如.它从根文件夹工作正常,但是如果我们移动子文件夹中的文件,则包含.php不包含的文件,没有子文件夹名称。include_once $_SERVER['DOCUMENT_ROOT'].'/functions/includes.php';index.phpheader.php, posts.php, and ajax_post.php

也许也可以使用 ..htaccess

我已经制作了这个htaccess代码,也许你有一个使用htaccess的解决方案。我必须说我尝试过使用,但包含文件不起作用。RewriteBase /subfoldername/

Options +FollowSymLinks -MultiViews
RewriteEngine On 
RewriteBase /

RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=302,NE,L]

RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteRule ^(.*)index\.php$ /$1 [L,R=302,NC,NE]

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^group/([\w-]+)/?$ sources/group.php?group_username=$1 [L,QSA]  
RewriteRule ^profile/([\w-]+)/?$ sources/user_profile.php?username=$1 [L,QSA]
RewriteRule ^profile/(followers|friends|photos|videos|locations|musics)/([\w-]+)/?$ sources/$1.php?username=$2 [L,QSA]     

RewriteRule ^admin/(.*)$ admin/index.php?page=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]  

RewriteRule ^(.+?)/?$ index.php?pages=$1 [L,QSA]

.我的责任是,我们如何包含没有子文件夹名称的php文件?


答案 1

您可以在 .htaccess 中使用指令来使文件包含在所有 php 文件之前。auto_prepend_file.php

如果您正在使用,那么在 .htaccess 中包含以下行:mod_php

php_value auto_prepend_file "/Applications/MAMP/htdocs/script/env.php"

请注意,您需要在文件中包含这些等效行:PHP-FPM.user.ini

auto_prepend_file = "/Applications/MAMP/htdocs/script/env.php"

然后在项目基目录中仅用一行即可创建一个新文件:env.php

<?php
   $baseDir = __dir__ . '/';
?>

此行设置一个变量,该变量具有项目基目录的值,即 $baseDir/Applications/MAMP/htdocs/script/ /Applications/MAMP/htdocs/subdir/script/

然后,在必须包含其他文件的任何位置使用此变量,例如:$baseDir

include_once $baseDir.'functions/includes.php';

include_once $baseDir.'functions/get.php';

答案 2

你必须使用函数和在你的某个地方或添加下一个代码:set_include_path()bootstrap.phpindex.php

<?php
$path = '/usr/pathToYourDir';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);

现在在下面的任何地方你都可以写这个:

include_once 'include/config.php';
// or
include_once 'include/db/index.php';
// etc

如果您需要将代码移动到另一个目录 - 您只需要将路径varibalbe的值更改为目录的新路径即可。$path = '/usr/pathToYourDir';


推荐