PHPのCronについて質問です。


現在メールを決まった時刻になると携帯電話に来るように設定しているのですが、うまく設定されません。

問題としては、過去にIF文を使って実行するように教えていただき、自分で条件設定してみたのですが、この条件設定の部分が間違えているからだと考えています。

そこで大変お手数をおかけしますが一度スクリプトを見ていただければと考えております。

わかるかたおりましたらご回答お待ちしております。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/10/20 13:01:37
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:makeworld No.1

回答回数75ベストアンサー獲得回数23

ポイント100pt

サーバ側のロケール設定が、日本語になっていない可能性があります。

下記のスクリプトを5分毎に実行してみると、切り分けができると思います。

(メールアドレスは正しいものを設定してください)

<?php

$msg = "date(M) = (".date('M')."); ";
$msg .= "date(D) = (".date('D')."); ";
$msg .= "date(H) = (".date('H')."); ";
$msg .= "date(i) = (".date('i')."); ";

mb_send_mail('test@softbank.ne.jp','テスト',$msg);

?>

1. 5分毎にメールが送られてくるか?

2. メッセージのdate(M)などの値が日本語になっているか?

もし、両方とも問題なければ、文字コードが一致していない可能性があるので、ソースの中でmb_convert_encoding()などを使って、同じ文字コードに変換した後に、ifで比較すれば良いと思います。

あと、分の取得は小文字のiです。

id:aiomock

ご回答ありがとうございます。

2009/10/18 10:19:40

その他の回答2件)

id:makeworld No.1

回答回数75ベストアンサー獲得回数23ここでベストアンサー

ポイント100pt

サーバ側のロケール設定が、日本語になっていない可能性があります。

下記のスクリプトを5分毎に実行してみると、切り分けができると思います。

(メールアドレスは正しいものを設定してください)

<?php

$msg = "date(M) = (".date('M')."); ";
$msg .= "date(D) = (".date('D')."); ";
$msg .= "date(H) = (".date('H')."); ";
$msg .= "date(i) = (".date('i')."); ";

mb_send_mail('test@softbank.ne.jp','テスト',$msg);

?>

1. 5分毎にメールが送られてくるか?

2. メッセージのdate(M)などの値が日本語になっているか?

もし、両方とも問題なければ、文字コードが一致していない可能性があるので、ソースの中でmb_convert_encoding()などを使って、同じ文字コードに変換した後に、ifで比較すれば良いと思います。

あと、分の取得は小文字のiです。

id:aiomock

ご回答ありがとうございます。

2009/10/18 10:19:40
id:snow_leopard No.2

回答回数294ベストアンサー獲得回数22

ポイント27pt

cron自体の設定ができていないのではないでしょうか?

月曜から何曜まで五分毎に起動するというのは、cron側で設定するのですよ。

とりあえず関連づけるスクリプトはメールを送るだけのものにして、

cronがちゃんと機能しているか確認してください。

id:aiomock

ご回答ありがとうございます。

説明不足で申し訳ありません。

Cronの設定はできております。

2009/10/18 17:49:06
id:esecua No.3

回答回数510ベストアンサー獲得回数10

ポイント26pt

PHPのCronについて質問です。

そもそもCronはPHPの関数ではありません。UNIXなどのスケジューラデーモンの事です。

PHPはスクリプト言語ですから、アクセスが無い限り永遠に動きません。

そこで、クローンを利用し、決まった時間にサーバー上にある指定したPHPスクリプトを起動し、定期的に動作させるのです。(良くバックアップ処理などに利用されます。)

先ずはそこからでしょうか。http://x68000.q-e-d.net/~68user/unix/pickup?cron

id:aiomock

ご回答ありがとうございます。

