1

私は Godaddy 共有ホスティングでホストされています。私のデータベースには 500 を超えるエントリがありますが、時間の経過とともにさらに多くなると予想しています。多分数千で。これを cron ジョブとして実行していますが、わずか 33 レコードでメモリ (64 MB) が不足します。共有ホスティングを使用しているため、最大メモリを変更できません。メモリ使用量を減らすためにできることはありますか? おそらく、ループするたびにメモリをクリアする方法はありますか?

include('simple_html_dom.php');
$html = new simple_html_dom();  

$price_query = mysql_query("SELECT * FROM prices");
while ($price_rows = mysql_fetch_assoc($price_query))
{
$vendor_id = $price_rows['vendor_id'];
$product_id = $price_rows['product_id'];
$product_page = $price_rows['product_page'];
$product_string = $price_rows['product_string'];
$product_array = $price_rows['product_array'];

if (urlOK($product_page))
    {
    $html = file_get_html($product_page);  

    $new_price = $html->find($product_string); 
    $new_price = preg_replace('/[\$,]/', '', $new_price);
    $product_price = $new_price[$product_array];
    $product_price = strip_tags($product_price);

    $qry="UPDATE prices SET product_price='$product_price' WHERE product_id = '$product_id' AND vendor_id = '$vendor_id'";
    mysql_query($qry);
    }

else
    {
    $qry="UPDATE prices SET product_price='0.00' WHERE product_id = '$product_id' AND vendor_id = '$vendor_id'";
    mysql_query($qry);
    }

$vendor_id = null;
$product_id = null;
$product_page = null;
    $product_string = null;
    $product_array = null;
$qry = null;
$html = null;
}

これは私が呼び出している1つの関数です:

function urlOk($url) 
{
    $headers = @get_headers($url);
    if($headers[0] == 'HTTP/1.1 200 OK') return true;
    else return false;
}
4

1 に答える 1

2

OK、数時間の調査の後、これを理解しました。問題自体は simple_html_dom ライブラリにあります。ループで使用すると、大量のメモリ リークが発生します。修正するには、これをループの最後に追加します。

$html->clear();
unset($html);   
于 2013-09-09T00:23:05.950 に答える