php segmentation fault

在特殊的场景下,在php上执行PHP cli命令会出现segmentation fault错误,这个cli命令很简单,但是却报错了,这让人很困惑,当然你可以GDB进行调试,通常最后都会涉及一些内存地址,是的,这个问题和内存分配有关系。

什么segmentation错误?在计算技术中,分段故障(通常简称为segfault)或访问冲突是由具有内存保护的硬件引起的故障或故障状态,通知操作系统软件试图访问内存的限制区域(内存访问冲突)。

GDP调试

在这种情况下,只需运行用GDB包装的脚本即可访问回溯:

$ gdb php
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
---- (lots of output)
(gdb) run script.php arg1 arg2
Program terminated with signal SIGSEGV, Segmentation fault.
(gdb) bt

检查PHP扩展冲突

PHP分段错误的一个常见原因是两个扩展冲突。
Blackfire的探测可能与其他PHP扩展冲突,包括Pinba、Xdebug、Suhosin。
如果您安装了列出的任何扩展,请完全禁用它们。如果您的应用程序运行正确,您将发现冲突。您需要禁用冲突的扩展才能使用Blackfire。

这类问题通常与内存分配有关。原因可能是错误的PHP配置,例如查看php.ini文件低于机器提供的。如果有疑问,请阅读操作系统的“共享内存”设置。

用PHP的filter_var函数验证IP地址
Tags: