![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
No.5ベストアンサー
- 回答日時:
>残念ながら今回も思ったとおりには行きませんでした。
変ですね~。
プログラム的には、$filenameが取り出せていることから特別問題がなくて、
is_file()の動作がおかしいということですね。
日本語のファイル名がうまく読めない
(例えば、OSとAPACHEとPHPで文字コードが違うとか)
いうことではないですよね。
is_fileが使えないということであれば
filetype関数を使ってみたらどうでしょう。
if("file"==filetype($filename)){
の様にファイルの種類がファイルだったら文字列で"file"を返します。
また、ディレクトリの場合は"dir"になります。
これでもおかしいなら
例えば、
$ftype=filetype($filename);
としておいて、
if($ftype=="file"){
}elseif($ftype=="dir"){
}else{
print "$filenameの種類は:$ftype\n";
}
とでもして原因を探りましょう
いつも回答ありがとうございます。
日本語のファイル名が読めないということはなさそうです。readdirでは日本語を読めているようですし、半角英数字でも現象はおなじです。
アドバイスいただいたように、原因を探ってみたのですか分かりませんでした。
先に進まないので別の作業をしていたのですが、他の回答から原因が分かりました。
これまでいろいろ回答・アドバイスをいただき本当に感謝しています。
ありがとうございました。
No.6
- 回答日時:
私のWindows98SEのPCでは、
is_file($filename)
is_dir($filename)
は、$filenameにフルパスを指定すると正常に動作します。
$filenamefull = $dir . '/' . $filename;
is_file($filenamefull)
is_dir($filenamefull)
こんな具合です。
「readdir($dh)」はファイル名だけを取得し、
is_file(), is_dir()はパスを指定しないと、カレントDIRを使用してるようです。
関係無ければ、ごめん。
回答ありがとうございます。
いただいた内容を確認したところ、動作いたししました。
readdirではパス指定しておりましたが、is_file、is_dirでは指定していませんでした。
原因が分からずしばらく立ち止まっていましたが、ようやく先にすすめそうです。
神の一声のような回答でした。
本当にありがとうございました。
No.4
- 回答日時:
>ファイル=なし、ディレクトリ=2(.と..)になります。
例えば、下のようにしてこちらの環境では期待通り動きます。
opendirは、ちゃんとできているのでしょうか?
最初(#1)のコメントからすると、ファイルは読み出しできていたはずだと思うのですが…
なんだったら、ifでファイルとディレクトリの検査をする前に
print "$filename\n";
して
ファイル名がちゃんと取り出せているか調べる必要があるかもしれません。
----------------------
修正済みプログラム($dirは直して下さい。)
----------------------
<?php
$dir = "/work/sample/php/";
$dh = opendir($dir);
while(false !== ($filename = readdir($dh))) {
if(is_file($filename)){
$file[] = $filename;
print "file = $filename\n";
}
if(is_dir($filename)){
$folder[] = $filename;
print "folder = $filename\n";
}
}
closedir($dh);
?>
この回答への補足
上記の修正プログラムの結果ですが下のようになりました。
folder = . folder = ..
print "$filename\n";で調べたところファイル名は取り出せていました。
いつも回答ありがとうございます。
残念ながら今回も思ったとおりには行きませんでした。
$dirで参照したディレクトリ内にはディレクトリとファイルが1つずつあり、ちゃんと取り出せていたのですが、if文を使うと思うようにいきません。
PHP4.3.2の設定に問題でもあるのでしょうか?
よろしくお願いします。
No.3
- 回答日時:
>if(!is_file($filename)){
>if(!is_dir($filename)){
if(is_file($filename)){
if(is_dir($filename)){
にしないと、意味が逆になってしまいます。
(ファイルでない、フォルダでない)
返事がだいぶ遅くなってしまいました。
いつも回答ありがとうございます。
しばらくPHPの使えない環境でいました。
今はOS・Linuxにて本稼動の準備に入っていますが、
いまだに原因が分かりません。
よろしくお願いします。
No.2
- 回答日時:
>is_fileでTRUEになったもの 「.」「..」「test.php」「testフォルダ」
>is_dirでTRUEになったもの 「test.php」「testフォルダ」でした。
それ、変ですね。
どんな、コードを書いたのか見せて貰えませんか?
この回答への補足
回答ありがとうございます。
以下のようなコードで確認いたしました。
コメントアウトしているif文は当初のコード、その中に書かれているコードが今回確認用に追加したものです。
//保存フォルダ参照
$dir = "test/rom_file/$id";
$dh = opendir($dir);
while (false !== ($filename = readdir($dh))) {
//if ($filename != "." && $filename != "..") {
//$file[] = $filename;
if(!is_file($filename)){
$file[] = $filename;
print "file = $filename";
}
if(!is_dir($filename)){
$folder[] = $filename;
print "folder = $filename";
}
//}
}
phpの関数リファレンスでも確認しましたが、間違っていないように思ったのですが...
よろしくお願いします。
No.1
- 回答日時:
$file=readdir($dh)
として読み出したら
is_file($file)
または、
is_dir($file)
でファイルかディレクトリか調べることができます。
それぞれ、ファイル、ディレクトリの時TRUEになります
この回答への補足
お礼を書いたあとに申し訳ありませんが...
検索ディレクトリ内にtest.phpとtestフォルダを作り、readdirで読み出した内容を確認した結果、
is_fileでTRUEになったもの 「.」「..」「test.php」「testフォルダ」
is_dirでTRUEになったもの 「test.php」「testフォルダ」でした。
is_fileでTRUE=「test.php」、is_dirでTRUE=「testフォルダ」をイメージしていたのですが...。
私の解釈の仕方がおかしいでしょうか?
回答ありがとうございます。
明瞭かつ簡潔な回答で感謝します。
何となく見覚えのある関数でしたが、いざ使うときに思い出せませんでした。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 図に示す階層構造で,現在のディレクトリ(カレントディレクトリという)が*印のディレクトリであるとき, 2 2022/11/16 10:55
- その他(開発・運用・管理) 【至急】.htaccessによるディレクトリ単位でのリダイレクト 2 2023/08/10 13:46
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- UNIX・Linux Linuxについて質問です。 シェルスクリプト名をfind.shとして、以下の条件をすべて満たすファ 1 2023/02/03 03:50
- PHP ファイルアップロードに関してのセキュリティについてアドバイスお願い致します 1 2023/08/20 00:25
- その他(開発・運用・管理) バッチファイルで特定のファイル・ディレクトリ以外を削除する方法について 4 2022/05/31 14:03
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- その他(開発・運用・管理) フォルダの中にファルダを作成してファイルを格納するバッチコマンド 1 2022/06/30 11:39
- UNIX・Linux JSLinuxについて。 Linuxのこの手順のプログラミングは合っているでしょうか。 ①ホームディ 2 2022/06/20 15:33
- Windows 10 指定したファイルを任意の範囲のディレクトリ内に上書き保存したい 1 2022/11/24 10:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【BAT(バッチ)ファイル】Web...
-
バッチを用いたフォルダの自動移動
-
fopenでファイルが開かない場合...
-
デイレクトリ コピー
-
findfirst("*",&ffblk,FA_DIREC...
-
絶対パス?絶対アドレス?意味...
-
makefile でファイルをコピーす...
-
Smarty includeでテンプレート...
-
図に示す階層構造で,現在のデ...
-
ファイルとディレクトリの見分...
-
MkDir関数
-
Smartyのテンプレート置き場に...
-
URLに特定の文字を含む場合の条...
-
CakePHPのファイルの所有者の権...
-
バッチファイルで特定ファイル...
-
上位ディレクトリ名(フォルダ...
-
define でのルートディレクト...
-
Visual C++ 2005 Express Editi...
-
php、cgi(perl)をlinuxに移行
-
FTPコマンドでディレクトリごと...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチを用いたフォルダの自動移動
-
CFileDialogの最初のディレクト...
-
Subversionのリポジトリの削除
-
FTPコマンドでディレクトリごと...
-
【BAT(バッチ)ファイル】Web...
-
現在位置より2つ上のディレク...
-
makefile でファイルをコピーす...
-
fopenでファイルが開かない場合...
-
MkDir関数
-
visualstudioでc#のdllができない
-
絶対パス?絶対アドレス?意味...
-
DLL のロードの順序
-
includeが出来ない訳とは?
-
rmdirでフォルダが消せません
-
VB.NET 最下位のディレクトリ名...
-
ファイル選択ダイアログで選択...
-
C言語でのディレクトリ作成につ...
-
aspのページが表示できません
-
ディレクトリの正規表現について
-
Subversionで、ファイルをリネ...
おすすめ情報