为什么我在这个PHP命令行脚本中出现此分段错误?

时间:2009-07-09 20:04:20

标签: php segmentation-fault

这只是一条快速脚本,可以显示我称之为“心理日志文件”的消息。只是为了跟踪我的想法,当我离开并让自己回去工作。无论如何,它大部分时间都可以正常工作,但我经常会遇到分段错误。在C中听说过他们,但之前从未在PHP中使用它们。这是脚本:

#!/usr/bin/php 
<?php 

    $mental_log_file = "/home/ali/mental-log"; 
    array_shift($argv);      //get rid of the initial arg (name of the command) 
    $log_entry = date('j-n-y H:i') . ' ' . implode(' ', $argv) . "\n";

    file_put_contents($mental_log_file, $log_entry, FILE_APPEND);

以下是我在几次跑步中得到的结果:

ali@oem-desktop:~$ mlog blah
ali@oem-desktop:~$ mlog blah
Segmentation fault
ali@oem-desktop:~$ mlog blah
ali@oem-desktop:~$ mlog blah
Segmentation fault
ali@oem-desktop:~$ mlog blah
ali@oem-desktop:~$ mlog blah
ali@oem-desktop:~$ mlog blah
Segmentation fault
ali@oem-desktop:~$ mlog blah
ali@oem-desktop:~$ mlog blah
Segmentation fault
ali@oem-desktop:~$ mlog blah
Segmentation fault

知道我在这里做错了什么吗?即使在产生分段错误的运行上,该文件似乎也按预期正确更新。我正在运行Ubuntu 9.04 Jaunty。

ali@oem-desktop:~$ php --version
PHP 5.2.6-3ubuntu4.1 with Suhosin-Patch 0.9.6.2 (cli) (built: Apr 23 2009 14:37:14) 
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies

提前致谢。

8 个答案:

答案 0 :(得分:9)

尝试

strace mlog blah

并查看是否提供了一些线索,就像它在死时所做的那样。对于它的价值,我无法在你报告的相同php版本的64位Jaunty安装上重现它。

答案 1 :(得分:4)

你很可能有一个以某种方式混淆的扩展。如果扩展是为不同版本的php或外部库构建的,则会发生这种情况。尝试禁用php.ini中的所有扩展,看看它是否解决了问题。如果是,则重新启用每个分机,一次一个,直到找到罪犯。

答案 2 :(得分:3)

可能是因为这个bug影响了Ubuntu和Debian ...... https://bugs.launchpad.net/ubuntu/+source/php5/+bug/343870

答案 3 :(得分:2)

在php5-mysql中看起来像Ubuntu bug #343870。我不再使用PHP mysql和mysqli模块禁用分段错误。

答案 4 :(得分:1)

我已经看到了完全相同的东西,它通常只是PHP错误的指示器。

如果问题仍然存在,我会升级到最新版本..提交错误报告。 如果您坚持使用ubuntu版本,您可以在ubuntu的跟踪器中发布错误报告。

答案 5 :(得分:1)

尝试更改扩展程序的加载顺序。我不得不在curl之前移动pgsql来摆脱我遇到的段错误。我读完之后试过了:

http://linux.m2osw.com/php_cli_segmentation_fault_with_pgsql

答案 6 :(得分:0)

无法复制,毫不奇怪。在实验上,我尝试使用fopen()而不是file_put_contents()附加到该文件。

答案 7 :(得分:-1)

由于简单的堆栈溢出,我收到了此错误。为什么我没有得到除分段错误之外的其他错误是一个很好的问题,但是使用stracedie()我追踪了问题。

服务器

  

Debian 6.0(挤压)

     

Linux domain.com 2.6.32-5-amd64#1 SMP Sun Sep 23 10:07:46 UTC 2012 x86_64 GNU / Linux

PHP

  

PHP 5.3.3-7 + squeeze14与Suhosin-Patch(cli)(内置:2012年8月6日14:18:06)

     

版权所有(c)1997-2009 PHP小组

     
    

Zend Engine v2.3.0,版权所有(c)1998-2010 Zend Technologies

         与SektionEins GmbH的Suhosin v0.9.32.1,Copyright(c)2007-2010

  

重现问题的代码

<?php   
    function Bar() {
        return Bar();
    }
    Bar();
?>

输出

  

php5 overflowtest.php

     
    

分段错误

  

Strace输出(如果有人可以用它做任何事情):

PASTEBIN LINK