【问题标题】:Why Do I Get This Segmentation Fault In This PHP Command Line Script?为什么我在这个 PHP 命令行脚本中得到这个分段错误?
【发布时间】:2010-11-09 12:30:54
【问题描述】:

这只是我称之为“心理日志文件”的消息的快速脚本。只是为了在我迷失方向并让自己重新开始工作时跟踪我的想法。无论如何,它在大多数情况下都可以正常工作,但每隔一段时间我就会遇到分段错误。在 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 分段故障 ali@oem-desktop:~$ mlog blah ali@oem-desktop:~$ mlog blah 分段故障 ali@oem-desktop:~$ mlog blah ali@oem-desktop:~$ mlog blah ali@oem-desktop:~$ mlog blah 分段故障 ali@oem-desktop:~$ mlog blah ali@oem-desktop:~$ mlog blah 分段故障 ali@oem-desktop:~$ mlog blah 分段故障

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

ali@oem-desktop:~$ php --version PHP 5.2.6-3ubuntu4.1 和 Suhosin-Patch 0.9.6.2 (cli) (build: Apr 23 2009 14:37:14) 版权所有 (c) 1997-2008 PHP 集团 Zend Engine v2.2.0,版权所有 (c) 1998-2008 Zend Technologies

提前致谢。

【问题讨论】:

  • 我有一些相当琐碎的 PHP cli 脚本,它们似乎也随机出现段错误。

标签: php segmentation-fault


【解决方案1】:

试试

strace mlog blah

看看这是否能提供一些线索,说明它死后在做什么。对于它的价值,我无法在 64 位 Jaunty 安装中使用与您报告的相同的 php 构建来重现它。

【讨论】:

  • 谢谢!尝试运行它,但我对系统调用/低级编程不太了解,无法真正理解输出。
  • 将一段典型的崩溃粘贴到 pastebin.com 并在您的问题中添加指向它的链接
  • 另外,troelskn 可能正在做点什么——你启用了哪些扩展?
  • 哇...这救了我,伙计...可以看出这与正在进行的自动加载有关...strace 是一个很大的帮助
【解决方案2】:

很可能您有一个扩展程序以某种方式搞砸了。如果扩展是为不同版本的 php 或外部库构建的,则可能会发生这种情况。尝试禁用 php.ini 中的所有扩展,看看是否能解决问题。如果是,则重新启用每个扩展程序,一次一个,直到找到违规者。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        我也看到了完全相同的情况,而且通常只是表明 PHP 错误。

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

        【讨论】:

          【解决方案6】:

          尝试更改扩展程序的加载顺序。我不得不在 curl 之前移动 pgsql 以摆脱我遇到的段错误。看完这篇我试了一下:

          http://linux.m2osw.com/php_cli_segmentation_fault_with_pgsql

          【讨论】:

            【解决方案7】:

            不出所料,无法复制。在实验上,我会尝试使用fopen() 而不是file_put_contents() 附加到文件。

            【讨论】:

              【解决方案8】:

              由于简单的堆栈溢出,我收到此错误。为什么除了分段错误我没有收到其他错误是一个很好的问题,但使用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

              带有 Suhosin-Patch (cli) 的 PHP 5.3.3-7+squeeze14(构建时间:2012 年 8 月 6 日 14:18:06)

              版权所有 (c) 1997-2009 The PHP Group

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

              使用 Suhosin v0.9.32.1,版权所有 (c) 2007-2010,由 SektionEins GmbH 提供

              重现问题的代码

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

              输出

              php5溢出测试.php

              分段错误

              Strace 输出(以防任何人都可以使用它):

              PASTEBIN LINK

              【讨论】:

                猜你喜欢
                • 2017-09-18
                • 2016-11-25
                • 2019-10-08
                • 1970-01-01
                • 1970-01-01
                • 2019-09-13
                • 2014-07-31
                • 2021-03-28
                • 2011-05-06
                相关资源
                最近更新 更多