こんにちわ。
PHPの開発で画面よりCSVファイルを読込み一行づつDBへ登録という処理を行っているのですが、容量の大きなファイルになるとfopenがうまくいかずfalseになってしまいます。
皆様はこういったCSV読込みなどはどのようにされているのでしょうか?
また、参考サイトなどございましたらご教授いただけないでしょうか?
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
fopen
関数はファイルポインタを取得するだけなので、ファイルの容量によって失敗することがあるとは、考えにくいです。
まずはerror_get_last
関数を使って、ファイルオープンに失敗した理由を確認されることをお勧めします。
http://php.net/manual/ja/function.error-get-last.php
php
1$fp = fopen('hogehoge.txt', 'r'); 2 3var_dump(error_get_last()); 4 5if (is_resource($fp)) { 6 fclose($fp); 7}
実行結果
PHP Warning: fopen(hogehoge.txt): failed to open stream: No such file or directory in /tmp/test.php on line 2 Warning: fopen(hogehoge.txt): failed to open stream: No such file or directory in /tmp/test.php on line 2 array(4) { ["type"]=> int(2) ["message"]=> string(69) "fopen(hogehoge.txt): failed to open stream: No such file or directory" ["file"]=> string(13) "/tmp/test.php" ["line"]=> int(2) }
また、CSVファイルがWEBページからアップロードしたものであれば、
upload_max_filesize
などに引っかかっている可能性も考えられます。
以下のリンクなどを確認されてみると、何か分かるかも知れません。
http://php.net/manual/ja/features.file-upload.common-pitfalls.php
以下のリンクも、参考になるかと思います。
http://php.net/manual/ja/features.file-upload.errors.php
投稿2015/10/28 03:28
編集2015/10/28 05:51総合スコア4791
0
SplFileObject を使うのが最もパフォーマンス的に優れています。
投稿2015/10/28 07:03
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/10/28 07:31
2015/10/28 09:58
0
実行可能な時間の制限に引っかかっているのだとすれば、
例えば1000行ずつ処理することにして、
読み込みが終わったら次の開始行(1001行目、2001行目など)を与えて
自己処理を呼び直すようなhtmlとformを伴ったページを出力すればいいと思います。
投稿2015/10/28 03:13
編集2015/10/28 03:15退会済みユーザー
総合スコア0
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/10/28 07:25
2015/10/28 07:40
2015/10/28 09:55