Php 允许的内存大小耗尽错误<;如何重置?
我一直在运行一个循环,将50000个数据集插入MySQL数据库。突然,托管空间上的服务器显示以下消息: 致命错误:在线/srv/www/htdocs/server/html/email.php中允许的内存大小为20971520字节(尝试分配32字节) 14 我知道这意味着什么,但我如何重置所有内存以便再次使用 注: 我不想增加我的记忆力,就像Php 允许的内存大小耗尽错误<;如何重置?,php,memory,Php,Memory,我一直在运行一个循环,将50000个数据集插入MySQL数据库。突然,托管空间上的服务器显示以下消息: 致命错误:在线/srv/www/htdocs/server/html/email.php中允许的内存大小为20971520字节(尝试分配32字节) 14 我知道这意味着什么,但我如何重置所有内存以便再次使用 注: 我不想增加我的记忆力,就像 ini_set('memory_limit', '-1'); 但是,您希望完全释放它。当您拥有来自提供商的共享系统时,在大多数情况下,您无法为自己设置内
ini_set('memory_limit', '-1');
但是,您希望完全释放它。当您拥有来自提供商的共享系统时,在大多数情况下,您无法为自己设置内存限制。然后,当服务器上每100人设置一个更高的内存限制时,提供者就会出现问题 因此,在您的情况下,它们会提供固定的20MB大小,并禁用内存限制功能 20MB并不是那么多。当您尝试插入大量数据集时,您需要一些内存。这就是为什么从允许的内存20971520字节中出现消息32字节
我认为20MB并没有真正好的解决方案来解决这个问题。也许您可以尝试向数据库添加一些逻辑,并创建一个存储过程我知道这是一个旧线程,但我找到了它,因此我认为值得为其他人发布 我在尝试对每个记录中的单个字段执行批量系统更新时遇到了这个错误。 这些记录被读入一个数组,经过处理并更新回数据库。 我认为错误是由于服务器上的阵列中存储了太多数据造成的 为了克服这个问题,我将任务拆分为一次处理1000条记录。 即;(代码已测试
$r_count=1; $start_id=0; $end_id=1000;
while($r_count>0)
{
$strSQL="SELECT * from spAddbook
WHERE id > '$start_id' AND id <= '$end_id'";
$result = mysql_query($strSQL, $link) or die ("Couldn't read because ".mysql_error());
$r_count = mysql_num_rows($result);
echo"<br>$r_count found<br>";
if (mysql_num_rows($result))
{
while ($qry = mysql_fetch_array($result))
{
// Read the Data and carry out processing
}
}
$start_id+=1000; $end_id+=1000;
}
echo"<br><br>All Done";
$r\u count=1;$start\u id=0;$end\u id=1000;
而($r\u计数>0)
{
$strSQL=“从spAddbook中选择*
其中id>“$start\u id”和id很可能您的脚本可以重写以避免此问题。谢谢John。我知道,我已经这样做了。但是如何释放现在似乎被阻止的内存?这取决于您的代码…您是否一次将查询全部放入?您不能将50k数据集拆分为小的插入包吗?可能会发布y的部分我们的代码herdo你的意思是没有php命令/函数来释放内存?我实际上也从调用其他脚本中得到了这个错误,而不是导致问题的脚本!感谢您的详细回复。你知道我如何重置内存吗?看起来变量中仍然充满了我查询的信息2天前做过。有趣的是,ini_set函数可以工作,即使我的提供商单独销售内存增加。很抱歉,我的回复太晚了。我又看到了这个问题。也许你应该在这里添加代码。也许我们可以优化这个代码。或者这个问题解决了吗?