broshan 发表于 2012-5-15 17:24:05

CI中CodeIgniter.php有一处对safe_mode判断不够严谨

本帖最后由 broshan 于 2012-6-3 17:48 编辑

开启log中出现下面这条记录

ERROR - 2012-05-15 08:34:45 --> Severity: Warning--> set_time_limit() [<a href='function.set-time-limit'>function.set-time-limit</a>]: Cannot set time limit in safe mode D:\sanguo\server_game\system\core\CodeIgniter.php 107

CI中对安全模式的判断如下:
if (function_exists("set_time_limit") == TRUE AND @ini_get("safe_mode") == 0)
问题出在ini_get返回值的判断上

针对ini_get函数的返回值有几种
php手册中对ini_get返回值的描述如下:
Note: When querying boolean valuesA boolean ini value of off will be returned as an empty string or "0" while a boolean ini value of on will be returned as "1". The function can also return the literal string of INI value.
Off的时候返回空字符串或"0",On的时候返回"1",还可以返回INI中写的值
倒霉就倒霉在最后一句话上,没有说具体什么时候返回INI value,恰巧就被我遇到了
导致CI判断出了问题


五月杨柳 发表于 2012-5-23 16:25:00

完全是技术流啊。

broshan 发表于 2012-6-3 16:22:52

本帖最后由 broshan 于 2012-6-3 17:38 编辑

if (function_exists("set_time_limit") == TRUE AND @ini_get("safe_mode") == 0)
完整的判断应该写成
$safe_mode = @ini_get("safe_mode");
if(strtolower($safe_mode) === 'off') {
    $safe_mode = FALSE;
}
if (function_exists("set_time_limit") == TRUE AND (boolean)$safe_mode === FALSE)

略显蛋疼



页: [1]
查看完整版本: CI中CodeIgniter.php有一处对safe_mode判断不够严谨