2

私は simpleXML を使用して xml ファイルを解析しており、foreach ループを使用して要素を反復処理し、Yii モデルを使用して mysql データベースに保存したいと考えています。

それぞれ 3 つの属性を持つ 1083 のエントリを含むサンプル xml ファイルがあります。Windows で PHP バージョン 5.3.1 を使用すると、データベース テーブルに 1083 ではなく 1208 のエントリが作成されます。コードで問題を見つけようとしましたが、何時間ものテストの後、Windows で PHP バージョン 5.4.7 に切り替えることにしました。このバージョンでは、正しい 1083 エントリが作成されます。しかし、問題が正確に何であるかを知りたいのです。なぜなら、解決策を見つける必要があるからです。なぜなら、Linux サーバー上の私の生産環境では、間違った数のエントリも作成する PHP バージョン 5.4.15-1 を持っているからです。

これは xml の例です。

<listentries>
  <listentry>
    <name>downs</name>
    <value>-1.5</value>
    <type>STATIC</type>
  </listentry>
  <listentry>
    <name>upcoming</name>
    <value>1.0</value>
    <type>STATIC</type>
  </listentry>
  ...
</listentries>

したがって、私の問題は、 foreach ループが頻繁に繰り返されることです。

$list = simplexml_load_file($filename);
foreach($list->listentries->listentry as $entry){
     $model = new Entry;
     $model->name = $entry->name;
     $model->value = $entry->value;
     $model->type = $entry->type;
     $model->save();
}

リスト要素の数をエコーすると、1083 になります。繰り返しをカウントするためにカウンターを使用すると、1208 になります。非常に奇妙なことが起こっています。データベースに挿入された 1208 のエントリは、次のようになります。各エントリは少なくとも 1 回挿入されますが、一部は 2 回挿入されます。

不正行為が正確にどこから来ているのか、誰かが考えを持っていますか?

xml ファイルに含まれるエントリが 970 未満の場合、正しい回数の反復が行われることがわかりました。

1083 エントリを含む xml をインポートした後の構成と挿入されたエントリの数:

  • Windows、PHP 5.3.1、libxml 2.7.6: 1208 エントリ
  • Windows、PHP 5.4.7、libxml 2.7.8: 1083 エントリ
  • Linux、PHP 5.4.15-1、libxml 2.7.6: 1208 エントリ

libxml を更新すると役立つようです!?

4

0 に答える 0