RedHatLinux4 update6 + Apache2.2.8 + php5.2.5でプログラムを作成しております。
//server/share/hogehoge を /opt/lampp/htdocs/share にcifsマウントして、サーバの"hogehoge"ディレクトリにある"補毛補毛"というディレクトリにアクセスできるようphpに記述したいのですが、うまくいかずに困っています。
/opt/htdocs/test.php
-------------------------------------------------------------------
$glob="./hogehoge/補毛補毛";
chdir($glob); //カレントディレクトリ移動
foreach (glob("*.xls") as $filepath) {
echo "$filepath size " . filesize($filepath) . "\n";
}
-------------------------------------------------------------------
具体的には上記のようなソースを書いたのですがうまく動きませんでした。./hogehoge/までなら動くのですが、そこに2バイト文字を含めるとうまく動きません。
どうにかしてうまく動かす方法はありませんでしょうか。サーバ側のディレクトリ名を変更することはできません。
ご回答、宜しくお願いいたします。
No.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 やローカル端末で化けないのであれば変更する必要は
ありません。 変更しないほうが無難かと思われます。
ご回答有り難う御座います。
早速、試してみましたところ解決いたしました。
低レベルな質問をして申し訳御座いません。
また、質問する機会がございましたら宜しくお願いいたします。
失礼いたします。
No.1
- 回答日時:
端末のシェル(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がエラーを吐いているようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPプログラムの間違い 1 2022/10/06 14:33
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- UNIX・Linux ubuntuのサーバー(virtual box)が、再起動するとデータが消えてしまいます。 4 2022/04/27 21:29
- UNIX・Linux JSLinuxについて。 Linuxのこの手順のプログラミングは合っているでしょうか。 ①ホームディ 2 2022/06/20 15:33
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- その他(開発・運用・管理) フォルダの中にファルダを作成してファイルを格納するバッチコマンド 1 2022/06/30 11:39
- Windows 10 指定したファイルを任意の範囲のディレクトリ内に上書き保存したい 1 2022/11/24 10:42
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/20 14:46
- その他(プログラミング・Web制作) 図に示す階層構造で,現在のディレクトリ(カレントディレクトリという)が*印のディレクトリであるとき, 2 2022/11/16 10:55
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
$_GETで2バイト文字列を取得す...
-
SJISのダメ字について
-
CSVファイルの読み込みで日本語...
-
ハシゴの「高」が「?」に置き...
-
【BAT(バッチ)ファイル】Web...
-
フォントの色を変えるには?
-
AccessのDoCmd.SendObjectについて
-
.phpと.incファイルの違いはな...
-
FTPコマンドでディレクトリごと...
-
リンク先を隠す方法はないでし...
-
【file_exists】ファイルが存在...
-
セッションのクッキー有効期間...
-
配列とオブジェクトの違い
-
VBAでJPGサイズ変更
-
複数のファイルで同じ定数を定...
-
SHGetSpecialFolderLocation
-
Subversionのリポジトリの削除
-
別ファイルの変数を呼び出した...
-
透過PNGが透過されない!!
-
相対パスの挙動を理解できない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
i18n_convert と mb_convert_e...
-
Content-Typeが機能していない?
-
mb_convert_encoding で?になる。
-
エンコーディングについて
-
scandir関数取得結果の文字化け
-
ハシゴの「高」が「?」に置き...
-
$str=preg_replace('/\\u3000/'...
-
データベースから取り出した日...
-
XML出力時の日本語一部文字化け
-
mysql utf8、php・euc-jp で出...
-
phpのhex2binについてphpで、ut...
-
POST文字列が化ける(外字)
-
PHPの文字化けした文字だけ削除...
-
csvからデータベースへ取り込み...
-
PHPExcelで日本語(漢字)ファ...
-
euc-jpからutf-8の文字コード変...
-
年と曜が文字化け・・・対応策...
-
htaccessでの文字コード設定に...
-
php5,MySQL5で文字化けが起こる
-
windowsXP、XAMPPでメーラーMer...
おすすめ情報