- ベストアンサー
if文の使い方
自分では解決できない為、質問させていただきます。 Webサイトの任意の場所に下のスクリプトを埋め込み、 ./testディレクトリに7日以内に更新ファイルがあり、かつファイル名にrrrという文字列がなければWEBサイトの埋め込んだ場所にABCDEFGHIJKと表示させることを考えています。 よって7日以内に更新があってもファイル名にrrrが含まれる場合や、 7日以内に更新がない場合はwebサイトにABCDEFGHIJKと表示させたくありません。 自分で書いてみた下記スクリプトではいつでもABCDEFGHIJKと表示されてしまいます。 ※下記9行目の$latestfilenameをechoするとちゃんと最終更新ファイル名を表示してくれます。(ここまでは上手くいっています) <? $dir = opendir("./test"); $latestfile=0; while (($fnm = readdir($dir)) !== false) { if($fnm == "." || $fnm == "..") continue; $ftime = filemtime("./test/$fnm"); if($latestfile < $ftime){ $latestfile = $ftime; $latestfilename = $fnm; } } if($fnm == "." || $fnm == "..") continue; if(preg_match("/rrr/",$latestfilename)){ printf(""); break; } else if($nowdate - $fftime < 604800) { printf("ABCDEFGHIJK"); } else if($nowdate - $fftime > 604800) { printf(""); } closedir($dir); ?> 何がおかしいのかご教授ください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
素直にアルゴリズムを考えると以下のようなことがしたいのでは。 $message = ''; $dir = opendir('./test'); $ctime =time() -604800; while ($fnm = readdir($dir)) { if($fnm != '.' && $fnm != '..' && filemtime("./test/$fnm") > $ctime) { if(preg_match('/rrr/',$fnm)==0) $message='ABCDEFGHIJK'; } } closedir($dir); print $message;
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
ケアレスミスの連発ですね 不要なbreak(そのルーチンをとおるとエラーになる)があったり、 $nowdateと未定義の変数でチェックしたり(これは単純にtime()とすればよいでしょう) $ftimeと$fftimeというスペルミスがあったり、そもそもが$ftimeではなく $latestfileのような・・・。 ってことでifの項目で if($nowdate - $fftime < 604800) とかなっているところを if(time8) - $latestfile < 604800) などに書き換える必要があると思います
お礼
無事解決いたしました。 貴重なご意見ありがとうございました。
- ham_kamo
- ベストアンサー率55% (659/1197)
このプログラムの中では $nowdate が定義されてませんが、これはどこかで定義されているのでしょうか?
お礼
参考意見ありがとうございます。 $nowdate定義を完全に忘れていました。 #2さま、#3さまの方法を確認しつつ直したいと思います。
お礼
すみません。 ./testディレクトリのファイル生成アルゴリズムに別工程があり、 rrr123.txtというファイルと側の123.txtというファイルが同じ更新日付のために、ABCDEFGHIJKが表示されてしまうことがわかりました。 123.txtのほうも対象から除くステップが必要みたいです。 お騒がせして申し訳ないです。どうもありがとうございました。
補足
参考意見ありがとうございます。 上記の方法で実行してみましたが、 ファイル名にrrrがあっても。7日以内の更新日付だと表示されてしまいます。 ファイル名の取得までは希望どうり動きます。