アプリ版:「スタンプのみでお礼する」機能のリリースについて

ひらがな、カタカナは読み込めるのですが、漢字で下記のエラーが出ます。
mb_convert_encodingでいろいろ変換してみましたがダメです。
教えてください!

Fatal error: Uncaught exception 'Exception' with message 'Could not open 予?xls for reading! File does not exist, or it is not readable.' in C:\xampp\htdocs\Partner_Management\PHPExcel\Shared\OLERead.php:76 Stack trace: #0 C:\xampp\htdocs\Partner_Management\PHPExcel\Reader\Excel5.php(928): PHPExcel_Shared_OLERead->read('??????xls') #1 C:\xampp\htdocs\Partner_Management\PHPExcel\Reader\Excel5.php(498): PHPExcel_Reader_Excel5->_loadOLE('??????xls') #2 C:\xampp\htdocs\Partner_Management\EstimateCost.php(54): PHPExcel_Reader_Excel5->load('??????xls') #3 {main} thrown in C:\xampp\htdocs\Partner_Management\PHPExcel\Shared\OLERead.php on line 76

ファイル名:予定.xls

OS:WindowsXP
Excel:Excel5
XAMPP:1.7.3

[php.ini]
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = SJIS
mbstring.encoding_translation = Off
mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII
mbstring.substitute_character = none;
mbstring.script_encoding= Shift_JIS

[phpファイルの文字コード]
UTF-8

A 回答 (3件)

mbstring.language = Japanese


mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = SJIS
mbstring.encoding_translation = Off
mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII
mbstring.substitute_character = none;
mbstring.script_encoding= Shift_JIS

すみません、これらをよくみると、
mbstring.http_output = SJIS
ってなっているということは、画面が遷移して、ページがレンダリングされるたびに、
すべての出力がSJISになります。
にもかかわらず、
mbstring.http_input = pass
となっているので、POSTされて受け取った値はすべてSJISで渡されてきてしまうと思います。

これは、両方共「pass」にしたほうが良いです。
また、mbstring.script_encodingにかんしても、ドキュメントがなかったりして何をやっているかよくわからないので
出来ればコメントアウトしてしまうのが無難かなと。
※私の場合は、mbstring関連の項目はすべてデフォルトのままです(つまり全部コメントアウト)。
基本的に自分の書いているスクリプトで各エンコーディングを行ったほうが、別の環境で実行した場合でも問題が起こりづらい。



それらを設定した上、一度XAMPPを再起動させてみて、現象が発生するか確認されたほうが良いと思います。

HTMLがSJISで記述されているなら、echoする出力全てに、mb_convert_encodingしないといけないですが。

まぁ、逆に言えば今の設定のままでも、読み込むファイル名がPOSTされた値なのであれば、mb_convert_encodingをしなければ読めそうな気がします。
    • good
    • 0
この回答へのお礼

php.iniのmbstring関連の項目をすべてコメントアウトしました。
これでもダメだったのですが、OLERead.phpのread()メソッドのis_readableをコメントアウトすると、読み込めるようになりました。

is_readableのコメントアウトだけでは読み込めなかったのでとりあえず解決はしました。
ありがとうございました。

お礼日時:2010/12/14 10:22

mb_convert_encoding($filename, 'SJIS','CP932');


ここの記述ですが、「CP932」って、SJISのことですよ。

phpファイルをUTF-8で記述しているなら、

mb_convert_encoding($filename, 'SJIS-win', 'UTF-8');

ではないですか。

この回答への補足

mb_convert_encoding($filename, 'SJIS-win', 'UTF-8');
は試してみました。
が、これだと平仮名、カナカナのファイルすら読み込めなくなってしまいます。

mb_convert_encoding($filename, 'SJIS','CP932');
ですと、平仮名、カタカナを読み込めるようになります。

一体何なのでしょうか。。

もしかしてWindowsXP(Excel97-2003)だと読み込めないのでは?
という気がしているのですが。
家のWindows7(Excel2007のExcel97-2003)では漢字ファイルを読み込めます。

補足日時:2010/12/10 01:13
    • good
    • 0

これの場合「予定」以外のファイルはどうでしょうか?



有名な話shiftjisの「予」は975Cのため5C問題にひっかかります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
5C問題は知りませんでした。

ただ、「予」を避けても変わりませんでした。

ソースコードはこちらです。

--------------------------------------------
set_include_path(get_include_path() . PATH_SEPARATOR . './PHPExcel/Classes/');
require_once 'PHPExcel.php';
require_once 'PHPExcel/IOFactory.php';
require_once 'MySQL.php';

$objReader = PHPExcel_IOFactory::createReader('Excel5');

$filename = "進行.xls";
$filename = mb_convert_encoding($filename, 'SJIS','CP932');

$objPHPExcel = $objReader->load($filename);
-------------------------------------------------

お礼日時:2010/12/09 17:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!