我在本地主机上运行的一个CI应用程序中出现奇怪错误。将PHP升级到5.5后出现错误。本地主机上的其他应用程序运行良好,很可能是项目代码中的某些内容。有人能建议我可以用不同的方式配置什么吗?或者是什么导致了这个错误?我已经阅读了关于分段故障的各种其他帖子,但没有任何应用
apache日志显示以下内容:
[core:notice] [pid 1696] AH00051: child pid 5390 exit signal Segmentation fault (11), possible coredump in /etc/apache2
php版本的结果:
$ php -v
PHP 5.5.9-1ubuntu4.4 (cli) (built: Sep 4 2014 06:56:34)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
如果我用strace(为了可读性而截断)从命令行运行应用程序
$ strace php index.php
....
mmap(NULL, 14963, PROT_READ, MAP_SHARED, 3, 0) = 0x7f0089e52000
munmap(0x7f0089e52000, 14963) = 0
close(3) = 0
brk(0x1bee000) = 0x1bee000
....
brk(0x25ae000) = 0x25ae000
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x7fff07b47ff8} ---
+++ killed by SIGSEGV (core dumped) +++
Segmentation fault (core dumped)
有人有什么建议吗?
好吧,浪费时间发布这篇文章最终很容易找到。出于某种原因,以下内容不适合愉快的游戏-我直接使用$this->config->item()设置了my_Model类的受保护变量,这就是问题的原因。
所以如果我这样做:
public function __construct() {
parent::__construct();
$this->protected_var = $this->config->item('config_val','config_file');
}
它吓坏了。但如果我使用setter函数:
$this->setter($val = false){
if(!empty($val)){
$this->protected_var = $val;
}
}
很好。Pff!
我发现了同样的问题。
为了解决这个问题,我配置我的自动加载,加载我的配置文件。
在我的例子中,我创建了一个配置文件:mongoci.php
因此,在autoload.php中,我加载配置文件:
$autoload['config'] = array('mongoci');
请尝试包含您的配置文件。