如何在网站的所有PHP文件中包含一个PHP文件?

4

你好,我需要在网站的所有PHP文件中包含一个PHP文件。

以下是我的网站地图示例:

|index.php
|foolder1
||    file1.php
||    check.php
|foolder2
||    file2.php
|foolder3
||    file3.php

我希望所有的PHP文件都包含了check.php,但我必须说明我不能编辑php.ini,我知道有php_value auto_prepend_file "check.php",但我不知道这个函数如何运行,所以我想寻求帮助,使用php_value auto_prepend_file或其他方法在所有其他PHP文件中包含我的文件?提前感谢您的帮助。
编辑:我知道在StakOverflow上有一些类似的问题,但我不能编辑php.ini(由于一些服务器限制...),我刚刚尝试将php_value auto_prepend_file "foolder1/check.php"放入.htaccess中,它对于index.php有效,但对于file1.phpfile2.php等则无效。

为什么不在每个文件开头添加 <?php include "check.php" ?> 呢?只有29个字符... - Jonathan Lam
2
相关 -------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - FirstOne
1
因为我有大约120个PHP文件,所以我不能在每个单独的文件中添加此代码,而且我每天都会创建一个新文件。 - paolobasso
在stackoverflow上有一些类似的问题,但没有一个好的答案能够解释给我如何做。 - paolobasso
1
你还没有阅读FirstOne提供的答案链接。那个链接里面有你问题的答案。 - Machavity
显示剩余4条评论
2个回答

1
更好的方法可能是使用所谓的前端控制器模式。
<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On

    # Explicitly disable rewriting for front controllers
    RewriteRule ^app_dev.php - [L]
    RewriteRule ^app.php - [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /app.php [QSA,L]
</IfModule>

你需要让你的Web服务器将所有请求传递到app.php,然后引导应用程序并将请求传递给相关脚本。

// app.php
//
// Do shared steps like setup the database

switch($_SERVER['REQUEST_URI']) {
  case "foo/bar":
    require "foo/bar.php";
    break;
  case "baz/woo":
    require "baz/woo.php";
    break;
  default:
    require "404.php";
}

The main advantage here is that you are abstracting your URL:s from the actual file structure and also removing the server technology from your URLs which is a good practice.


由于您现有的设置公开了 PHP 文件的文件名,因此您有可能通过重写并替换硬编码 require 语句的 switch 语句(使用简单路由器)来进行传递。但请注意验证文件名,以确保其绑定到已知目录并确保文件存在等。 - developerjack
1
这只是一个基本例子 - 在 switch 语句中创建应用程序的所有路由并不是一个好的路由器。您可能需要研究前端控制器模式和 Symfony 路由组件 来获得更好的理解。 - max
@JackSkinner 我故意硬编码了它。直接使用 $_SERVER['REQUEST_URI'] 加载文件是一种非常糟糕的做法,因为它可能允许恶意用户执行不打算运行的脚本。保护动态文件路由器非常困难。 - max
100%同意,因此建议进行验证等操作。 如果正确完成,则比开关更快,并且与现有情况一样好。 - developerjack

0

我假设你正在使用apache2。

假设在Ubuntu 14.04上

编辑

etc/apache2/sites-available/000-default.conf

将以下行添加到VirtualHost内部
php_value auto_prepend_file "/var/www/html/check.php"

重启Apache服务器。我测试过了,它可以正常工作

编辑: 我尝试使用.htaccess,对我也有效。

请注意两件事:

1).htaccess已启用 如何在Ubuntu上启用Apache中的.htaccess

2)为check.php提供绝对路径

无论如何,这两个方法都对我有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接