リモート CSV ファイルを読み取り、CSV ファイルの内容に基づいて製品をデータベースに追加する php スクリプトがあります。現在、約 2800 行 (製品) がありますが、スクリプトは 1388 行で停止し続けています。
私が使用したコードは次のとおりです。
while(($data = fgetcsv($fopen, 0, ",")) !== false):
//stuff is done here...
endwhile;
PHP のメモリ制限を 64M に設定し、128M も試しました。また、max_execution_time を 60 分に設定しました。また、次のようにコードを変更しようとしました。
while(($data = fgetcsv($fopen, 1000, ",", '\r')) !== false):
//stuff is done here...
endwhile;
その DID により、より多くの行が解析されますが、データが正しくありませんでした。つまり、画像の列が説明の列などになっていました。これは、行末として \r を追加することに関係していると思います。\n試してみましたが、うまくいきませんでした。最後に、ini で auto_detect_line_endings を true として追加しました。
私のデータが短縮されている理由を誰か提案できますか?
よろしく、サイモン
編集
興味深いことに気がつきました。上記のコードでループされている各行に MySQL 挿入があります。現在、私のデータベースの最後のレコードは CSV ファイルの最初の行です。これは、ファイルが最後の行から解析されているということですか??
これらは、ブレークまたはその近くの行のようです。
W-3066, I Love Love Cheap And Chic, Moschino, 3.4 oz,EDT Spray,Women,,"Introduced by the design house of Moschino, I love love has a blend of grapefruit, orange, lemon, red currant, tea rose, cinnamon leaves, musk, cedar and tonka wood. It is recommended for daytime wear.",http://www.perfume-worldwide.com/products/Women/Final/W-3066large.jpg,0,0,0,8011003991457
W-3070, Adidas Floral Dream, Adidas, 1.7 oz,EDT Spray,Women,,"Introduced in 2008, the notes are bergamot, lily, rose, tonka bean and vanilla.",http://www.perfume-worldwide.com/products/Women/Final/W-3070large.jpg,0,0,0,3412244310024
W-3071, Adidas Fruity Rhythm, Adidas, 1.7 oz,EDT Spray,Women,,"Introduced in 2008, the notes are black currant, raspberry, cyclamen, freesia and musk.",http://www.perfume-worldwide.com/products/Women/Final/W-3071large.jpg,0,0,0,3412244510004
解決
結局のところ、ファイルをサーバーにコピーし、そのコピーから作業する方がずっとうまくいきました。私が従った手順は次のとおりです。
- を使用してリモートファイルの内容を読み取ります
file_get_contents()
- 次に、
iconv(
)関数を使用して、データをUTF-8に再エンコードしました fopen()
、fwrite()
および関数を使用して一時ファイルを作成しましたfclose()
。ファイルの内容は上記のエンコードされたデータでしたchmod()
関数を使用してファイルのパーミッションを 0750 に設定しました- 次に、
fgetcsv()
関数を一時ファイルに適用しました - 必要な作業はすべて完了しましたか
unlink()
関数を使用して、完了したら一時ファイルを削除しました
それはトリックをしました。したがって、問題の半分は実際にはリモート サーバーのタイムアウトであり、残りの半分はエンコードの問題であると思われます。
正しい方向へのすべての微調整をしてくれたみんなに感謝します