说它奇怪是因为改了也是那样,照旧.
事情是这样的,因为要用sphinx搜索,设置完成后一切正常,然后开始搜,
却提示这个
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 775172097 bytes) in D:\WWW\phpcms\modules\search\classes\sphinxapi.class.php on line 637
然后改了php.ini中的memory_limit = 775172097M
这可够大了吧,但还是有这个提示,找到637行,
是这么写的while ( $left>0 && !feof($fp) )
{
$chunk = fread ( $fp, $left );
if ( $chunk )
{
$response .= $chunk;
$left -= strlen($chunk);
}
}

也看不出到底是哪出问题了

解决方案 »

  1.   

    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 775172097 bytes)
    是说:在可用的内存 134217728 bytes(128M)中申请 775172097 bytes(约 739M)空间失败
    显然是你的 sphinx 配置有问题
      

  2.   

    有道理,但我看不出哪里配置有问题
    下面是配置代码
    source main
                    {
                     type     = mysql    #数据库类型
                     sql_host    = 127.0.0.1 #数据库ip
                     sql_user    = root    #数据库用户名
                     sql_pass    = root    #数据库密码
                     sql_db     = phpcms   #数据库名
                     sql_port    = 3306    # 数据库端口
      sql_query_pre = SET NAMES utf8
                     sql_query_pre = REPLACE INTO jh_sphinx_counter SELECT 1, MAX(searchid) FROM jh_search
                     sql_query = SELECT searchid, adddate, siteid, typeid, id, data FROM jh_search \
                        WHERE searchid>=$start AND searchid<=$end
                     sql_query_range  = SELECT 1,max_doc_id FROM jh_sphinx_counter WHERE counter_id=1
                     sql_range_step = 5000
      #字符串属性设置、需要过滤、排序的时候用到
                     sql_attr_uint  = typeid
                     sql_attr_uint  = siteid
                     sql_attr_uint  = id
                     sql_attr_timestamp  = adddate
                     sql_query_info  = SELECT * FROM jh_search WHERE searchid=$id
                    }
     source delta
                    {
                     type     = mysql    #数据库类型
                     sql_host    = 127.0.0.1 #数据库ip
                     sql_user    = root    #数据库用户名
                     sql_pass    = root    #数据库密码
                     sql_db     = phpcms   #数据库名
                     sql_port    = 3306    # 数据库端口
         sql_query_pre = SET NAMES utf8
                        sql_query = SELECT searchid, adddate, siteid, typeid, id, data FROM jh_search \
                      WHERE searchid >( SELECT max_doc_id FROM jh_sphinx_counter WHERE counter_id=1 )
                     sql_query_post = REPLACE INTO jh_sphinx_counter SELECT 1, MAX(searchid) FROM jh_search
                     #字符串属性设置、需要过滤、排序的时候用到
                     sql_attr_uint  = typeid
                     sql_attr_uint  = siteid
                     sql_attr_uint  = id
                     sql_attr_timestamp  = adddate
                     sql_query_info  = SELECT * FROM jh_search WHERE searchid=$id
                    }
     #主索引
                    index main
                    {
                     source = main
                     # 放索引的目录
                     path = D:\sphinx\data\main
                     # 编码
                     charset_type = utf-8
                     # 指定utf-8的编码表
                     charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
                     # 简单分词,只支持0和1,如果要搜索中文,请指定为1
                     ngram_len = 1
                     # 需要分词的字符,如果要搜索中文,去掉前面的注释
                     ngram_chars   = U+3000..U+2FA1F
                    }
     #增量索引
                    index delta
                    {
                        source = delta
                        path = D:\sphinx\data\delta
                     # 编码
                     charset_type = utf-8
                     # 指定utf-8的编码表
                     charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
                     # 简单分词,只支持0和1,如果要搜索中文,请指定为1
                     ngram_len = 1
                     # 需要分词的字符,如果要搜索中文,去掉前面的注释
                     ngram_chars   = U+3000..U+2FA1F
                    }
                     
     indexer
                    {
                     mem_limit    = 500M
                    }
     searchd
                    {
                     port     = 9312
                     log      = D:\sphinx\data\phpcms\searchd.log
                     query_log    = D:\sphinx\data\phpcms\query.log
                     read_timeout   = 5
                     max_children   = 30
                     pid_file    = D:\sphinx\data\phpcms\searchd.pid
                     max_matches    = 2000
                     seamless_rotate   = 0
                     preopen_indexes   = 0
                     unlink_old    = 1
                    }
      

  3.   

    你重启apache或是php-fpm了吗...这样phpini才管用
      

  4.   

    这句话,我改成了mem_limit    = 1024M这么大,但还是提示Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 775172097 bytes) in D:\WWW\phpcms\modules\search\classes\sphinxapi.class.php on line 637