是否所有 php 包含文件都必须位于包含目录中,或者这只是一种组织便利?我可以使用该目录的路径包含来自任何目录的文件吗?包含 php 包含的 html 文件是否必须具有 php 扩展名?如果是这样,我想这意味着我所有的 html 文档都将是 php,如果它们都有我计划“包含”的菜单。让您网站上的每个文件都是 php 文件的可接受协议吗?
谦恭地鞠躬……
ps 有没有关于这个话题的好圣经!?
你不需要让你的 php 包含任何特定的地方,或者有任何文件扩展名......
调用 include('/path/to/your/file/with/any/extension.extension'); 应将其作为 php 文件包含在内
通常使用带有 php 扩展名的 php 代码调用文件会更安全。
如果您将 PHP 放在 .html 文件中并包含()它,它应该可以工作。但是,如果有人直接从服务器请求 .html 文件,他们可能会看到所有未处理的 PHP 代码,这很危险。因此,如果您这样做,那么要么将这些文件放在一个不可通过 Web 访问的目录中(例如,在文档根目录之上),要么更改您的 Web 服务器配置,以便将 .html 文件视为 PHP。
您应该能够包含()任何文件,但如果 PHP 中存在 open_basedir 限制(您可能会在大多数网络主机上找到),您可能会遇到访问某些目录的问题
您可以包含来自服务器上任何位置的文件(当然取决于文件访问权限和安全限制)。
使用包含目录有助于保持井井有条,但不是必需的。
如果文件包含 PHP 代码,则应将其保存为 .php 文件 - 否则如果直接调用该文件,则代码将无法运行。这会给您留下一个行为不同的文件,具体取决于它的访问方式,这可能不是您想要的,并且可能是安全威胁。
为了解决这个问题,我看到有些人覆盖文件类型,因此服务器将所有 .html 文件视为 PHP 脚本 - 我不推荐这样做,因为它会减慢所有文件的处理速度,即使它们不包含任何 PHP。遵循最小意外原则 - 让您的 HTML 文件为 .html,您的 PHP 文件为 .php - 每个人都会更快乐。
詹姆斯·马瑟:
我认为您现在指的是 Apache SSI(请参阅http://httpd.apache.org/docs/2.2/howto/ssi.html#standard-footer)
不知道答案,我试过了,这是我的结果
Extension Call method PHP runs
.html browser no
.html Apache #include no
.html PHP include() yes
.php browser yes
.php Apache #include yes
.php PHP include() yes
(使用 WinXP、Apache 2.2.3、PHP 5.2.26 和 CentOS 5.2、Apache 2.2.3、PHP 5.1.16 进行测试)
所以你的答案是肯定的——如果你想通过 Apache SSI #include 调用 PHP 脚本,脚本必须有一个 .php 扩展名(或其他一些扩展名,即 .php4 .php5 等,它在 Apache 中注册为PHP 脚本),否则它不会运行。