PHP内置服务器退出SIGSEGV / Wordpress

时间:2014-05-21 22:13:06

标签: php wordpress infinite-loop sigsegv

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

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

我希望我能提供更多详细信息,但我似乎无法从PHP中获取有关此内容的任何信息。我知道它退出SIGSEGV的唯一原因是我正在与领班一起运行这个过程,否则这个过程就会默默地退出。

似乎没有特定的代码行使其中断,我可以根据在退出之前设法呈现的HTML来追踪错误的区域,我可以坚持一些{{1}并且它在任何给定的一个上都会中断。

注意:

  • 服务器工作正常,直到我升级到Mavericks,所以认为可能存在干扰。
  • 确认在CURLing任何URL时都会发生这种情况,因此可能会排除这是服务静态文件的问题。
  • 没有耗尽我的记忆限制

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

1 个答案:

答案 0 :(得分: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等。