• 締切済み

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

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

  • PHP
  • 回答数2
  • ありがとう数2

みんなの回答

  • 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

  • EUCからUTF8にファイルとファイル名を変換

    Windows上でファイルとファイル名をEUCからUTF8に変換したいのですが、良い方法はありますか? ファイルは大量にあります(3000ファイルくらい)

  • fopen で半角カナファイル名

    XP apache2.0系 で起動しているサイトのファイルを fopen で開こうと思っています。 タイトルでも触れていますが、ファイル名が半角カナファイル名なんです。 ブラウザで直にパスを打つとダウンロードのやつが開くのでパスは大丈夫だと思います。 fopen で開こうとすると failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found  が出ます。 ファイル名が半角英数字であればfopenは問題ないです。 半角カナ部分の取り扱いだとは思うんですけど (1)PHP側で変換すればうまくいく? (2)apacheの設定変更でうまくいく? どっちなんでしょう?それとも他の手段を用いるべきなんでしょうか? ちなみに そのファイルが配置してあるディレクトリ一覧をブラウザで表示すると 半角カナファイルは文字化けして表示されています。 なので、私は(2)かなと思っているんですけど。

    • ベストアンサー
    • PHP
  • レンタルサーバでディレクトリ・ファイル名をUTF-8に

    私の使用しているレンタルサーバでは、ディレクトリ・ファイル名を [半角英数字]・[_(アンダーバー)]・[-(ハイフン)]・[.(ピリオド)] と制限されています。 ディレクトリ・ファイル名にUTF-8(%)を用いたいのですが、それが可能なレンタルサーバをご存知でしょうか? また、これはapacheの設定なのでしょうか?レンタルサーバを変更する以外に何か方法は無いのでしょうか? よろしくお願いいたします。

  • UTF-8→JISへ変換

    http://www.php-labo.net/ で配布のフリーPHPを使わせてもらっていますが、文字コードがUTF-8形式であり、当方Windows環境やホームページビルダーで編集する際に対応していません。(UTF対応エディタ対応はしたくないです)そのため、すべてのダウンロードしたファイルをUTF-8からJISに変換するには、TaraPadか何かで単純に文字コードJISにコピペで保存すれば、良いのでしょうか?最終的にはFTPで転送するのでEUC対応になると思いますが教えて下さい。

    • 締切済み
    • PHP
  • fopen()関数

    こんにちは。 PHPで、fopen()関数を使用し、別ファイルにでーたを保存しているのですが、 fopen ("ファイル名", "a"); とやると、ファイルに追記されますよね。 この追記を、ファイルの一番最初に行いたいのです。 一番最初に書き込みをできるということで、 fopen ("ファイル名", "r+"); なども試してみたのですが、 その追記された文字数だけ最初側の文字が消えてしまい、追記は無理でした。 rewind()関数も使用したのですが、ダメでした。 何方か、ファイルの最初に、既に書き込まれている文字を消さずに追記する方法をご教授くだされば幸いです。

    • ベストアンサー
    • PHP
  • 日本語ファイル名の文字化けについて

    debian 3.1でsambaサーバを運用して複数のwindowsでファイル共有をしています。 何の不自由もなく使用していましたが、debianのコンソール上で共有ディレクトリを見ると 日本語のファイル名が「??-{?.txt」などと表示されるのが気になり、 convmvというツールでファイル名の文字コード変換を行いました。(euc-jpとsjisをutf8へ) ところが変換がうまくいかなかったらしく、コンソール上でもWindows上でも ファイル名が文字化けしてしまいました。 上記のツールで戻すことができなかったためコンソール上でリネームしようとしたのですが、 ファイル名に「-」や「(」が含まれているため失敗してしまいます。 変換に失敗したファイル名を元に戻す方法があればご教授ください。 よろしくお願い致します。

  • fopenが動作しない

    PHPで、別のファイルで取得したファイル名をもとに fopenを使ってファイルを開こうとしているのですが、 どうしてもうまくいきません。 具体的な症状は以下のとおりです。 a.phpの中で、 … $file[2] = "hoge02.xml"; … のように、配列にファイル名を代入します。 これを b.php で require_once('a.php'); とした後 print_r($file); とすると Array([0] => … [2] => "hoge02.xml" [3]…) のように表示されるところまでは確認できました。 しかし、 $file0 = $file[2]; $fp = fopen("$file0", 'r'); とすると Warning: fopen( "hoge02.xml" ) [function.fopen]: failed to open stream: Invalid argument in [b.php の絶対アドレス] とエラーが出てしまい、実行することが出来ません。 そこで、 //$file0 = $file[2]; $file0 = "hoge02.xml"; $fp = fopen("$file0",'r'); とすると実行することが出来ました。 作成しているシステム上、fopenの1つ目の引数には変数または配列を使いたいのですが、 エラーが発生してどうしてもうまくいきません。 自分なりにも似たようなエラーがないか調べたのですが、 それらしいものを見つけることが出来ず、お手上げ状態です。 どなたか解決策をご存じないでしょうか。 ご教授の程、よろしくお願い致します。

    • 締切済み
    • PHP
  • fopenでファイルを読み込み、その取り込んだファイルを置換や修正したい。

    こんばんわ。 AというファイルにBというファイルを読みこもうと思うのですがうまくいきません。 ■a.php <?php // ファイルを読み込み専用でオープンする $fp = fopen('b.php', 'r'); // 終端に達するまでループ while (!feof($fp)) { // ファイルから一行読み込む $line = fgets($fp); // 読み込んだ行を出力する print $line; // <br>の出力 print "<br>"; } // ファイルをクローズする fclose($fp); ?> ■b.php <div class="title">コンテンツ</div> <?php $amin = 1; //最小値 $amax = 4; //最大値 $randevent = rand($amin,$amax); //値を表示 if ( $randevent == 1) echo "たちつてと"; // else if ( $randevent == 2) echo "さしすせそ"; // else if ( $randevent == 3) echo "かきくけこ"; // else if ( $randevent == 4) echo "あいうえお"; ?> と、二つのファイルはこのような内容です。 もちろんincludeやリクワイヤーで取り込めばすむのでしょうが、fopenで取り込んで表示させたいのです。 このままの文章だとPHPの構文ごとHPに表記されてしまいます。 Printにしているからでしょうか? fopenでPHPの機能ごと取り込むには方法はありませんでしょうか? includeだと取り込んだ際にPHP構文の置換や修正がきかなくて困るんです。 fopenで取り込むとPHP構文を「あいうえお」の部分を「なにぬねの」にstr_replaceで置換できると思ったのです。 a.phpの中にfopenを使いb.phpの中のPHP構文を機能させる方法はありませんか?

    • ベストアンサー
    • PHP
  • html + php 文字化けの問題【utf-8】

    文字化けが直りません。どうしたらいいでしょうか? phpとmysqlをつかってデータベース表示させるページなのですが、データベースの文字コードがutf-8なのでphpファイルの文字コードをeucからutf-8に変更しました。そうするとデータベースは正常に表示されるのですが、htmlの部分は全て「?」になってしまいます。 文字コードの変換はEmEditorで変更し、変化が見られなかったので、変換用のフリーソフトを使ってみましたが、やっぱり文字化けの状態です。どなたかご教授ください。お願いします。

    • 締切済み
    • PHP
  • FFFTPでの、ファイル名の日本語化について

    (1)PHPで、fopen($filename, 'c+')などして、自動的に、口コミ投稿ファイルなどの ファイルを作成する際に、投稿者名の漢字をそのままファイル名などにすると、 必ず文字化けしてしまいます。どうすれば、FFFTP内部で日本語のファイル名に できるでしょうか。 (2)MySQLクライアントを使って、レンタルサーバー上のデータベースを扱う際に、 INSERTしたデータが、文字化けして困っています。レンタルサーバー会社に聞くと、 サーバー側の文字セットに合わせておけばいいということでしたが、サーバー側で、 utf8-general-ci を使っているらしく、クライアント側でも、照合順序をutf8-general-ciに しまして、 mysql_set_charset("utf-8"); $sql = "SET NAMES utf-8"; mysql_query($sql); と書いたあとで、INSERT文を使っても、phpMyAdmin上で文字化けしております。 PHPスクリプト内に、あと何を書けば、文字化けしないで済むのでしょうか。 (ちなみに/* 内部文字エンコーディングをUTF-8に設定 */ mb_internal_encoding("UTF-8"); という文章も必要でしょうか。) どうかよろしくお願いします。