🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

1回答

567閲覧

laravelのCSVアップロード機能

yoheiiii

総合スコア91

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2021/03/04 02:48

編集2021/03/04 08:58

環境:Windows10
XAMPP v3.2.4
HeidiSQL 11.0.0.5919

laravelでCSVをアップロードできるシステムがあります。
本番環境ではアップロードできるのですが、ローカル環境では
アップロードできません。
ローカル環境の問題だと思うのですが、どうすればいいかわかりません。
何かお分かりであればご教授頂けないでしょうか?

$fileName = $request->file('upload_file')->store(''); $sjis = file_get_contents(storage_path('app/') . $fileName); $utf8 = mb_convert_encoding($sjis, 'UTF-8', 'SJIS-win'); file_put_contents(storage_path('app/') . $fileName.'.utf8', $utf8); $fp = fopen(storage_path('app/') . $fileName.'.utf8', 'r'); $headers = fgetcsv($fp); if (42 != count($headers)) { fclose($fp); Storage::delete($fileName); $form = new Form(); $form->setMessage('danger', '登録に失敗しました。CSVファイルのフォーマットが正しいことを確認してださい。'); return view('forms.upload', ['form' => $form]); }

ローカル環境で、本番環境でアップロードできたCSVをアップロードすると
'登録に失敗しました。CSVファイルのフォーマットが正しいことを確認してださい。'とエラーメッセージが
出てきます。もちろんDBにも反映されておりません。ログはないように思います。

エラーはCSVの列が42行ないとエラーになるようになっています。
CSVをddで調べたところ37行でした。
0 => "A"
1 => "B"
2 => "C"
3 => "D"
4 => "E"
5 => "F",G""



上記のようにところどころ【5 => "F",G""】のような形になり
その分列が少なくなってしまっています。
本番環境で同じCSVをやると正常に動きます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/03/04 02:50

この内容だけでわかる人はいません。 「できない」はあなたの想定から外れたというだけで、「何が起きているか」という事象説明にはなっていません。コードも必要です。 本番とローカルの環境を正確に提示してください。
yoheiiii

2021/03/04 02:57

情報少なく申し訳ございません。 コードはのせられません。 もう少し調べてみます。
Lulucom

2021/03/04 03:39

確かに手がかりが無く推測も難しい状態ですので、せめてエラーメッセージなどを掲載されてはいかがでしょうか。アップロードしたときに何かエラーなどは出ないでしょうか?画面に表示されなくてもLaravelのログファイルに出ていたりしないでしょうか。
yoheiiii

2021/03/04 04:42

引っかかっているコードのみ追加させて頂きました。 もし何かお分かりであればご教授頂ければと思います。
m.ts10806

2021/03/04 04:46

コード同じという前提ならコードだけ提示されても言えることはないです。 事象説明をしてください。エラー確認、ログ確認 「引っかかる」というのもどこにどう引っかかっているのかわかりません。 起きている現象を要約せずそのまま伝えてください。
yoheiiii

2021/03/04 05:14

ローカル環境で、本番環境でアップロードできたCSVをアップロードすると '登録に失敗しました。CSVファイルのフォーマットが正しいことを確認してださい。'とエラーメッセージが 出てきます。もちろんDBにも反映されておりません。ログはないように思います。
yoheiiii

2021/03/04 05:45

エラーはCSVの列が42行ないとエラーになるようになっています。 CSVをddで調べたところ37行でした。 0 => "A" 1 => "B" 2 => "C" 3 => "D" 4 => "E" 5 => "F",G"" ・ ・ ・ 上記のようにところどころ【5 => "F",G""】のような形になり その分列が少なくなってしまっています。
m.ts10806

2021/03/04 06:27

質問本文に追記を。
yoheiiii

2021/03/04 06:41

失礼致しました。 追記致しました。
guest

回答1

0

ベストアンサー

$fp = fopen(storage_path('app/') . $fileName.'.utf8', 'r');

utf8へ変換してそうですね?
この辺の処理はどう書いてますか?
経験則ですが
もし、行毎にmb_convert_encodingをしているならバグる原因になるので
ファイル全体をmb_convert_encodingしてくださいい。

投稿2021/03/04 08:34

mikkame

総合スコア5036

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoheiiii

2021/03/04 08:59

utf8へ変換しております。追記しました。 全体で出来ていると思いますが、いかがでしょうか?
mikkame

2021/03/04 11:57

全体でできてそうですね。 あとは$sjis/$utf8wをそれぞれddしてどこかで変わってないか確認するとかでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問