クーロンでファイル名に特定文字列があるかをチェック | メール送信スクリプト

このQ&Aのポイント
  • クーロンを使用して特定ディレクトリ内のファイルをチェックし、特定の文字列が含まれるかどうかを検索するスクリプトを作成したい場合、この記事は参考になります。
  • 特定ディレクトリ内のファイルをループして、正規表現を使用してファイル名に特定の文字列が含まれるかどうかを確認し、特定文字列が含まれるファイルがあれば、指定したメールアドレスにメールを送信するスクリプトを作成したい場合は、以下のコードをご参考ください。
  • クーロンを使用して特定ディレクトリ内のファイルをチェックし、特定の文字列が含まれるかどうかを検索し、含まれるファイルがあればメールを送信するスクリプトを作成する方法について説明します。以下のコード例をご参考ください。
回答を見る
  • ベストアンサー

クーロンであるファイル名に特定文字列があるかをチェックする

あるディレクトリ内(./)のファイルをチェックし、特定の文字列(".aaa"と"cccc"の両方)があるかをチェックし、その特定の文字列が含まれるファイルがあればあるメールアドレス宛(xxx@mmm.com)にメールを送信するスクリプトを考えています。下記スクリプトの☆☆☆のところにその関数が入ると思うのですが、自力では解決不能なためご教授願います。 <?PHP if ($dir = opendir("./")) { while (($file = readdir($dir)) !== false) { if(preg_match("/.aaa/",$file)) { if(preg_match("/cccc/",$file)) { ☆☆☆ } } } closedir($dir); } ?>

  • PHP
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

#2です 色々問題のあるスクリプトを書いてしまいました^^; すみません、訂正です。 <?php $message=""; if ($dir = opendir("./")) { while (($file = readdir($dir)) !== FALSE) { if(strpos($file,".aaa") !== FALSE && strpos($file,"cccc") !== FALSE) { $message.="{$file} exists.\n"; } } closedir($dir); } $message = wordwrap($message,70); mail("xxx@mmm.com","My Subject",$message); ?>

wf3255
質問者

お礼

ご回答感謝いたします。 From ヘッダを追加し、希望どおりの動きが出来ました。 ありがとうございます。

その他の回答 (2)

回答No.2

どのようなメールを送りたいのかによりますが、 英文だけの文字を送りたいのであればmail()関数で以下のようにします。 $message = "{$file} exists."; $message = wordwrap($message,70); mail("xxx@mmm.com","My Subject",{$message}); ただ、これだけでは複数ファイルが存在する場合には沢山送られてしまいますので、以下のようにします。 <?PHP $message=""; if ($dir = opendir("./")) { while (($file = readdir($dir)) !== false) { if(preg_match("/.aaa/",$file)) { if(preg_match("/cccc/",$file)) { $message.="{$file} exists.\n"; } } } closedir($dir); } $message = wordwrap($message,70); mail("xxx@mmm.com","My Subject",{$message}); ?> なお、日本語を含んだメッセージを送信したい場合は、 mail()の代わりに、mb_send_mail()を使用します。 その際、mb_language()でエンコードに使用する言語を設定します。 mb_language("Japanese"); mb_internal_encoding("sjis"); mb_send_mail("xxx@mmm.com","My Subject",{$message}); http://jp.php.net/manual/ja/function.mail.php http://jp.php.net/manual/ja/function.mb-send-mail.php p.s. あまりmail関数は使ってないので自信はありません; 間違っていたらどなたか説明をお願い致します^^;

回答No.1

. (ドット)は、正規表現では\n以外の1つの任意文字を表すため、 \.とする必要があります。 <?PHP if ($dir = opendir("./")) { while (($file = readdir($dir)) !== false) { if(preg_match("/\.aaa/",$file)) { if(preg_match("/cccc/",$file)) { ☆☆☆ } } } closedir($dir); } ?> ただ、これだけのマッチングであれば正規表現は使わずに strposでチェックする方が望ましいです。 if ($dir = opendir("./")) { while (($file = readdir($dir)) !== false) { if(strpos($file,".aaa")!==FALSE && strpos($file,"cccc")!==FALSE) { ☆☆☆ } } closedir($dir); }

