允许的内存大小为33554432字节耗尽(尝试分配30720字节)

时间:2012-12-01 18:20:35

标签: php mysql memory

正如标题所示,我在加载我的网站时收到错误Minecraft-Seeds.net它使用AV Arcade script运行,并且在过去的一年中没有任何障碍而且运行正常半即可。最近,该网站一直给我内存错误,我们已经绝对没有更改代码,甚至恢复了以前的网站备份。我们的访问并没有疯狂地解释资源使用量的增加,因为我们本月有一个低月,大​​约有300,000次访问。

此处的热门建议Allowed memory size of 33554432 bytes exhausted (tried to allocate 43148176 bytes) in php不起作用,因为我的脚本存在一个实际问题,导致它使用的内存比我的内存多得多。

我查看了代码并且不确定我应该从哪里开始查看。 mySQL查询似乎有LIMIT,所以我不确定导致错误的是什么。

如果你现在去网站,它会给你以下地方作为错误的来源:

  

/home/mineseed/public_html/config.php 在线 39

这行代码如下$new_plays = 4;我尝试将其评论出来,并导致错误只是在我的网站上跳转到一行代码之后,没有明确的解决方案。

非常感谢任何帮助。

修改 我添加了config.php文件

<?php
// mySQL information
$server = 'localhost';                   // MySql server
$username = 'user';                      // MySql Username
$password = 'pass';                         // MySql Password
$database = 'database';                  // MySql Database

// The following should not be edited
  $con = mysql_connect("$server","$username","$password");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
mysql_select_db("$database", $con); 

//mysql_query("UPDATE ava_games SET height='300' WHERE height='0'") or die (mysql_error());

//
$sql = mysql_query("SELECT * FROM ava_settings");
$row = mysql_fetch_array($sql);
$site_name = $row['site_name'];
$site_description = $row['site_description'];
$site_keywords = $row['site_keywords'];
$site_url = $row['site_url'];
$seo_on = $row['seo_on'];
$template_url = $row['template_url'];
$max_results = $row['max_results'];
$image_height = $row['image_height'];
$image_width = $row['image_width'];
$adsense = $row['adsense'];
$cat_numbers = $row['cat_numbers'];
$email_on = $row['email_on'];
$add_to_site = $row['add_to_site'];
$plays = $row['plays'];
$language = $row['language'];
$featured = $row['featured_games'];
$play_limit = $row['play_limit'];
$adsense_id = $row['adsense_id'];
$new_plays = 4;

// Convert super globals 
if (phpversion() >= '5.0.0') 
{ 
    $HTTP_POST_VARS = ($_POST); 
    $HTTP_GET_VARS = ($_GET); 
}
?>

3 个答案:

答案 0 :(得分:1)

  1. 首先,您需要检查您是否在PHP脚本中使用递归,因为某些时间递归失败,这就是发生此错误的原因。

  2. 如果您使用太多数组,请在使用后取消设置,以便释放一些内存供其他执行。即:unset($array)

  3. 请增加php.ini的内存限制或使用php函数ini_set('memory_limit','128M');或使用.htaccess文件覆盖memory_limit

答案 1 :(得分:0)

尝试取消设置不需要的变量并在第39行之前腾出内存。此外,继续清理后面的代码。虽然不是首选,但您也可以增加php.ini中的内存分配。

只需提取所需的列

,即可使查询高效
   Select column1, column2......

确保列具有索引以获得更快的结果。如果您确定需要检索的结果数量,查询还需要使用“限制”。

答案 2 :(得分:0)

对不起我的英语。如果不查看代码,很难分辨出内存泄漏的位置。是的,我同意所有修复(增加php内存,限制查询中的行)。当您使用数组或使用大文件(解析xml)或类似的东西时,内存可能会掉落。尝试找到增加内存的代码部分,使用var_dump(),debug_backtrace(),或尝试使用记录所有变量的库