[PHP-users 5857] Re: ファイルの削除

GT php-users@php.gr.jp
Mon, 04 Mar 2002 16:32:54 +0900


GTと申します。

いつもお世話になっております。


>>> readdir()でどのような文字列が返ってくるかは把握されていますか?
>> 
>> 指定したdir内のファイル名を返すんですよね?
> 
> そう、そうなんです。
> ファイルまたはディレクトリ名*のみ*を返すんです。
> 
>>> 一度、
>>> 
>>> $dir = opendir("./data/");
>>> while($file = readdir($dir)){
>>> print "[$file]\n";
>>> }
>>> closedir( $dir );
>>> 
>>> としてどのように表示されるかを確認されれば、おそらく原因が
>>> わかるのではないか、と思います。
>> 
>> すいません。それがわからないのです。
>> 帰ってきたファイル名を「filemtime($file);」とすると
>> そのファイル毎の最終更新時刻が取得できるのではないのでしょうか?
>> ところが最終更新時刻が帰ってくるファイルと帰ってこないファイルがあるのです。
>> 同じdir内なのに a.html は12345678 と帰ってくるのに b.jpg は空です。
>> どこに問題があるのか私にはわかりません。
> 
> えっと、ボクが書いたコードは試しに実行してもらえましたか?
> 頭の中だけで考えても原因はわかりませんよ。

はい、実行しましたがファイル名はきちんと表示されるし
何も問題ないと考えておりました。

> readdir()で取得したファイル名は、上でも書いたように、ファイル名
> しか返されません。
> なので、filemtime()を呼び出すときは、
> filemtime($file);
> ではなくて
> filemtime( "./data/$file" );
> のように、ディレクトリパスも考えないといけません。

なるほど〜〜〜
出来ました。
ここまで考えていませんでした。
「ファイル名が表示するのになぜだ」とこれだけを考えておりました。

> perlで、GTさんが書かれていたように
>> foreach $file (<./hoge/*>) {
> とした場合、$fileには './hoge/a.html' みたいに、ディレクトリ
> パスも一緒に代入されるはずです。

そういわれてみればそうですね!!^^;
全然気付きませんでした。

> 最終更新時刻が取れたというa.htmlは、たまたまPHPファイルと同じ
> ディレクトリにもa.htmlがあって、そのファイルの最終更新時刻が
> 返されているのではありませんか?

そういうことですか...
そういわれてみれば index.html といったどこにでも入れてあるファイル名は
時刻が取得できていました。

>> 上手く動作していないコードを公表するのに抵抗がありまして...^^;
>> なにこれって思われそうで...
> 
> まぁ確かにコードを公表するのはボクも恥ずかしいですが(^_^;。
> 必要な情報は公開しないと問題解決には繋がりませんよ。

はい、出来る限りそうします。

本当にありがとうございました。m(_ _)m 助かりました