您需要将这些文件放在网络服务器上面向公众的文件夹之外。大多数(全部?)网络主机都应该能够更改网站的文档根目录。
例如,假设您的所有文件都来自主机上的以下目录:/home/username/www/example.com/
这意味着该目录中的任何内容都对 Internet 可见。如果您转到http://example.com/myfile.png,它将在/home/username/www/example.com/myfile.png 提供文件。
您要做的是创建一个名为public 的新目录,它将为您的文件提供服务,并将文档根目录指向那里。完成后,http://example.com/myfile.png 的请求将从/home/username/www/example.com/public/myfile.png 提供(请注意此处的public 目录)。现在,位于example.com 目录中的任何其他内容都不会在您的网站上可见。您可以创建一个名为 private 的新目录,其中将存储您的敏感包含文件。
假设您有两个文件:index.php,为您的网站提供服务,sensitive.php,其中包含密码和类似的东西。你可以这样设置:
/home/username/www/example.com/public/index.php
/home/username/www/example.com/private/sensitive.php
index.php 文件对 Internet 可见,但 sensitive.php 不可见。要包含sensitive.php,您只需包含完整的文件路径:
require_once("/home/username/www/example/com/private/sensitive.php");
您还可以将您的应用程序根(您的网站文件的根,但不是可公开访问的文件的根)设置为 define,可能在某个配置文件中,并使用它,例如:
require_once(APP_ROOT . "sensitive.php");
如果您不能更改文档根目录,那么某些框架所做的就是使用define 来注意不应该直接执行该文件。您可以在任何想要作为应用程序入口点的文件中创建一个定义,通常只是 index.php,如下所示:
if (!defined('SENSITIVE')) {
define('SENSITIVE', 'SENSITIVE');
}
然后,在任何敏感文件中,检查它是否已设置,如果没有设置则退出,因为这意味着文件正在直接执行,而不是由您的应用程序执行:
if (!defined('SENSITIVE')) {
die("This file cannot be accessed directly.");
}
此外,请确保您的包含文件在可公开访问时(实际上,即使不是)具有适当的扩展名,例如 .php,以便 Web 服务器知道将它们作为 PHP 文件执行,而不是将它们作为纯文本提供。有些人使用.inc 来表示包含文件,但如果服务器无法识别它们是由 PHP 处理的,那么任何愿意查看的人都可以公开查看您的代码。这不好!为防止这种情况,请始终使用 .php 扩展名命名您的文件。如果您想使用.inc 样式来显示您的包含文件,请考虑改用.inc.php。