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 ...致命错误.
有关更多示例,您可能希望看到: