ホームページ > php教程 > php手册 > [转]老王:如何安全的include文件

[转]老王:如何安全的include文件

WBOY
リリース: 2016-06-06 20:11:56
オリジナル
912 人が閲覧しました

大多数人会将一个单独的php文件当成配置文件,早些年的配置文件大多类似这样: ?php?? $config['a']=1;?? $config['b']=2;?? 这样include后。可以使用$config变量了,但慢慢的,却越来越发现这样不太好,于是就有了这种 ?php?? return?array(?? 'a'=1,'b'=2?

大多数人会将一个单独的php文件当成配置文件,早些年的配置文件大多类似这样:

    <?php ??
    $config['a']=1;??
    $config['b']=2;??
ログイン後にコピー

这样include后。可以使用$config变量了,但慢慢的,却越来越发现这样不太好,于是就有了这种

    <?php ??
    return?array(??
    'a'=>1,'b'=>2??
    );??
ログイン後にコピー

这时候只要写$config = include('config.php'),就相当于和上面一样了。然后老王讲的就是指第二种情况。

原文在:http://huoding.com/2014/02/25/329

他举的例子是:

    <?php ??
    ??
    $debug?=?false;??
    //?...??
    $config?=?include?'config.php';??
    //?...??
    if?($debug)?{??
    ????phpinfo();??
    }??
ログイン後にコピー

如果config.php里万一写了$debug=true;那么就会造成phpinfo()被输出了,与实际预料就有了偏差了。那么怎么安全的include呢?

老王说:

    $config?=?call_user_func(function()?{??
    ????return?include?'config.php';??
    });??
ログイン後にコピー

这样就利用局部变量把里面的一些可能污染外部的变量控制在匿名函数的作用域里。

然后我自己也测试了一下,确实。即使用$GLOBALS,也没有影响,而单独的php文件,如果你不是function ,也不能直接global $debug;这样是语法错误的。

所以。。。。如果为了安全,你还是和老王学一下吧。。。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート