PHP/Apache崩溃在脚本上 (段错误(11))

9

[已解决]

我在本地主机上运行一个包含一些文件的PHP脚本,但总是在结束前崩溃。

错误报告已打开。Opera、Safari和Firefox返回一个空屏幕。但Chrome返回:

无法加载网页,因为服务器没有发送任何数据。错误代码:ERR_EMPTY_RESPONSE

Apache日志返回:

[Sun Dec 15 19:29:23 2013] [notice] child pid 34267 exit signal Segmentation fault (11)

第一次遇到此问题时使用的是PHP 5.5.6。降级到PHP 5.4.21后仍然存在问题。

问题不在脚本内部。随机注释掉50行代码中的几行可以解决问题。这让我想知道我的脚本是否太长而不能执行。

有人有什么建议吗?如何解决这个问题?

更新:

问题不仅出现在本地主机上,还出现在CentOs 6.4和PHP 5.3.3上运行的Web服务器上,在Apache上产生相同的错误。

[Sun Dec 15 23:15:10 2013] [notice] child pid 18409 exit signal Segmentation fault (11)

更新2:

从命令行运行php:

$ php index.php 致命错误:在Encrypt.class.php的第135行调用未定义的函数 mcrypt_create_iv()

在Encrypt.class.php的第135行之前加上注释后:

$ php index.php
Segmentation fault: 11

更新3(解决方案):

在使用strace (strace php index.php) 命令行运行index后,我在其中一个查询中找到了问题。

经过更多的调试(使用PDO而不是我的自己的类),我发现问题出在设置自己的PDO选项“ATTR_PERSISTENT => true”上。关闭此选项解决了我的问题。


1
尝试从命令行运行脚本。如果它抛出分段错误,那么你的 PHP 版本需要重新安装。如果它从命令行正常运行,那么你应该重新安装 Apache。哪一行代码引发了这个错误?你知道吗? - user1846065
@MisterMelancholy 在命令行上运行该文件时出现“致命错误”:在Encrypt.class.php的第135行调用未定义的函数mcrypt_create_iv()。该函数在浏览器中正常工作,没有特定的行导致错误。 - webecreative
当您降级 PHP 时,您确定所有扩展名为 .so 的文件也被降级了吗?也许您正在使用 PHP 5.4 或 5.3 中的 PHP 5.5 mcrypt 扩展(并且在 CLI 读取的任何 php.ini 中都没有包含它)。 - Brad
降级成功。通过macports升级并返回到osx 10.9上的默认PHP,更改了httpd.conf中的路径。mcrypt扩展在我的PHP 5.3.3 Web服务器上也正常工作。 - webecreative
2
如果您已经解决了问题,请单独发布您的解决方案并接受它,这样可以让其他人更容易地看到解决方案,并将问题从“未回答的问题”队列中移除。 - pwaring
1个回答

5

更新3:(解决方案)

非常遗憾,PDO的持久选项破坏了我的性能。

通过使用strace命令行运行索引(strace php index.php),我找到了一个查询问题的解决方案。

将查询分离后,我用默认PDO替换了我的类。添加我的类选项,直到它再次出现问题: 经过一些调试(使用PDO而不是我的自己的类),我发现问题在于设置了我的PDO选项“ATTR_PERSISTENT => true”。禁用此选项解决了我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接