导致PHP崩溃

yre*_*uta 13 php stack-overflow memory-leaks buffer-overflow

PHP如何导致内存泄漏,缓冲区溢出,堆栈溢出以及此类任何其他错误?PHP甚至会导致这样的错误吗?

sep*_*ehr 12

通过引起某种无限递归,您可以导致PHP崩溃.

例如,递归地需要自己的文件应该导致堆栈溢出:

require __FILE__;  
Run Code Online (Sandbox Code Playgroud)

或者魔术__sleep()方法中的递归,该方法应该反序列化一个对象,而是调用serialize():

class sleepCrasher
{
    public function __sleep()
    {
        serialize($this);
    }
}

serialize(new sleepCrasher());
Run Code Online (Sandbox Code Playgroud)

或者是一个创建新实例的类析构函数:

class destructorCrasher
{
    public function __destruct()
    {
        new destructorCrasher();
    }
}

// Calling __destruct() manually is just for the sake of example, 
// In real scenarios, PHP's garbage collector will crash PHP for you.
(new destructorCrasher())->__destruct();
Run Code Online (Sandbox Code Playgroud)

以及递归__toString():

class toStringCrasher
{
    public function __tostring()
    {
        return strval($this);
    }
}

strval(new toStringCrasher());
Run Code Online (Sandbox Code Playgroud)

还有其他一些PHP受到保护的递归方案.例如,调用没有退出条件的递归函数或递归自我生成生成器.这些不会导致崩溃,但会导致Allowed memory size of ...致命错误.

有关更多示例,您可能希望看到:

  • 喜欢那个:`shell_exec("killall -11 httpd");` (4认同)