readdirで文字化け
- Smartyでファイル情報を取得するシステムを作ろうと思っています。
- readdir関数を使用してフォルダやファイルを取得しようとしていますが、日本語のフォルダやファイル名が文字化けしてしまいます。
- 文字コードの設定が必要なのかどうか、設定すべき場所や方法がわかりません。教えていただけると助かります。
- ベストアンサー
readdirで文字化け
Smartyでファイル情報を取得するシステムを作ろうと思ってます。 まずあるフォルダ直下のフォルダ、ファイルを取得しようと思い、 下のようなものを作りました。 $dir = "./"; $data = array(); if(($dh = opendir($dir)) == true){ while(false !== ($file = readdir($dh))){ $data[] = $file; } closedir($dh); } $this->set('data',$data); このような感じで、tplのdataに配列の結果を出力しようと思ってますが、 $dir直下のフォルダまたはファイルが日本語だと文字化けしてしまいます。 どこかで、文字コードの設定が必要なのかな?と思ってますが それをどこですべきなのか?どのようにすべきなのかがわかりません。 わかる方がいらっしゃいましたら、どうぞ教えていただきたいと思います。
- blwapl
- お礼率31% (17/54)
- PHP
- 回答数1
- ありがとう数0
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ファイルの文字コード 出力時の文字コード この辺を判断しておけば、 $data[] = $file; この辺りでmb_convert_encodingをしておくと上手く表示できるんじゃないでしょうか。 #フォルダ・ファイルに日本語を使わないのがベストだと思います。
関連するQ&A
- readdirでのファイル名取得
readdir()にて、textファイルのみ取り出すにはどのようにすれば良いのでしょうか? 現状は、後処理で、/txt|TXT/でマッチさせています。 opendir(DIR,"./DATA/"); @file=readdir(DIR); closedir(DIR); foreach $myfilename(@file){ if($myfilename=~/txt|TXT/){ print "$myfilename\n"; #確認用 } } よろしくお願いいたします。
- ベストアンサー
- Perl
- phpでランダムにページを表示
001.html~999.htmlの内容をランダムにPHPを使用しページを 表示させたいのですが以下のソースでは01.html表示になり 困っています。 <?php $dir_name = "ads"; $ads = array(); $dh = opendir($dir_name); while ($data = readdir($dh)) { if (!is_dir($data)) { array_push($ads, $data); } } closedir($dh); shuffle($ads); include("$dir_name/$ads[0]"); ?> どのようにすれば001になるのでしょうか、 どなたかご教示お願い致しますm(_ _)m
- ベストアンサー
- PHP
- readdir()で得られるファイル・ディレクトリ情報の順番は?
Perlプログラムにて、 opendir(DIR, '.'); @dir_list = readdir(DIR); closedir(DIR); などとすると、そのディレクトリにあるファイルとディレクトリの一覧情報を得ることができますが、この場合、@dir_list にはどのような順番で情報が格納されるのでしょうか? readdir() 関数の仕様が知りたいです。ご存知の方、ぜひ教えてください。
- ベストアンサー
- Perl
- フォルダ内のHTMLにランダムに飛ばす
以下のソースでadsフォルダ内にあるhtmlファイルを ランダムに呼び出しているのですが 実行をすると正常に表示をするときと ページが真っ白で何も表示しないときがあり困っています。 どなたかどこに問題があるか分かる方宜しければ 教えて頂けないでしょうか。 宜しくお願い致します<(_ _)> (ソース) <?php $dir_name = "ads"; $ads = array(); $dh = opendir($dir_name); while ($data = readdir($dh)) { if (!is_dir($data)) { array_push($ads, $data); } } closedir($dh); shuffle($ads); include("$dir_name/$ads[0]"); ?> (プログラムの目的) adshuffle.phpにアクセスするとadsフォルダ内にあるhtmlを ランダムに読み込む。 (階層) |_adshuffle.php |_ ads |_ 001.html |_ 002.html |_ ・ |_ ・ |_ ・ |_ 999.html *最終的な目的は999までhtmlを増やしていく予定です。
- ベストアンサー
- PHP
- readdir におけるフルパスでのファイル名取得(1)
前提: current directory---perl scriptが存在する data directory -----.\DATA¥ current directory直下のフォルダ"DATA"に含まれるファイル名(text file)の取得は、 ------------------------------ opendir(DIR,"./DATA/"); @file=readdir(DIR); closedir(DIR); foreach $myfilename(@file){ if($myfilename=~/txt|TXT/){ print "$myfilename\n"; #確認用 } } で、できますが、フルパス付は、どのようにすればできるでしょうか? 現状、DOS promptで下記のようにやっています。 dir /s/b/o .\DATA\*.txt > filelist.dat これを、perlで読み込んで、処理をやっています。 readdirをうまく使って、perlの中で済ませてしまいたいのです。 よろしくお願いいたします。
- ベストアンサー
- Perl
- フォルダ内のファイル名を取得して配列にぶち込みたいです
こんにちは。 フォルダ内ファイル名を一覧にして表示させることまでは出来ますが、 この一覧表示されたファイル名を配列に入れるにはどうしたらよいでしょうか。 <?php $dir = "sample/"; // ディレクトリの内容を読み込みます。 if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { echo "filename: " . $file . "<br />\n"; } closedir($dh); } ?> ご教示宜しくお願い致します。
- ベストアンサー
- PHP
- フォルダ内のファイル名取得の仕方が分かりません
Apache2.0.47、PHP4.3.2で使用しています。 フォルダ内のファイル名の取得を以下のように書いています。 (scandirは使えませんでした) <?php $dir = "test_dir"; $dh = opendir($dir); while (false !== ($filename = readdir($dh))) { $files[] = $filename; } sort($files); print_r($files); ?> "."と".."も取得されるので、以下のように変更したのですが同じ結果でした。 <?php $dir = "test_dir"; $dh = opendir($dir); while (false !== ($filename = readdir($dh))) { if(filename!=". "){ if(filename!=".. "){ $file[] = $filename; } } } sort($files); print_r($files); ?> "."と".."をはぶいたファイル名だけを取得したい場合にはどうすればよいのでしょうか? よろしくお願いします。
- ベストアンサー
- PHP
- ディレクトリ名を取得したい
perlでディレクトリ名だけを取得したいのですが、 なかなかうまい方法が見つかりません。 ファイル名を取得する・・・というのは結構あるのですが、 ディレクトリ名だけ、というのがどうもわかりません。 ちなみにファイル名取得は以下のようにやっています。 my $md; opendir(DIR, 'q'); while (defined($dir = readdir(DIR))) { $md=substr($dir,0,6); } closedir(DIR); ディレクトリ名だけを取得・・・というのはどうやればよいのでしょうか。
- ベストアンサー
- Perl
- PHPのopendir関数って・・・。
<?php $dir = "/etc/php5/"; // 既知のディレクトリをオープンし、その内容を読み込みます。 if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { echo "filename: $file : filetype: " . filetype($dir . $file) . "\n"; } closedir($dh); } } ?> 上の例の出力は、たとえば以下のようになります。 filename: . : filetype: dir filename: .. : filetype: dir filename: apache : filetype: dir filename: cgi : filetype: dir filename: cli : filetype: dir とありますが、 filename: . : filetype: dir filename: .. : filetype: dir は何もフォルダになくても出ますよね? これは何ですか??
- ベストアンサー
- PHP
- フォルダ内のTXTファイル一覧表示
opendir(DIR,"./"); while($bbb=readdir(DIR)) { print "<a href=\"$bbb\">$bbb</a><br>\n"; } closedir(DIR); で、取得するファイルをTXTに限定したいと思っています。 どのように追加すればいいかご存知の方がいましたら 教えて下さい。
- ベストアンサー
- Perl