PHPでサーバのcronを使わず、プログラムの自動実行ができる方法を検討しています。


私が調べたところ
・Web cronを使う
・常時アクセスがあるページに実行用のプログラムをimgタグで埋め込む
・Windowsのタスクで定期的に実行
・RSSフィードで実行するプログラムを読みに行く

と言うのがほとんどで、それらの仕様ややり方は理解できます。
しかし、更に調べると以下のサイトで販売しているシステムでは、cronもimgタグも埋め込まないそうです。
http://www.mail-neo.com/

デモ版を見るとPHPなので、PHPでやる方法があるのだと思います。
しかし私にはPHPでcronも上記方法も使わず、自動実行する方法が思いつきません。

技術的にやり方がある場合は方法を教えてください。よろしくお願いします。
(他の言語と組み合わせたら出来る と言うことでしたら、その内容も教えてください)

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

回答3件)

id:vh5150 No.1

回答回数231ベストアンサー獲得回数5

ポイント27pt

登録した情報の配信を指定時刻まで遅延させることでご希望の機能が実現できます.

http://www.phppro.jp/phpmanual/php/function.time-sleep-until.htm...

id:kt26

つまりメールの予約配信なんかは、予約を入れたと同時に指定時刻まで遅延させるということですか?バックグランドで動作させれば出来るような気もしますが、、現実問題無理ではないでしょうか?

2010/04/24 18:04:42
id:pinkymonk No.2

回答回数173ベストアンサー獲得回数14

ポイント27pt

JavaやCで常駐(常に起動しっぱなしの状態)のアプリケーションを作成して

そのアプリケーションの中で時間を定期的にチェックして指定した時間になれば

処理を行う。

ということはできると思います。

id:kt26

「常に起動しっぱなし」のアプリケーションってWindows用のソフトですよね?

で、常時起動させるというのは私が質問に書いた「Windowsのタスクで定期的に実行」と、あまり変わらない気がするのですが。(つまり、自分のPCを常時起動させる必要がある)


それともLinux用のソフトを作ってサーバ上で起動し、自動実行用のプログラムを監視するのでしょうか?それこそcronみたいですが・・。

2010/04/24 18:08:15
id:TRTr No.3

回答回数52ベストアンサー獲得回数13

ポイント26pt

PHPで起動しっぱなしのスクリプトを書き、サーバでpseudo-cronぽく動作させる事は可能です。

最近ではtwitterbotなどで用いられています。

この方法は実行時間制限があるレンタルサーバなどでは使えないでしょう。


現実的には、挙げられたソフト含め、webcron.orgなど時刻登録を外のサーバで持ち、

外から何らかのコールバックを受ける、という形だと思われます。

単純にアクセス用のURLを持っていて

外からそのURLをリクエストする感じになるかと思います。

実装のやりかたによっては、URLが外部に漏れた場合は安全とかけ離れた実装となります。

たとえば、はてなアンテナやRSSアグリゲータで常時監視するように設定して

それをもとに時刻を算出するなどの方法が考えられます。


cronも指定時刻にアラームを上げるだけのプログラムです。

スプリプトが動作するサーバに起動しっぱなしのプログラムを一つ用意しておけば

どんな物/言語でも実行可能ですし、

それが自分のPCでなくても構いません。

しかし、どこかに一つは起動しっぱなしの環境と、そこで実行し続けられる何かが必要です。

cronの場合、cronが常に動き続けています。

http://pha22.net/twitterbot/cron.php

id:kt26

そうですね。「常に動き続ける環境」というのは必要ですね。


質問で出したURLのサイトは、cronを使わないと書いていますが、もしかしたらwebcronみたいな事を代行して実現しているのかもしれませんね。


常時起動しっぱなしのPHPプログラムの作り方はわかりましたし、その方法がレンタルサーバなどで実用的ではないというのも分かりました。そしてやはり一番最適なのはcronだと思うので、自動実行させたい要件が出た時には、cronを使うようにします。

2010/04/24 23:15:55
  • id:pinkymonk
    ちょっとやりたいことを読み間違えていました。


    たとえば、WEBページを起動しっぱなしにできるなら、
    JavaScriptを使って指定時刻のsubmitするようにする。

    もしくは、

    PEARを使って、システムデーモンをPHPで作成する。
    http://pear.php.net/package/System_Daemon
    http://phpspot.org/blog/archives/2009/01/phppearsystem_d.html
  • id:kt26
    >WEBページを起動しっぱなしにできるなら

    それだと結構色んな方法が浮かびます。
    コメントで書いてくれた内容もそうですし、
    RSSフィードやタスクもそうでしょう。

    しかし、質問で書いたサイトはそう言うことをしていないみたいです。
    純粋にサーバにインストールしたPHPのシステムで
    cronや誰かにアクセスしてもらう以外の方法で、自動配信しているみたいで。

    その会社独自の方法とはいえ、PHPを使うならそれなりに方法があると思うんです。
    なので、「どういった方法があるのだろう?」と思い、質問した次第です。

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

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

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

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