お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2008-02-04 08:31:31

ryos
メンバ
登録日: 2007-09-17

PHPで作成した漢字のフォルダ名

Ubuntu上でPHPで作られたスクリプトを利用して、サーバーを構築しており、質問があります。よろしくお願いします。
これまで、RedHat系の環境で利用していたPHPスクリプトを利用して、ファイルを受け取る(アップロード)仕組みを作っています。そこでは漢字のフォルダ名を持つフォルダを作りここにたくさんのファイルを保存して、これをSambaで公開して、まとめて受け取る仕組みです。
現在のSambaの設定は、Windowsから日本語のファイル名を受取表示できる状態になっています。しかし、このPHPのスクリプトから作成したフォルダ名が文字が化けして読めないのです。漢字コードが合わないと思い、漢字コードの設定などを行ったのですが、うまくできません。
確認すべき点などありましたら、ご助言をお願いします。

オフライン

 

#2 2008-02-04 11:06:25

mizuno
管理者
From: Kyoto
登録日: 2007-02-28

Re: PHPで作成した漢字のフォルダ名

こんなフォームから送ったファイルを

コード:

<form method="post" action="index.php" enctype="multipart/form-data" name="myform">
FILE <input type="file" name="attach"><input type="submit" name="OK" value="OK"></form>

こんな感じで受けてみました。

コード:

<?php
$dirname = "ほげ";
if (is_uploaded_file($_FILES['attach']['tmp_name'])){
  mkdir($dirname);
  move_uploaded_file($_FILES['attach']['tmp_name'], $dirname . "/" . $_FILES['attach']['name']);
}
?>

問題なく日本語のファイルを送信できます。ディレクトリも作成できます。
ひょっとして PHP スクリプト内に日本語でディレクトリ名が書き込まれていて、かつそれが EUC で出力されていたりしないでしょうか?
RedHat から持ってきたスクリプトということで、そこが気になります。文字化けしているディレクトリは、Ubuntu のファイルブラウザではどのように表示されますか?

オフライン

 

#3 2008-02-04 11:19:42

ryos
メンバ
登録日: 2007-09-17

Re: PHPで作成した漢字のフォルダ名

ご丁寧なご回答、ありがとうございます。ご指摘のように、以前はRedHat系(WhiteBoxLinux?)で動作しており、EUCの状態で動作していていたものと思われます。スクリプトの中身はこれから確認しようと思いますが、現状の表示は、次のようになっています。[1]“®ìŠm”F‚̃tƒHƒ‹ƒ_ì¬ (Windowsのフォルダ名をコピーしたものです)
本来は、[1]動作確認のフォルダ作成、となって欲しいものです。
なお、漢字コードの設定などしない状態で、Windowsからのファイル名は、正しく表示されています。

オフライン

 

#4 2008-02-04 11:21:39

ryos
メンバ
登録日: 2007-09-17

Re: PHPで作成した漢字のフォルダ名

mizuno による投稿:

ひょっとして PHP スクリプト内に日本語でディレクトリ名が書き込まれていて、かつそれが EUC で出力されていたりしないでしょうか?

ディレクトリ名は、ユーザーから入力されるもので、ウエブ上では、正しく表示されています。なお、この名称は、MySQLに格納して、それを引き出して利用しているものと思います。

オフライン

 

#5 2008-02-04 11:50:21

ryos
メンバ
登録日: 2007-09-17

Re: PHPで作成した漢字のフォルダ名

mizuno による投稿:

ひょっとして PHP スクリプト内に日本語でディレクトリ名が書き込まれていて、かつそれが EUC で出力されていたりしないでしょうか?

スクリプトを確認したところ、関係すると思われるがわかりました。
//エンコード
$dir_pass = mb_convert_encoding($dir_pass,'UTF-8');

if (mkdir ($dir_pass , 0700)){
    if (copy($textfile, $dir_pass . "/" . $filename)) {
        echo "ファイルをアップロードしました。";
これを見る限りでは、UTF-8にして、ディレクトリを作成しているように思われます。

オフライン

 

#6 2008-02-04 23:18:48

tani
メンバ
登録日: 2006-10-20

Re: PHPで作成した漢字のフォルダ名

PHPでわざわざUTF-8に変換してるってことはMySQL内では多分違うエンコードになってるんですよね。
そのあたりを確認してみてはどうでしょうか。
あとはSambaの設定あたりでしょうか。

オフライン

 

#7 2008-02-05 09:00:27

ryos
メンバ
登録日: 2007-09-17

Re: PHPで作成した漢字のフォルダ名

皆さんのご助言をいただき、作業を整理して試したところ、表示ができました。
まず、phpのスクリプトでは、以下のようにEUC-JPにしておき、
        $dir_pass = mb_convert_encoding($dir_pass,'EUC-JP','auto');
smb.confの漢字コード設定は、以下のようにしています。
[global]
        unix charset = CP932
        dos charset = EUCJP-MS
        display charset = CP932
これが正解なのかわかりませんが、Samba経由でWindowsで表示できます。
皆さんのご助言のおかげです。本当に、ありがとうございます。

オフライン

 

Board footer

Powered by FluxBB