【问题标题】:PHP include file extensions?PHP包含文件扩展名?
【发布时间】:2011-03-24 09:41:46
【问题描述】:

对于 PHP 中必需/包含的文件,使用 .inc 扩展与 .inc.php.php 扩展更好吗?

【问题讨论】:

  • 我想知道在处理/加载方面 - inc 文件的处理方式不同吗?

标签: php include require file-extension


【解决方案1】:

我个人的偏好是文档根目录中的任何内容都是 .php 文件,表明它可以由 Web 服务器直接执行,而任何作为库的内容都是存储在并行目录中的 .inc 文件,表明它不是直接的可执行文件。

我的标准配置是

/home/sites/example.com/html/ - 如果 PHP 失败并提供原始代码,这里的任何内容都是“安全的”公开

/home/sites/example.com/inc/ - 库、带有密码的配置文件(例如,带有数据库凭据的数据库连接类)等。任何不应该暴露的东西,因为没有任何理由。

虽然您当然可以将 Apache 配置为拒绝访问 .inc 文件并将它们保存在 webroot 中,但您仍然依赖 Apache 来确保您的安全。如果 PHP 可能在 Apache 中失败并暴露您的代码,那么 .inc 块也可能会失败并暴露您的代码的内部结构。

当然,如果 Apache 咳得满地都是,目录遍历保护也没有理由不能失败,让某人去做http://example.com/../inc/seekritpasswords.txt

在某些时候,您只需要接受,如果某些内容存储在 Web 服务器上的任何位置,则有可能出现故障,允许访问原始数据并暴露所有内容。您想花多少时间和精力来预防这种情况取决于您自己。

【讨论】:

    【解决方案2】:

    Apache 有时(由于错误或严重崩溃)可以将 .php 文件作为文本提供(在共享主机上发生过几次)......我认为你可以使用任何你想要的扩展名,只要你不这样做' t 将您的文件存储在公共文件夹中。

    假设您的网站位于 /home/user/public_html/

    创建另一个文件夹 /home/user/lib_php/

    有文件:



    (1) .../lib_php/one.class.php 与

    class one { 
    //...
    }
    



    (2) .../lib_php/two.function.php 与

    function two() { 
    //...
    }
    

    你在 /public_html 中有主要的 index.php

    <?php 
    include_once('../lib_php/one.class.php');
    include_once('../lib_php/two.function.php');

    $x=a; $b=两个($x); $c=新的; //等等..

     
    <?php
    require_once('/home/user/lib_php/the.file.php'); 

    这样你就采取了一切预防措施,文件不能直接访问,但可以被你的脚本使用...

    【讨论】:

    • 我通常将函数放在静态类中并使用 __autoload() 函数。这样我就不需要为包含而烦恼,与您不必记住包含路径(或查找拼写错误)所节省的时间相比,速度损失很小。
    【解决方案3】:

    有时人们会使用.inc 扩展名,然后进行一些服务器配置以防止通过网络浏览器访问.inc 文件。这可能很好,如果知识渊博的系统管理员绝对正确地完成,但有一个更好的方法:任何不应该被网络用户访问的文件都应该保存在你的文档根目录之外。一旦这些文件离开网络,可以说,你可以使用任何你想要的扩展名。 .php 绝对是语法突出显示、一般理智等方面的明智选择。

    【讨论】:

    • 把.inc文件放到public_html上面的目录怎么样?
    • 没问题,如果你想这样做。但是使用.inc 扩展名会无缘无故地破坏自然文件关联。 (正如您上面的评论所要求的那样,没有性能优势。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 2014-11-17
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    相关资源
    最近更新 更多