PHPのsimplexml_load_file()を使用してxmlファイルを解析してから、mysql ISAMテーブルに目的のデータを挿入しています。問題は、このコードが時間の「大部分」で動作し、ここで500の内部サーバーエラーが発生することです。私が処理しようとしているXMLファイルは大きく(約50 MB)、動作するときにはmysqlテーブルに約25000個の行があります。エラーが発生すると、スクリプトはいくつかの行から数千行に何かを挿入します。xmlを解析してmysqlテーブルにデータを挿入します
とにかく、ここにコードがあります。誰かがこれについての洞察を持っているか、あるいは別の方法を持っていれば分かりますが、私は多分バッチ処理などをしています。
<?php
include ("myconnection.php");
mysql_query("DELETE FROM mytable") or die(mysql_error());
echo "data deleted, now insert: <br /><br />";
//the url for the feed:
$feed = 'cachy/copy.xml';
echo "myfeed: ".$feed;
echo "<br />";
// Load the feed
$xml = simplexml_load_file($feed);
if ($xml != null)
{
echo "<br />Success! feed available!<br /><br />";
}
else
{
echo "<br />Couldn't fetch the content<br /><br />";
die;
}
//die;
//ini_set("memory_limit","256M");
//set_time_limit(120);
function clean($input)
{
$input = trim($input);
$input = htmlentities($input, ENT_QUOTES);
$input = mysql_escape_string($input);
$input = EscapeShellCmd($input);
return $input;
}
//insert data from feed
foreach($xml->xpath('//product') as $products)
{
$product_name = clean($products->product_name);
mysql_unbuffered_query("INSERT INTO mytable (onsaledate, onsaletime, eventdate, eventtime, buyat_short_deeplink_url, product_name, level1, level2, VenueName, VenueDMAID)VALUES (\"$products->OnsaleDate\",\"$products->OnsaleTime\",\"$products->EventDate\",\"$products->EventTime\",\"$products->buyat_short_deeplink_url\",\"$product_name\",\"$products->level1\",\"$products->level2\",\"$products->VenueName\",\"$products->VenueDMAID\")") or die(mysql_error());
}
mysql_close($myConnection);
echo "records inserted my man!";
die;
ご協力いただきありがとうございます。
私は削除を切り捨てるように変更しました。これは、少し速いかもしれないようです。 私のループにあなたの提案された挿入物をどのように構築するのですか? エラーは次のとおりです。 内部サーバーエラー サーバーで内部エラーまたは構成ミスが発生し、要求を完了できませんでした。 非常に説明的ではありません –
ステップ2が重要でした。ありがとう! –