PHP如何导致内存泄漏,缓冲区溢出,堆栈溢出和其他类似的错误? PHP甚至会导致这样的错误?导致PHP崩溃
导致PHP崩溃
回答
通过造成一些有点无限的递归,你可以导致PHP崩溃。
例如,递归需要本身应该导致堆栈溢出文件:
require __FILE__;
或者在应该反序列化对象的魔法__sleep()
方法的递归,但呼吁serialize()
代替:
class sleepCrasher
{
public function __sleep()
{
serialize($this);
}
}
serialize(new sleepCrasher());
或者创建一个新class destructor实例:
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()
:
class toStringCrasher
{
public function __tostring()
{
return strval($this);
}
}
strval(new toStringCrasher());
有PHP是针对保护的其他递归场景。例如,调用一个没有退出条件的递归函数或递归自产生成器。这些不会导致崩溃,而是一个致命的错误。
更多的例子,你可能想看看:
爱说一句:'了shell_exec(“killall -11的httpd”);' – p4bl0 2010-03-14 13:36:37
我希望这个家伙的身价,这并不成为自动接受的答案,因为它很难回答题。不错的例子。 – 2010-03-15 21:27:26
PHP是一种解释型语言,因此所有的PHP脚本从内存泄漏,缓冲区溢出保护堆栈溢出。
如何以往你会遇到的问题,例如:
整数溢出,如果你分配一个编号过大就会溢出,并不会发生异常。
出的内存,使用比在php.ini配置内存大小的内存
你可以做到这一点会引起任何语言溢出(如递归调用当前功能,盲目吃内存等方面的东西。)或依靠良好的PHP解释器来完成这项工作。只需看看how many memory leaks were fixed in PHP5(我的最爱:在5.2.6中,他们修复了bug #44069:'使用.
而不是.=
'连接的巨大内存使用情况')。
总的来说PHP是ok(最多)如果你只想提供一个http请求。但是你不能真正做到复杂的东西(我曾经尝试过实现一个Peer2Peer客户端,服务器在10分钟后死于内存短缺 - 当然可能是我的一个错误,但我花了几天的时间发现泄漏我自己的代码 - 无济于事)。
- 1. ArrayAdapter导致崩溃
- 2. presentViewController导致崩溃
- 3. onBackPressed()导致崩溃
- 4. UINavigationBar导致崩溃..!
- 5. setText导致崩溃
- 6. CFRelease导致崩溃
- 7. performSegueWithIdentifier导致崩溃
- 8. preferences.getBoolean导致崩溃
- 9. CGColorRef导致崩溃
- 10. UIButton导致崩溃
- 11. facet_grid()导致崩溃
- 12. ViewPager导致崩溃
- 13. iOS:registerDefaults导致崩溃
- 14. PyQt QTreeWidget.clear()导致崩溃
- 15. c malloc导致崩溃
- 16. jsonObjectWithData导致内存崩溃?
- 17. SearchBarController谓词导致崩溃
- 18. kABPersonAddressProperty导致崩溃在ABAddressBookGetPersonWithRecordID
- 19. mysql_connect()导致网页崩溃
- 20. Android:意图导致崩溃
- 21. C++ VirtualProtect PAGE_NOACCESS导致崩溃
- 22. PyQt4 TextEdit.clear导致崩溃
- 23. Public ObservableCollection导致崩溃
- 24. CopyFromRecordset导致Excel崩溃
- 25. Emojis导致iPhone崩溃
- 26. UITableViewCell AutoRelease导致崩溃...?
- 27. UIWebView发布导致崩溃
- 28. 投票导致崩溃
- 29. Proguard的导致崩溃
- 30. 导致崩溃的按钮
希望没有。它应该在它们发生之前检测并避免这样的错误。 – Gumbo 2010-03-06 10:40:14
http://stackoverflow.com/questions/849549/detecting-memory-leaks-in-large-php-stacks – Pavunkumar 2010-03-06 10:45:02
你的意思是PHP的引擎,或PHP脚本运行在引擎之上? – 2010-03-06 12:00:53