アプリ版:「スタンプのみでお礼する」機能のリリースについて

フォームに
送信先、題名、本文のほかに
時間を入力し、指定した時間にメール送信する
phpスクリプトを考えています。
どういう手順ができるのかアドバイスください。

A 回答 (4件)

サーバなんかだと、at は cron を使って、


プログラムを時間通りに実行できるんですけどねー。

基本的に、PerlやPHPは実行した時がすべてなので、
無理・・・なのかな?
(何かで特別な方法でできたような気がするけど。
 うろ覚えなので忘れてください。)

特別な方法ではないのですが、HPのアクセス数が
多いなら、そのページに仕込んでおいて、

アクセスした時に
if(3時~4時&&一度){メール実行}って感じで、
送信することは可能と言えば、可能。

さらにこれを発展させれば、win&携帯で、仕込んだ
ページに手動なり、winのタスクなりでアクセスすれば、
メールは、送信できるけどあんまりスマートじゃない
ッスねー。

そもそも、メールって相手に届く時間が、すぐとは
かぎらないし。
最近でもチャットなんかでメール交換しても、20分
くらいかかる場合もあるし。
なかなか、難しいと思います。
    • good
    • 0

こんにちは。


結論から言ってしまうと、皆さんが言うように、むずかしいと思います。
No1さんが言ったように、ApacheのようなWebサーバのモジュールとして、もしくはCGIとして動作するのを前提に作られたPHPは、そもそも永久に作動させるといった概念はないでしょう。もしくはすべきではないでしょう。(シェルスクリプトのように、Webサーバなしでも動作させることは出来ますが)
そして、デフォルトで30秒しか作動しないようになっています。

php.iniをいじれば、永遠に作動させることも出来ますがすべきではないと思います。PHPはApacheのようなWebサーバの力を借りて動いているわけですからWebサーバの設定と、いくつメールを出すために予約待ちしているかにもよりますが、仮に私が起動させているサーバで実現させると、数十通で誰もアクセスできなくなります。いわゆるブラウザの地球儀がぐるぐる回った状態。
こうした状態を悪意で起こすことを、DOS攻撃といいます。つまり、自分でDOS攻撃を発生させていることになります。
レンタルサーバで、やった場合は・・・。他の借りている人やレンタルサーバ会社にも迷惑がかかるので、場合によっては損害賠償が発生する可能性も・・・。

よって、PHPやWebサーバ以外の力を借りる必要があります。
その方法は皆さんが言っておられるように「corn」を使うか、そういう専用のサーバを用意するかどちらかになるわけですが、まず前提として自分でサーバを立ち上げているか、専用サーバを借りているかが最低条件になります。

簡単な方法としては、「cron」ですが「cron」に登録するメール送信シェル(Perlでもいいんですけど)スクリプトが必要になってきます。
この辺は、御自分でサーバを立ち上げているのでしたら、簡単にできると思いますよ。

がんばってください。
    • good
    • 0

私の開発環境(Linux+Mysql)でしたら、、、



まず、送信先、題名、本文、時間、送信したかどうかのフラグ、、など条件をDBに格納

時間などの条件にマッチした未送信のデータがDBに格納されているときのみメール送信するプログラムを作る。

1時間おきにこのプログラムが起動するようにcrontabコマンドでセットする。

という感じでバリバリ稼動中です。
    • good
    • 0

php が実行されるタイミングを見ればわかると思うのですが、これをスクリプトだけで実


現するのは無理ではないでしょうか?

何かしらのページを開いて、その中のフォームに入力するわけですよね?
その状態から php スクリプトに出来ることは
フォームの内容をメールサーバーに投げる。
フォームの内容をデータとして保存する。
の2つです。

実際にメールを投げるエージェントは、時間などは関係なく送信してしまうので
指定した時間まで待ってから送信、ということは無理です。

『保存されたフォームデータをチェックして、指定時刻であれば送信する』
というスクリプトを作って、このスクリプトをサーバーのシェルで定期的に実行する必要があります。

それでも、定時間サイクルでこのスクリプトを実行する「なにか」が必要になります。
# Linux で言うところのcron とか、Win のタスクスケジューラとか・・・
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!