wf3255
質問者

補足

ご回答感謝いたします。 strposでチェックする方法でいきたいと思います。 私の質問内容に不備があり申し訳ございません。 ☆☆☆に入る関数がわからないのですがご教授いただけますでしょうか?

関連するQ&A

  • preg_match関数で正規表現の複数指定方法。

    ./aaaディレクトリ内においてファイル名に、『bbbb』及び『cccc』と言う文字列が含まれるファイルを./eeeディレクトリに移動させるスクリプトを考えております。 以下は『bbbb』のみを拾うようなスクリプトです。 ========= <?PHP if ($dir = opendir("./aaa")) { while (($file = readdir($dir)) !== false) { if(preg_match("/bbbb/",$file)) rename("./aaa/".$file,"./eee/".$file); } closedir($dir); } ?> ========= 上記は前にこちらで質問させていただき、正常に動くことを確認しております。 今回は『bbbb』及び『cccc』が含まれる場合に./eeeディレクトリに移動させることを考えております。 このような場合は『cccc』はどのよう記載すればよいのでしょうか?ご教授の程よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 条件分岐~同じファイル名がある場合は実行せず

    下記スクリプトにてカレントディレクトリにaaaaおよびbbbbという文字列が存在するファイルを./ccc/dddディレクトリに移行するということを行っています。 下記スクリプトでコピーの処理がありますが、 同じファイル名が./ccc/dddディレクトリに存在する場合、そのファイルについてのみコピーを行わないようにするスクリプトを考えております(同じファイルを何度も./ccc/dddディレクトリにコピーするという事を無くしたいため)。 どなたかお分かりでしたらご教授ください。 実際にスクリプトに追加していただけると助かります。 php4.3.2です。 ======== <?PHP if ($dir = opendir("./")) { while (($file = readdir($dir)) !== false) { if(preg_match("/aaaa/",$file)) { if(preg_match("/bbbb/",$file)) { copy("./".$file,"./ccc/ddd/".$file); } } } closedir($dir); } ?> ========

    • ベストアンサー
    • PHP
  • 特定の文字列が含むときに、専用の処理をさせたい

    最後に「_asc」「_desc」をつけた文字列がいくつかあります。 それを$_GET['aaa']で送り、そこから ・「_asc」「_desc」を削除した文字列だけにし ・「_asc」ならascという文字列を$mmmに「_desc」ならdescを$mmmに ということをしたいです。 $str = "id"; $mmm = 'asc'; if(isset($_GET['aaa'])){ $str = $_GET['aaa']; if(preg_match("/_asc$/i", $str)){ $str = rtrim ($str, "_asc"); }else if(preg_match("/_desc$/i", $str)){ $str = rtrim ($str, "_desc"); $mmm = 'desc'; } } このようにしてみたのですが、上手にできませんでした。 もっといい方法はないでしょうか。

    • ベストアンサー
    • PHP
  • ファイルコピー

    「ルートディレクトリ内の全てのファイルの中でファイル名に"1111"及び"2222"と言う文字列が含まれるファイルを./333/444ディレクトリに同じファイル名が無ければコピーする」 というスクリプト(下記qqq.php)を作りましたが、 「ルートディレクトリ内の全てのファイルの中でファイル名に"1111"及び"2222"と言う文字列が含まれるファイルの中で最もファイル更新時刻が新しいものだけを./333/444ディレクトリに同じファイル名が無ければコピーする」 と変えたいのですがどうも上手くいきません。 この『・・・文字列が含まれるファイルの中で最もファイル更新時刻が新しいものだけを・・・』の部分につきまして、ご教授ください。 スクリプトを記載していただけるととても助かります。 どうか宜しくお願いいたします。 ********************* qqq.php <?PHP if ($dir = opendir("./")) { while (($file = readdir($dir)) !== false) { if(preg_match("/1111/",$file)) { if(preg_match("/2222/",$file)) { $to="./333/444/".$file; if(!file_exists($to)) copy("./".$file,$to); } } } closedir($dir); } ?>

    • ベストアンサー
    • PHP
  • ディレクトリ内の拡張子指定ファイル移動

    自分では難解で、同じような質問がなかったため質問します。私は新米です。 ルートディレクトリ(./)内の拡張子が『.send』のファイルを全て別のディレクトリ(./back)に移動するクーロンを組もうと思っているのですが、ルートディレクトリのパーミッションが750のためか下記のスクリプトですと、copyの行及びunlinkの行でPermission deniedのエラーが出ます。 ./backディレクトリに関しては777にしています。 ルートディレクトリのパーミッションはサーバーの仕様で変えられないのですが、何か有効がありますでしょうか?どうかご教授ください。 <?PHP if ($dir = opendir("./")) { while (($file = readdir($dir)) !== false) { if(preg_match("/.send/",$file)) { copy("./".$file,"./back".$file); unlink("./".$file); } } closedir($dir); } ?>

    • ベストアンサー
    • PHP
  • フォルダ内のファイル名を取得して配列にぶち込みたいです

    こんにちは。 フォルダ内ファイル名を一覧にして表示させることまでは出来ますが、 この一覧表示されたファイル名を配列に入れるにはどうしたらよいでしょうか。 <?php $dir = "sample/"; // ディレクトリの内容を読み込みます。 if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { echo "filename: " . $file . "<br />\n"; } closedir($dh); } ?> ご教示宜しくお願い致します。

    • ベストアンサー
    • PHP
  • readdirでのファイル名取得

    readdir()にて、textファイルのみ取り出すにはどのようにすれば良いのでしょうか? 現状は、後処理で、/txt|TXT/でマッチさせています。 opendir(DIR,"./DATA/"); @file=readdir(DIR); closedir(DIR); foreach $myfilename(@file){ if($myfilename=~/txt|TXT/){ print "$myfilename\n"; #確認用 } } よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • filemtimeについて

    filemtime関数を使ってあるディレクトリ(./aaa)の中の最新のファイルを表示させようとしていますが、少し前までは上手くいっていたのですが、急に予定通りに動かなくなってしまい、ちょっと自分では解決できないため質問させていただきます。 スクリプトは下記になります。 <?php $dir = opendir("./aaa"); $latestfile=0; while ($fnm = readdir($dir)) { if($fnm == "." || $fnm == "..") continue; clearstatcache(); $ftime = filemtime("./aaa/$fnm"); if($latestfile < $ftime){ $latestfile = $ftime; $latestfilename = $fnm; $filename = "./aaa/$latestfilename"; echo "$filename"; } } closedir($dir); ?> これで実行すると、aaaディレクトリ内のファイル名が全て表示されてしまいます。※ファイルの更新日時はファイルごとに異なっています。 どなたかご教授願います。

    • ベストアンサー
    • PHP
  • 特定文字列を検索してそれ以外を出力する

    お世話になります。 特定文字列を検索してそれ以外を出力するプログラムを書きたいです。 たとえば $aaa = 111111,222222,333333; $haifu = 111111; preg_match("/$haifu/", $aaa, $haifu_non); 結果 $haifu_non : 111111 となるところを カンマ区切りの$aaaで$haifuと一致しなかった 222222,333333 を受け取るためにはどうしたらよいでしょうか? アドバイスお願いします。

    • ベストアンサー
    • PHP
  • 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); ?> 何がおかしいのかご教授ください。

    • ベストアンサー
    • PHP

専門家に質問してみよう