首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导致PHP崩溃

问导致PHP崩溃
EN

Stack Overflow用户
提问于 2010-03-06 18:30:24
回答 3查看 479关注 0票数 13

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-06 20:07:14

通过导致某种无限递归,您可能会导致PHP崩溃。

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

代码语言:javascript
复制
require __FILE__;  

或者是神奇的__sleep()方法中的一个递归,它应该反序列化一个对象,但却调用了serialize():

代码语言:javascript
复制
class sleepCrasher
{
    public function __sleep()
    {
        serialize($this);
    }
}

serialize(new sleepCrasher());

或创建新实例的class destructor:

代码语言:javascript
复制
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();

以及递归__toString():

代码语言:javascript
复制
class toStringCrasher
{
    public function __tostring()
    {
        return strval($this);
    }
}

strval(new toStringCrasher());

PHP还可以防止其他的递归场景。例如,在没有退出条件的情况下调用递归函数或递归自产生器。这些错误不会导致崩溃,但会导致Allowed memory size of ...致命错误。

有关更多示例,您可能希望查看以下内容:

票数 12
EN

Stack Overflow用户

发布于 2010-03-16 03:53:50

你可以在任何语言中做会导致溢出的东西(比如递归地调用当前函数,无意识地消耗内存,等等)。或者依靠老式的PHP解释器来完成这项工作。只要看看how many memory leaks were fixed in PHP5 (我最喜欢的:在5.2.6中,他们修复了bug #44069:“使用.而不是.=进行连接的巨大内存使用量”)。

总而言之,如果你只想为一个http请求提供服务,PHP是可以的(最多)。但你不能真的用它做复杂的事情(我曾经尝试实现一个Peer2Peer客户端,服务器在10分钟后就死于内存不足-当然,这可能是我的一个错误,但我花了几天的时间在我自己的代码中发现了漏洞-但没有用)。

票数 2
EN

Stack Overflow用户

发布于 2010-03-14 21:30:39

PHP是一种解释型语言,因此所有的php脚本都受到保护,不会出现内存泄漏、缓冲区溢出和堆栈溢出。

你会遇到这样的问题:

整数溢出,如果您分配的数字太大,它将溢出,并且不会发生异常。

内存不足,使用的内存多于在php.ini中配置的内存大小

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2392157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档