• 締切済み

ファイル名がUTF-8のファイルをfopenしたい

サーバ上にファイル名がUTF-8の漢字コードで作られたファイルがあります。 これをEUCベースのphpからfopenできずに困ってます。 何かうまい方法はないものでしょうか? phpから英数字だけのファイル名にリネームする方法でも構いません。 ご存知の方、ご教示よろしくお願いします。 暫定的にcronでリネームするだけのshellを走らせてますが、スマートじゃなくて‥‥。

みんなの回答

  • 1minn
  • ベストアンサー率57% (52/90)
回答No.2

$baseEnc = mb_internal_encoding(); mb_internal_encoding('UTF-8'); // 実処理 fopen mb_internal_encoding($baseEnc); こんな感じでいけませんか?

OKWaaave
質問者

お礼

回答ありがとうございました。 結局、EUCで処理をするのが前提な部分と、UTF-8のファイル名をfopenするのを1本のphpで実行するのは無理と判断しました。 断念して、ファイル名をUTF-8からasciiにリネームするだけの処理と、EUCで実際の処理をするのを分けることにしました

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

mb_convert_encoding()しても無理でしょうか? >暫定的にcronでリネームするだけのshellを走らせてます りネームができるのであればそのロジックをそのまま援用すれば 開けるような気がしますが・・・

OKWaaave
質問者

お礼

回答ありがとうございました。 今回は断念して、ファイル名をUTF-8からasciiにリネームするだけの処理と、EUCで実際の処理をするのを分けることにしました。

OKWaaave
質問者

補足

$file = "ファイル名.txt"; $txt = fopen (mb_convert_encoding ($file, "UTF-8", "EUC-JP") , "rb"); とかでしょうか? これだと failed to open stream: No such file or directory が返ってきます。 urlencode()で指定できないか試してみましたが、こっちもダメでした。 リネームはexec()やsystem()つかってみましたが、PHP内部コードがEUCなのでコマンドライン上でUTF-8のファイル名を指定できなくて‥‥。 サーバとphpの内部コードが違うと苦労します。 以前は両方ともEUCだったので苦労しなかったのですがー。

関連するQ&A