> 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으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