【问题标题】:PHP Built-In Server Exiting with SIGSEGV / Wordpress使用 SIGSEGV / Wordpress 退出 PHP 内置服务器
【发布时间】:2014-05-21 22:13:05
【问题描述】:

在本地开发一个 wordpress 博客,我的 PHP 服务器在渲染页面中途因 SIGSEGV 而死。

这是我的启动脚本:sudo php -S 127.0.0.1:80 -t ../reece-blog-local

我希望我能提供更多详细信息,但我似乎无法从 PHP 中获得任何关于此的信息。我知道它与 SIGSEGV 一起退出的唯一原因是我正在与工头一起运行此进程,否则该进程只是静默退出。

似乎没有特定的代码行使其中断,我可以根据在退出前设法呈现的 HTML 来追踪错误区域,我可以坚持一些 echo "Hello, world!"s它会在其中任何一个上中断。

注意事项:

  • 在我升级到 Mavericks 之前,服务器一直运行良好,因此我认为可能存在干扰。
  • 确认在 CURLing 任何 URL 时都会发生这种情况,因此很可能排除了这是与提供静态文件有关的问题。
  • 没有耗尽我的内存限制

如何进一步调试此问题,以代替 PHP 输出的任何特定错误?

【问题讨论】:

    标签: php wordpress infinite-loop segmentation-fault


    【解决方案1】:

    PHP 服务器将退出并出现分段错误 (SIGSEGV) 错误 in the event of infinite recursion,例如:

    function test() {
        test();
    }
    

    如果输出被缓冲并且您​​使用echo 来调试这样的错误,则错误可能会出现在奇怪的地方(因此它似乎会在echo "Hello, world!"; 之类的行上中断)

    相反,您可以使用error_log($yourMessage, 4); 将消息输出到控制台。这有助于我找到错误(尽管从周围阅读看来XDebug 可能是查找此类错误的首选解决方案。)

    对于它的价值,这实际上是我如何进行无限递归:

    class TheParent {
      public function __call($method, $args) {
        return call_user_func_array(array($this, $method), $args);
      }
    }
    
    class TheChild extends TheParent {
      protected function thisIsOkay() {
        echo 'yay';
      }
      private function sigsegv() {
        echo 'no';
      }
    }
    
    $c = new TheChild;
    $c->thisIsOkay();
    $c->sigsegv();
    

    如果我们尝试调用 TheChild 中的私有函数,则会调用 __call,尝试访问私有函数,调用 __call 等。

    【讨论】:

      猜你喜欢
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多