Php &引用;“允许的内存大小”;存在'时出错;It’内存足够了

Php &引用;“允许的内存大小”;存在'时出错;It’内存足够了,php,memory-management,fastcgi,Php,Memory Management,Fastcgi,我有 PHP致命错误:已耗尽13241728字节的允许内存大小(尝试分配24字节) 脚本(php)文件为400kb,输出为250kb 它打开(并取消序列化)多个文件,每个文件不超过8mb(总计32Mb) 例如: while (($file = readdir($dir))!=false) { $inf=file_get_contents($file); $inf=unserialize($inf); ...... } 我正在使用快速cgi 为什么应该足够的内存却没有足够的内存 我已经在php.

我有

PHP致命错误:
已耗尽13241728字节的允许内存大小(尝试分配24字节)

脚本(php)文件为400kb,输出为250kb

它打开(并取消序列化)多个文件,每个文件不超过8mb(总计32Mb)

例如:

while (($file = readdir($dir))!=false) {
$inf=file_get_contents($file);
$inf=unserialize($inf);
......
}
我正在使用快速cgi

为什么应该足够的内存却没有足够的内存

我已经在php.ini中将它从12Mb、16、32、50(相同的错误)设置为80Mb(哇,它工作了)


现在它被设置为
-1
,但我想弄清楚为什么会发生这种情况,以及如何解决它(可能会取消设置一些变量之类的)

这是因为php不知道如何正确地取消序列化$inf

它以无限的方式循环

您要获取的文件中有什么内容

我认为这是因为您试图将未序列化的变量保存到自身中

非序列化是复发性的

所以你应该:

  $variable = unserialize ( $inf );
而不是

  $inf = unserialize ( $inf );

官方php文档:

您好,请您再粘贴一些代码以便更好地理解。这不是输出大小,也不是脚本大小。它是您尝试加载的文件的大小,加上开销,再加上未序列化数组的大小takes@AmanChhabra代码大约是400kb我不知道该用哪一部分show@Martijn你是对的,我想知道它需要多少数据,当没有数据时,你可以在循环中添加这些数据,通过一些计算,你可能会发现这个坏蛋:你是说
$inf
=unserialize(
$inf
)循环本身?)是:),我上周在尝试在phpi中序列化/取消序列化对象时遇到了相同的问题。很抱歉,我不知道如何帮助您,我已经找到了。有一个奇怪的文件未分类。在我的win32 php上,在取消序列化()之后是16Mb,在服务器上是60Mb。根据我的经验,序列化/取消序列化应该只用于数组或简单对象。。。因为它需要大量的处理时间和内存,我不知道你的项目是关于什么的,但是,你可以尝试一些不同的东西,以优化你的过程。。。