-2

タイトルが示すように、私のWebサイトMinecraft-Seeds.netをロードするときにエラーが発生します。これは、 AVアーケードスクリプトを使用して実行され、過去1年半の間問題なく正常に実行されています。最近、ウェブサイトでメモリエラーが発生しました。コードにまったく変更を加えず、ウェブサイトの以前のバックアップも復元しました。今月の訪問数は約30万回と低かったため、リソース使用量の増加を説明するために訪問数が急増していません。

ここで人気のある提案は、phpで33554432バイトのメモリサイズを使い果たした(43148176バイトを割り当てようとした)が機能しません。スクリプトに実際の問題があり、私が持っているよりもはるかに多くのメモリを使用する原因になっているためです。

私はコードを調べましたが、正確にどこから探し始めるべきかわかりません。mySQLクエリには制限があるように見えるので、エラーの原因がわかりません。

今すぐWebサイトにアクセスすると、エラーの原因として次の場所が表示されます。

39行目の/home/mineseed/public_html/config.php

このコード行は次のとおりです$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); 
}
?>
4

3 に答える 3

1
  1. 最初に、php スクリプトで再帰を使用していることを確認する必要があります。これは、再帰が失敗したことがあり、このエラーが発生する理由です。

  2. あまりにも多くの配列を使用している場合は、使用後に設定を解除して、他の実行のためにメモリを解放してください。すなわち:unset($array)

  3. メモリ制限を増やすphp.iniか、php 関数ini_set('memory_limit','128M');を使用するか、ファイルを使用.htaccessしてオーバーライドしてくださいmemory_limit

于 2012-12-01T18:32:29.600 に答える
0

不要な変数の設定を解除し、39行目の前にメモリを空にしてみてください。また、次のコードのクリーンアップを続行します。推奨されていませんが、php.iniでメモリ割り当てを増やすこともできます。

必要な列のみをプルすることで、クエリを効率的にすることができます。

   Select column1, column2......

より高速な結果を実現するために、列にインデックスがあることを確認してください。取得する必要のある結果の数が確実な場合は、クエリで「limit」を使用する必要もあります。

于 2012-12-01T18:25:05.973 に答える
0

私の英語でごめんなさい。コードを調べずに、メモリ リークがどこにあるかを判断するのは非常に困難です。はい、すべての修正に同意します(phpメモリの増加、クエリの行の制限)。配列や大きなファイル ( xml の解析) などを扱っていると、どこかでメモリが不足する可能性があります。コードのどの部分がメモリを増やしているかを調べるか、var_dump()、debug_backtrace() を使用するか、すべての変数をログに記録するライブラリを使用してみてください

于 2012-12-01T18:33:37.343 に答える