PHPExcel-1.8を使用してエクセルファイル取込の処理をします。
php
1$fileName = $_FILES['file']['name']; 2$convfilename = mb_convert_encoding($fileName, 'SJIS-win', 'UTF-8'); 3$readFile = "./" . $convfilename; 4$objPExcel = PHPExcel_IOFactory::createReader('Excel2007')->load($readFile);
日本語ファイル名のファイルを読み込めませんでした。
以下のエラーメッセージが表示されます。
「PHPExcel\Reader\Excel2007.php on line 338」
php
1Excel2007.php 2 if (!file_exists($pFilename)) { 3//338行目 throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist."); 4 }
解決できなかったら、注意事項として「全角文字をファイル名に入れない」としなければなりません。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
んー。
- 日本語名ファイルのファイル名を変数に保持
- ファイル名をASCII文字のみに変更
- PHPExcelで読み込み
- 処理
- 保存
- 最初に退避させた元の日本語ファイル名にリネーム
で、行けるんだと思うんですけど、
単純にファイル名に使ってはいけない文字が含まれていて、サーバーがWindowsですみたいな問題なだけかもしれないですね。
PHPExcel使ったの遥か昔なんでよく覚えてませんけど。
投稿2018/04/06 03:12
編集2018/04/06 03:13退会済みユーザー
総合スコア0
0
なんだかなあ…。
質問のタイトルのせいもあって、問題点が誤誘導されてる気がする。
php
1$fileName = $_FILES['file']['name']; 2$convfilename = mb_convert_encoding($fileName, 'SJIS-win', 'UTF-8'); 3$readFile = "./" . $convfilename; 4$objPExcel = PHPExcel_IOFactory::createReader('Excel2007')->load($readFile);
このコード、そもそもなんだが、$_FILES['file']['name']
にファイルの実体があると思い込んでいることが、そもそもの問題じゃないですか?
$_FILES['file']['name']
はファイルの実体はありません。
アップロードしたファイルの実体は、$_FILES['file']['tmp_name']
ですよ。
投稿2018/04/06 15:39
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
既に出ていますがmove_uploaded_file()で自分で任意の半角英数でファイル名をつけて、そのファイルを読み込んだらどうでしょう。
元のファイル名を保持しておけば何かしら処理した後に戻すこともできるわけですし。
ただ、現在はPHPExcelが非推奨になっているので、後継であるPhpSpreadsheetを使われた方が後々トラブルが少なくて済むかもしれません。
投稿2018/04/06 03:41
総合スコア80850
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/06 04:05
2018/04/06 04:09 編集
2018/04/06 04:10
2018/04/06 04:10
2018/04/06 04:11 編集
2018/04/06 04:19
2018/04/06 04:24
2018/04/06 04:28
2018/04/06 04:30
退会済みユーザー
2018/04/06 04:31
2018/04/06 04:34
2018/04/06 04:35
退会済みユーザー
2018/04/06 05:41
2018/04/09 08:11
2018/04/09 08:14
2018/04/09 08:37
2018/04/09 09:01
2018/04/09 09:15
2018/04/09 21:42
0
前提として半角英数のファイル名は同じルーチンで問題ないということでしょうか?
また$readFileのキャラクターコードを変更しているように見えますが、
file_existsでファイルの存在は確認できますか?
(勝手にコンバートしたからファイルがないと判断されているのかも)
httpベースで他バイトのファイル名で運用するのは普通はやりませんので
アップされたファイル名とは別のファイル名でアップロードして
呼び出しの際に元のファイル名であるかのような置き換えをすればよいと思います
投稿2018/04/06 03:12
総合スコア114829
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/06 04:08