- ベストアンサー
Linux + phpで2バイト文字のパス指定
- RedHatLinux4 update6 + Apache2.2.8 + php5.2.5で2バイト文字を含むパスの指定方法について質問です。
- phpで使用するパスに2バイト文字を含める場合、正しく動作しない問題が発生しています。
- サーバのディレクトリ名を変更することはできず、2バイト文字を含むパスにアクセスする方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
※ 基本的なことを書きますが、気分を害されないようお願いします。 まず日本語を扱うのが前提であれば mbstring は利用可能になっています でしょうか? > ローカルの端末やsshでは参照可能です。 > 2バイト文字などのファイル名も正常に表示されます。 echo $LANG を実行するとどうなっていましたかでしょうか? # Redhat4 のデフォルトは ja_JP.UTF-8 だと思いますが。 > しかし、phpだとうまくいきません。 PHP スクリプトのファイル名の文字のエンコードとシステムの文字エンコードが 合ってないという意味はご理解されていますでしょうか? cat /opt/htdocs/test.php とすると PHP スクリプトの日本語が化けませんか? 仮りに echo $LANG の時の結果が ja_JP.UTF-8 だとして PHP スクリプトファイルの文字エンコードが EUC-JP だとすると システムの文字エンコードと一致しないで見つけられないことになります。 言い替えれば、この場合は PHP スクリプトを UTF-8 でエンコードして あれば表示が可能だと言うことです。 EUC-JP の場合の方法はこんな感じかと思われます。 $glob="./hogehoge/補毛補毛"; mb_language("Japanese"); mb_internal_encoding("EUC-JP"); // PHP スクリプトファイルの文字エンコード $glob=mb_convert_encoding($glob, "UTF-8"); // システムの文字エンコード chdir($glob); //カレントディレクトリ移動 foreach (glob("*.xls") as $filepath) { $disp_filepath=mb_convert_encoding($filepath, "EUC-JP","UTF-8"); // 表示用に変換 echo "$disp_filepath size " . filesize($filepath) . "\n"; } Windows などで PHP スクリプトを編集していた場合は Shift_JIS になっていることが あるので、その場合は Shift_JIS または SJIS を指定します。 $glob="./hogehoge/補毛補毛"; mb_language("Japanese"); mb_internal_encoding("SJIS"); // PHP スクリプトファイルの文字エンコード $glob=mb_convert_encoding($glob, "UTF-8"); // システムの文字エンコード chdir($glob); //カレントディレクトリ移動 foreach (glob("*.xls") as $filepath) { $disp_filepath=mb_convert_encoding($filepath, "SJIS","UTF-8"); // 表示用に変換 echo "$disp_filepath size " . filesize($filepath) . "\n"; } 蛇足ですが cifs や smbfs でマウントした場合 mount に指定する iocharset に よっても変わりますが、ssh やローカル端末で化けないのであれば変更する必要は ありません。 変更しないほうが無難かと思われます。
その他の回答 (1)
- x415f484f
- ベストアンサー率71% (57/80)
端末のシェル(bashなど)上で ls /opt/lampp/htdocs/share を実行した場合に漢字などの ファイル名の表示は正常でしたか? > そこに2バイト文字を含めるとうまく動きません。 ディレクトリ名で指定している文字エンコードとが合致しないだけかと思われますが? またディレクトリ名で扱う文字エンコードをお使いの環境変数 LANG と合わせても駄目なのでしょうか? # 私の環境で試した場合はエンコードが合えば可能でした。
補足
ご回答ありがとうございます。 ローカルの端末やsshでは参照可能です。2バイト文字などのファイル名も正常に表示されます。しかし、phpだとうまくいきません。 下記のようなエラーメッセージが表示されてしまいます。 Warning: chdir() [function.chdir]: No such file or directory (errno 2) in /opt/lampp/htdocs/kanri/test.php on line 13 chdirがエラーを吐いているようです。
お礼
ご回答有り難う御座います。 早速、試してみましたところ解決いたしました。 低レベルな質問をして申し訳御座いません。 また、質問する機会がございましたら宜しくお願いいたします。 失礼いたします。