调试php.ini语法错误

时间:2013-07-31 17:13:53

标签: php ubuntu apache2

我有一个使用ubuntu 12.04的虚拟机并运行apache2作为Web服务器。我已经安装了PHP 5.3.10,每次运行php应用程序时,我的php.ini都会抛出这个错误:

PHP:  syntax error, unexpected BOOL_FALSE in /etc/php5/cli/php.ini on line 1020

我希望在php.ini中没有正确注释掉某些内容但是当我看到它时,我看不出有什么问题:

1007 [Pcre]
1008 ;PCRE library backtracking limit.
1009 ; http://php.net/pcre.backtrack-limit
1010 ;pcre.backtrack_limit=100000
1011 
1012 ;PCRE library recursion limit.
1013 ;Please note that if you set this value to a high number you may consume all
1014 ;the available process stack and eventually crash PHP (due to reaching the
1015 ;stack size limit imposed by the Operating System).
1016 ; http://php.net/pcre.recursion-limit
1017 ;pcre.recursion_limit=100000
1018 
1019 [Pdo]
1020 ; Whether to pool ODBC connections. Can be one of "strict", "relaxed" or "off"
1021 ; http://php.net/pdo-odbc.connection-pooling
1022 ;pdo_odbc.connection_pooling=strict
1023 
1024 ;pdo_odbc.db2_instance_name
1025 
1026 [Pdo_mysql]
1027 ; If mysqlnd is used: Number of cache slots for the internal result set cache
1028 ; http://php.net/pdo_mysql.cache_size
1029 pdo_mysql.cache_size = 2000
1030 
1031 ; Default socket name for local MySQL connects.  If empty, uses the built-in
1032 ; MySQL defaults.
1033 ; http://php.net/pdo_mysql.default-socket
1034 pdo_mysql.default_socket=

这有什么看起来很奇怪吗?

应用程序全部运行我只是厌倦了看到这个错误而不知道是什么导致它。

2 个答案:

答案 0 :(得分:5)

简答:

不要相信行号,在错误中提到的行之前的行中查找语法错误。

答案很长:

我也有这个错误,原来我错过了时区周围的引号。

我的原始错误是:

PHP:  syntax error, unexpected BOOL_FALSE in /etc/php5/cli/php.ini on line 929

在线 876 我有:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Europe/Madrid"

之后有很多注释掉的行,下一条未注释的行在 938 上。原始错误表示 929 上有错误,这让事情变得非常神秘。我认为行号的差异与php.ini文件的解析方式有关,但重点是行号不可信。

我在第876行更正了缺失的引号后,错误消失了。

答案 1 :(得分:-2)

此函数解决问题并修复PHP parse_ini_file生成的一些错误。 通过它,xtalk_parse_ini_file就像parse_ini_file

一样工作
function xtalk_parse_ini_file( $filename ){

    $arr = array();

    $file = fopen( $filename, "r" );

    $section = "";
    $ident = "";
    $value = "";

    while ( !feof( $file ) ){           
        $linha = trim(fgets( $file )); 

        if (!$linha){
            continue;
        }   

        // replace comments
        if (substr($linha, 0, 1) == ";"){
            continue;
        }   

        if (substr($linha, 0, 1) == "["){
            $section = substr($linha, 1, strlen($linha)-2);
            continue;
        }

        $pos = strpos($linha, "=");
        if ($pos){
            $ident = trim(substr($linha, 0, $pos - 1));
            $value = trim(substr($linha, $pos + 1, strlen($linha) - $pos + 1 ));

            $pos = strpos($value, ";");
            if ( $pos ){
                $value = trim(substr($value, 0, $pos - 1 )); // replace comments    
            }

        }

        $arr[$section][$ident] = $value;

    }

    fclose($file);

    return $arr;

}