如何在所有php文件的开头添加一行?

4

所以,好的。我有很多php文件和一个index.php文件。所有文件都不能没有index.php文件工作,因为我在index.php中包含它们。例如,如果有人点击“联系我们”,URL将变为index.php?id=contact,我使用$_GET['id']包括contacts.php文件。但是,如果有人找到文件的路径,例如/system/files/contacts.php,我不希望该文件被执行。所以,我想出了可以在包含index.php中的任何文件之前添加一行,如下所示:$check_hacker = 1,并在每个文件开头使用if,如下所示:if($check_hacker <> 1) die();。那么,如何在不打开所有文件并向每个文件添加此行的情况下完成呢?这可能吗?因为我实际上有许多.php文件。还有其他方法可以禁用单独文件的查看吗?有什么建议吗?
谢谢。

7个回答

11
您可以将index.php放在您的网站目录中,而将它所包含的所有文件放在另一个非网络目录中。
假设您的网站http://www.example.com/index.php实际位于/path/to/your/home/www/index.php,您可以将contact.php放置在/path/to/your/home/includes/contact.php中。没有.htaccess、重写或自动追加。只需要一个良好的文件结构和一个按需配置的服务器。
编辑以详细说明我的有关使用xamp的评论:
在您的httpd.conf文件中,添加类似如下的内容:
<Directory "/path/to/your/site/root">
    Options Indexes FollowSymLinks
    AllowOverride all
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
</Directory>


<VirtualHost *:80>
    DocumentRoot /path/to/your/site/root
    ServerName www.example.org
</VirtualHost>

然后在你的Windows主机文件(位于C:\Windows\System32\drivers\etc)中添加这一行:

127.0.0.1   www.example.com

我一直都是这样做的,但在我的xampp本地服务器上却不够。 - good_evening
不要告诉我你使用XAMPP来托管你的网站。 无论如何,你只需要更改你的Apache配置以将新目录映射为Web访问。然后在你的hosts文件中添加一行,就可以了。 - Arkh

9
我强烈建议使用.htaccess文件来拒绝所有与index.php不同的文件请求,但我不太确定如何正确实现。
这可能有效(无法立即测试),但它也会阻止对css、js等的请求:
order deny,allow
<FilesMatch "\.php">
    deny from all
</FilesMatch>
<FilesMatch "(index.php)">
    allow from all
</FilesMatch>

如果有人知道正确的解决方案,请编辑我的答案。 你可以查看这个问题:拒绝直接访问所有php文件,除了index.php 所以你可能需要为php文件设置一个FilesMatch规则,除了index.php规则。
编辑:代码的新版本似乎有效。

5

回复Kau-Boy:

将所有的php文件(除了index.php)放入一个新目录中,并将以下内容的.htaccess文件放置在该目录中:

deny from all

请确保不要将任何图像、CSS或JavaScript资源放在此目录中,因为它们也会被阻止。


这也是一个避免阻塞图像、CSS和JS问题的好主意! - 2ndkauboy

4
在这种情况下,我会使用mod_rewrite(如果您正在使用Apache)。这比在PHP中编写无数无用的if要干净得多。
这样,如果有人想要"黑掉它"并尝试/system/files/contacts.php,它会将其重定向到index.php?id=contact或其他任何站点。

3

在 php.ini 或者 htaccess 文件中设置以下变量:

auto_prepend_file="[path to some .php file]"

这将包括您选择的一个头文件,该文件将在系统上所有php脚本之前包含。

php.ini指令auto_append_file会创建一个页脚,该页脚将被包含在系统上所有PHP文件的末尾。


这很酷。但是它也会将其准备到index.php中,因此所有文件都将被他的实现阻止。因此,他必须在插入的文件中检查文件的插入位置。 - 2ndkauboy

1
RewriteCond %{REQUEST_URI} system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

将任何尝试访问系统文件夹的请求重定向回根目录!



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