2009/10/18 20:02:47
  • id:aiomock

    さくらサーバーを使用してCRONを実行しています。
    実行のタイミングですが毎日5分おきにとりあえずメールを送るタイミングを計るということで実行しています。

    * CRON 設定一覧 *

    実行日時

    月 毎月
    日 毎日
    時 毎時
    分 5分毎
    曜日 日月火水木金土


  • id:aiomock
    スクリプトは以下になります。

    if(date('D') == '土曜日' && date('H') == '18時'){

    mb_send_mail('test@softbank.ne.jp','テスト','18時成功');

    }

    if(date('D') == '土曜日' && date('H') == '19時'){

    mb_send_mail('test@softbank.ne.jp','テスト','19時成功');

    }

    if(date('D') == '土曜日' && date('H') == '20時'){

    mb_send_mail('test@softbank.ne.jp','テスト','20時成功');

    }
  • id:aiomock
    お手数をおかけしますが 少し確認をしたいのですが

    10月18日10時15分にメールを送りたい場合は

    if(date('M') =='10月' && date('D') == '18日' && date('H') == '20時' && date('I') == '15分'){

    mb_send_mail('test@softbank.ne.jp','テスト','テスト');

    }

    でよろしいでしょうか?
  • id:rouge_2008
    makeworldさんの回答をヒントにして解決できたのではないかと思いますが、まだでしたら以下をお試しください。


    $day = date('j');
    $month = date('n');
    $hour = date('G');
    $minute = date('i');

    // ※10月19日の9時15分に送信したい場合
    if($month == '10' && $day == '19' && $hour == "9" && $minute == '15') {

    mb_send_mail('test@softbank.ne.jp','テスト送信','テストメール');

    }


    date('M')は月の略称(10月はOct)
    date('n')で先頭に0なしの月(1から12)
    date('D')は曜日の略称(月曜はMon)※日付ではありません。
    date('j')で先頭に0なしの日付(1から31)
    date('G')で先頭に0なし24時間単位の時(0から23)※先頭0ありがいい場合はdate('H')を使います。
    date('i')で先頭に0ありの分(00から59)

    http://php.net/manual/ja/function.date.php
  • id:aiomock
    ご回答ありがとうございます。

    試してみたのですが 未だに無理です。

    スクリプトに問題がないとしたら、さくらサーバーに問題があるのかもしれないと思ってしまうのですが、どうでしょうか。

    一応普通にメールを送るだけなら5分おきのCronの設定に何回も成功しているので、会社側で何か決まりごとが決められているのではないかと考えてしまいます。

    会社によって、今回のようなスクリプトに制限が出てくることなどあるのでしょうか?
  • id:rouge_2008
    特殊な事は何もしていないので、今回のスクリプトで制限されている箇所があるとは思えないのですが・・・

    タイムゾーンの設定が違うのでしょうか?
    以下をブラウザで手動実行した場合はどうなりますか?

    $day = date('j');
    $month = date('n');
    $hour = date('G');
    $minute = date('i');

    // 取得した時間を表示します。(※日本時間とあっているか確認してください。)
    echo $month . "/" . $day . " " . $hour . ":" . $minute;


    また、cronを実行しているサーバーの時間とWEBサーバーの時間を比べる為、以下をcronで実行して確認して結果を教えてください。

    $day = date('j');
    $month = date('n');
    $hour = date('G');
    $minute = date('i');
    $second = date('s');

    $bodytxt = $month . "/" . $day . " " . $hour . ":" . $minute . ":" .$second;

    mb_send_mail("test@softbank.ne.jp","テスト送信","テストメール\n".$bodytxt);

  • id:aiomock
    ご回答ありがとうございます。

    実行してみたところ

    ページ表示のものは12時43分に実行したのですが 10/20 12:43と表示されました。日本時間とあっています。

    またCronのスクリプトも実行したところ

    1回目 10/20 12:43:30 という値を返してくれました。
    2回目 10/20 12:45:02 という値を返してくれました。
    3回目 10/20 12:50:02 という値を返してくれました。
    4回目 10/20 12:55:01 という値を返してくれました。

    きちんと5分毎にプログラムは実行されているみたいです。
  • id:aiomock
    rouge_2008さん

    ご回答ありがとうございます。

    そして大変申し訳ありません。プログラムですがきちんと実行されました。

    原因ですが、私のチョンボミスです。

    変数の事前設定をしていませんでした。。

    お手数をおかけしました。。。

    今回のご回答のおかげでCronをさくらのコントロールパネルからですが使えるようになりました。

    本当にありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません