PHP内存限制25MB已用尽-文件上载/裁剪/调整大小
我使用单个图像上载/裁剪/调整大小脚本来处理10MB以下的文件 在测试时,我将php_ini内存限制设置为25M,当上传一个只有1.4MB的文件时,内存就耗尽了PHP内存限制25MB已用尽-文件上载/裁剪/调整大小,php,upload,resize,crop,memory-limit,Php,Upload,Resize,Crop,Memory Limit,我使用单个图像上载/裁剪/调整大小脚本来处理10MB以下的文件 在测试时,我将php_ini内存限制设置为25M,当上传一个只有1.4MB的文件时,内存就耗尽了 "Allowed memory size of 26214400 bytes exhausted (tried to allocate 10368 bytes)" 这对我来说似乎很奇怪,是不是1036825MB 我的脚本应该使用这么多内存吗 如果您使用GD调整大小,可以。我会尝试使用其他libs或控制台工具进行图像处理,它们可以提供更
"Allowed memory size of 26214400 bytes exhausted (tried to allocate 10368 bytes)"
这对我来说似乎很奇怪,是不是10368<26214400?(反问句)
还是说我在25MB上用了10368字节?我的脚本应该使用这么多内存吗 代码:
错误消息说它试图再分配10368字节,但不可用。换句话说,您的25MB池已耗尽,脚本无法分配所需的10368字节 您可以在
php.ini
文件中增加此限制,方法是添加或更新类似以下内容的行:
memory_limit = 64M
至于“25MB是否足够”,这对我们来说是一个很难回答的问题。。。当然有一些脚本需要64MB甚至更多。如果您发现必须不断增加内存池的大小,我会开始研究是什么占用了这么多空间
这对内存池的大小有一些很好的讨论
编辑看到您的代码发布,处理图像时肯定会消耗大量内存。处理完图像资源后,可以通过调用来帮助脚本。错误消息说它试图再分配10368字节,但不可用。换句话说,您的25MB池已耗尽,脚本无法分配所需的10368字节 您可以在
php.ini
文件中增加此限制,方法是添加或更新类似以下内容的行:
memory_limit = 64M
至于“25MB是否足够”,这对我们来说是一个很难回答的问题。。。当然有一些脚本需要64MB甚至更多。如果您发现必须不断增加内存池的大小,我会开始研究是什么占用了这么多空间
这对内存池的大小有一些很好的讨论
编辑看到您的代码发布,处理图像时肯定会消耗大量内存。您可以在使用完图像资源后通过调用来帮助脚本。这意味着当您超出限制时,脚本试图分配10368字节,但没有成功。这并不意味着,如果将限制提高到26MB,就不会再有这个问题。该错误可能在以后某个时候发生。您可以尝试以较小的步骤增加它(例如32MB、48MB等),直到不再出现此错误。这意味着在超出限制时,您的脚本尝试分配10368字节,但没有成功。这并不意味着,如果将限制提高到26MB,就不会再有这个问题。该错误可能在以后某个时候发生。您可以尝试以较小的步骤增加它(例如32MB、48MB等),直到不再出现此错误。或者这是否意味着我将10368字节增加到25MB 否。您的脚本试图分配10368字节,10368+alreadyallocated>25MB 我的脚本应该使用这么多内存吗
如果您使用GD调整大小,可以。我会尝试使用其他libs或控制台工具进行图像处理,它们可以提供更高的性能。而且,如果是公共网站,您可以决定使用队列进行图像处理,而不是及时调整图像大小,或者这是否意味着我在25MB上使用了10368字节 否。您的脚本试图分配10368字节,10368+alreadyallocated>25MB 我的脚本应该使用这么多内存吗 如果您使用GD调整大小,可以。我会尝试使用其他libs或控制台工具进行图像处理,它们可以提供更高的性能。而且,您可以决定使用队列进行图像处理,而不是及时调整图像大小,如果它是公共网站使用后释放内存:
if( $imgt )
{
$old_image = $imgcreatefrom($updir.$img);
$new_image = imagecreatetruecolor($thumbnail_width, $thumbnail_height);
imageCopyResized($new_image,$old_image,$dest_x,
$dest_y,0,0,$new_width,$new_height,$original_width,$original_height);
imagedestroy($old_image);
$imgt($new_image,$updir.$thumb_preword.$img);
imagedestroy($new_image);
}
用于在使用后释放内存:
if( $imgt )
{
$old_image = $imgcreatefrom($updir.$img);
$new_image = imagecreatetruecolor($thumbnail_width, $thumbnail_height);
imageCopyResized($new_image,$old_image,$dest_x,
$dest_y,0,0,$new_width,$new_height,$original_width,$original_height);
imagedestroy($old_image);
$imgt($new_image,$updir.$thumb_preword.$img);
imagedestroy($new_image);
}
除了已经说过的话之外:
永远不要忘记处理压缩文件格式(如JPEG)需要比实际文件大小多得多的内存。3000 x 3000像素JPG文件的重量仅为500kb,但需要(大约)3000 x 3000 x 3(红色、绿色和蓝色各一个字节,根据模式,Alpha至少需要一个字节)=27MB。除了已经说过的内容之外:
永远不要忘记处理压缩文件格式(如JPEG)需要比实际文件大小多得多的内存。3000 x 3000像素JPG文件的重量仅为500kb,但需要(大约)3000 x 3000 x 3(红色、绿色和蓝色各一个字节,根据模式,Alpha至少需要一个字节)=27 MB。在尝试分配另一个10368字节时,刚刚达到内存限制。请向我们展示一些代码,以便我们可以帮助您。感谢您的输入,代码发布后很难确定最佳答案,总体而言,您的答案与我的要求完全一致。谢谢您在尝试分配另一个10368字节时刚刚达到内存限制。请向我们展示一些代码,以便我们可以帮助您。感谢您的输入,代码发布后很难确定最佳答案,总体而言,您的答案与我的要求完全一致。谢谢谢谢你,这真的让评估“可接受的”效率成为焦点。+1我打赌他通过调试器运行了他的代码,他会在
$imgcreatefrom($updir.$img)上大发雷霆代码>(如果他没有粘贴错误消息的一部分还没有指明该行)。谢谢,这真的让评估“可接受”效率成为焦点。+1我打赌他通过调试器运行了他的代码,他会在$imgcreatefrom($updir.$img)处爆炸代码>(如果他没有粘贴错误消息的一部分还没有指出那一行)。好极了,这使我的内存使用量下降了一些。我应该为其他人指出这个问题,