毎日一回実行したいphpはsleepを使うのが良い方法でしょうか?
cronでなくphpだけでやりたいです。
sleepしている間の負荷はどうなんですか?
while(1)よりは軽い負荷なんでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (7件)

cronでいいかと。

    • good
    • 0

質問とはかけ離れていますが…



1日に1回だけ動けばいい(時間は決まっていない)のならば、他力本願で行ってみては?

1日に1回以上アクセスのあるサイトならば、同日に1日1回動かしたいスクリプトが動いたかどうかをテキストか何かにログとして保存させておいて
その日初めてアクセスのあった瞬間に1日1回動かしたいスクリプトを起動させる


--------index.php(coding面倒なので、日本語)
本日日付取得;
text.logsを読み込み;
if(本日日付が存在しないなら){
 1日1回スクリプトをincludeする;
 text.logsに本日日付を追加書込;
}
------------

----text.logs
2005-04-09
2005-04-10
2005-04-11
------------
    • good
    • 0

はじめまして。



Webサーバ上で処理を流しっぱなしというのは、
Webサーバが想定していないといいますか、
変な処理といいますか、知っている人から見ると
筋が悪い実装方法と思います。

サーバの管理者の立場から見ますと、
そのような処理はぜひ作ってほしくない
という種類のものであると思います。

基本的にはCRONを使えるサーバを利用することが、
根本的な解決策であると思います。

もしも、実用上問題がなければという前提つきですが、
こんな方法もあります。
 1)何でもよいので他のホームページがクリック
  されたついでに処理を行うPHPがついでに
  呼ばれるようにしておく。
 2)前回実行した時間を保持しておき、
  それと比べて、今回が実行すべき時間で
  であれば、実行する。
  (2日たっていたら2回実行する(謎))

おしまい。
    • good
    • 0

まず、ここで質問する前に、借りているサーバの管理者には許可をもらいましたか?



それともう少し知識と経験を付けてから、そのような「負荷のかかる」処理をするプログラムを作ってください。

ブラウザを閉じても大丈夫とか、30秒なら怒られないとか、sleepなら大丈夫っていうのは何が根拠なんだろ。

PHPが遅いか速いかってのも、自分で確かめればわかるよ。
    • good
    • 0

うーん。

どこかの素人サイトで「PHPはCGIより高速で軽いです」なんていってるのを真に受けてる気がします・・・。彼らは何を根拠にこんなこと言ってるんですかね。たいていこれらのサイトでは、その速い・軽い理由は書いてなかったりします。
ちょっとこの質問からはずれてしまいますが、

まず、PHPがCGIより高速なのは、Apacheのモジュール、つまりApacheの機能として動作するためです。
よって、レスポンスが速いだけです。たとえば、ブラウザやアウトルックエクスプレスを起動したとき、数十秒待たされますが、この起動が短縮される。と、いう感じですかね。

今は、mod_perlというモジュールがありますので、これを組み込んだApacheで動作するPerlのCGIは、モジュールとして組み込んであるPHPより数倍速いです。
PHPアクセラレーターというのがありますが、これはコンパイル時間が短くなるだけです。(mod_perlも同じ)

perlと、PHPと、PHP + PHPアクセラレーターで

for($i = 0; $i < 1000000; $i++){ }

というループを処理させると、Perlが1.2~2.0倍速く終了するでしょう。また、PHPとPHP + PHPアクセラレーターは、ほとんど差がみられないでしょう。コンパイル時間のコンマうん秒速い程度かな。
単純な速度比較をやればわかりますが、PHPは遅いです。

メモリについてですが、PHPがどうやって動作するかわからないと、私がここでいくら説明してもわからないでしょう。
PHPが変数の宣言がいらないのはなぜか、変数に文字列を入れることが出来るのはなぜか。
PHPの上級者でも、よくわかっていない人が多いのでなかなか難しいでしょうが、とにかく他の言語と比較して遅くてメモリも喰う。と、理解してかまわないと思いますよ。
これは、JAVAをはじめPHPも、ネイティブコードにコンパイルできないのが理由になりますが、とある処理をC言語で作られたアプリと、JAVAで作られたアプリで比較したら、Cが0.15MBだったのに対して、JAVAは8MBのメモリを消費していました。


>レンタルサーバでcronが使えず、サーバ言語はPHPしか使えないという環境です。

なるほど。
やってみればわかりますが、御希望の処理は出来ません。それは以下の理由によります。

1つ目、PHPがでフォルトで処理する時間が決まっている。
2つ目、ブラウザを閉じた場合どうなるんでしょうかねぇ。PHP側である程度コントロールできますが、ApacheといったWebサーバが動作しているPHPを殺してしまうかもしれません。
3つ目、レンタルサーバ屋さんか、同じサーバを借りている人に怒られます。(たぶん、レンタルサーバ屋さんがすぐに気づいて、終了させられるでしょう)


もし、どうしてもやりたいというのであれば、Windowsで定期的にPHPプログラムにアクセスするようなアプリを用意するのが確実でしょうね。ただし、この場合はWindowsが起動しているときしか実行はされませんが。
私の場合は、1日の大半が起動しているので問題ありませんが、そうでなければある程度妥協しないと難しいです。

それより、cron 使えるレンタルサーバを探す方が確実かな。
    • good
    • 0
この回答へのお礼

実際、sleep(60)をやったら30秒でエラーが返されました。
設定で30秒というのを延長できるようですが、その30秒は無限ループの失敗を止めてくれたりするものだとおもうので、それは変更したくないので、30秒以上のsleepは無理のようでした。
30秒ごとに自分を実行して今の自分を終了することを繰り返し、1日たてば日バッチを実行というのならできそうでした。

ブラウザを閉じた場合も大丈夫だと思います。
起動はHTMLのアンカーからでもそのphpを呼び出せば、HTMLを閉じてもphpは処理が完了するまでは動いていると思います。

30秒ごとのsleepなら怒られないと思います。
ただ、30秒に相当するwhile(1)だと怒られますが、sleepはたぶん大丈夫なんですよね?

モジュールとして組み込んだCGIはPHPを凌ぐ速度が出るというサイトを見た記憶がよみがえりりましたが、モジュールというのが分からないので、それだとphpの方が速いということでいいんですよね?

お礼日時:2005/04/07 16:15

Windowsであれば、タスクスケジュールで行うのはどうでしょうか?

    • good
    • 0

こんにちは。



どんなことをどんな環境でやりたいのかわからないので何とも言えませんが、まず、毎日1回実行したいのであれば、どちらにしろループが必要ですよね。
確認したわけではありませんが、sleep の方が軽いでしょうが、時間がずれるって事はあるようです。

それと、大事なことがいくつかあります。

PHPはこういった処理をさせるような言語ではないと思いますが・・・。
デフォルトではおそらくPHPは30秒しか動作しない設定になっています。

もしやるならより高速でメモリも食わないC言語や、Perl言語を使うべきだと思うのですが。
C言語やPerlはそういった使い方も想定してある言語でしょうし。

参考に、単純にWhileを使った場合、他の言語の速度がPHPに対してどれだけ高速か試してみたところ、
C言語・JAVAが100倍。Perlが2倍ほどの速度になりました。

それと、必ずコマンドラインでそのPHPプログラムを起動させてください。
ブラウザ等で、
http://aaaaa.bb.cc/every_day.php
と、アクセスし永久ループが発動するというやり方はWebサーバを巻き込みますので、サーバがこける可能性もあります。
コマンドラインで、(※環境によって違います)

$ /usr/bin/php /home/http/html/every_day.php &

みたいな感じですかね。

なんか質問からみるとレンタルサーバと言った他人のサーバ上で実行させたい。みたいな気がしますがどうでしょうか。(じゃなきゃcronやWindowsだったらそういったソフトを使いますよね)
もし、他人のサーバを借りて、そこでこうしたループをやりたい場合は・・・・。
うーん。やらないでください。(^ ^ ;ゞ

あくまでこうしたことをやりたい場合は、高いお金を払って自分専用のサーバを借り+管理してもらった状況か、自分でサーバを立ててる状況だけだと思いますよ。
    • good
    • 0
この回答へのお礼

PerlよりPHPの方が高速でメモリも食わないものなんじゃないでしょうか。

レンタルサーバでcronが使えず、サーバ言語はPHPしか使えないという環境です。

お礼日時:2005/04/06 17:03

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QCPUのスペック比較

外付けのDVDドライブを買おうと思います。 対応パソコンのCPU:Intel PentiumIV 2.4GHz以上とあります。 自宅のパソコンは、Intel Core(TM)2 CPU U7600 @1.20GHz ですが、スペックを満たしているでしょうか。

Aベストアンサー

 Intel PentiumIV 2.4GHzとIntel Core(TM)2 CPU U7600 @1.20GHz の違いですが、クロックだけを見るとIntel Core(TM)2 CPU U7600 @1.20GHz が半分の性能しか無いように感じますが、CoreシリーズのCPUはクロックレートの計算方法が違い、PentiumIVとはキャッシュ容量の違いやパイプライン処理の違いを加えると2倍程度の性能差があるようです。

 従って、Intel Core(TM)2 CPU U7600 @1.20GHzでも、十分な性能があると判断して良いでしょう。

参考URL:http://ja.wikipedia.org/wiki/Intel_Core_2

Qcronでphpを実行できない

cronでphpを一部実行できない状態です

試しにメール送信処理のphpを作りcronで実行しまして送信できました
しかし、mysqlで情報を取得しそれをメール送信するphpをcronするとNGです。
上記phpはブラウザからは問題なく処理できます

実行権限などでしょうか?
詳細な解決策を知っている人は教えていただきたいです

Aベストアンサー

ああ、ごめんなさい、PHPはCLIで処理しているのですね

実行ユーザーのパーミッションの問題ならsudoで解決してみてください
また実行するファイルはすべてフルパスで記載してください

QPCゲームのCPUスペック比較

PentiumIII/1GHz以上必須のゲームをCeleron D(2.53GHz)でできるんでしょうか?ちなみにメモリは問題ありません。

Aベストアンサー

同クロックのPentiumとCeleronではPentiumの方が早いですが、絶対とは言い切れませんが、これだけクロックに差があるので、Celeronでも問題ないと思います。

QCRON でPHPスクリプトをGET変数付きで実行したい

CRONで下記のようにPHPスクリプトをGET値(hoge=1)を付加して実行したいのですがうまくできません。
*/1 * * * * php path/myscript.php?hoge=1

CRONでPHPスクリプトを実行する場合、GET変数は使えないのでしょうか?
ご教授お願いいたします。

Aベストアンサー

普通に考えれば引数($argv)で受け取ればいいような気がするんですが…。
何かそれが出来ない問題があるんでしょうか。

PHPをコマンドラインで使用できないのであれば、No.1さんの言うように、wgetでhttp://~で叩けば実現できます。

QCPUのスペック

PCのゲームを買おうと思っているのですが、
今使ってるCPUのスペックが、推奨スペックより上回ってるか、下回ってるかわかりません><

今使ってるCPU:AMD Athlon XP 2600+ GHz
CPUの必要スペック:Pentium4 1.2Ghz以上
CPUの推奨スペック:Pentium4 1.5Ghz以上

このCPUスペックで大丈夫ですか?
教えてください、お願いします。

Aベストアンサー

Pentium4は非常にクロック当たりの性能が低いです。
PentiumIIIの時代までIntel・AMD共にクロックとクロック当たりの性能をバランスよくあげていました。
それが、クロック当たりの性能が非常に低い代わりにクロックを引き上げやすい構造のPentium4をIntelが投入しました。
当時のユーザーはクロックの高さこそ性能の高さと勘違いしている人が非常に多く、性能では劣っていないがクロックがPentium4に比べ低い当時のAMDはの主力のAthlonは性能的に大幅に劣ると誤認された関係で、後継のAthlonXPからモデルナンバーを導入しました。
これがAMDのモデルナンバー導入の経緯です。
最初のPentium4であるPentium4 1.5GHzが発売されたときにAMDの最上位のAthlonが1.2GHzであったにもかかわらず、それに比べ性能で劣っていたことが露見し、ある程度以上知識のある人の中で騒ぎになったくらいです。
その後、Intelは急遽Pentium4はPentiumIIIよりクロック当たりの性能が20%低いという内容の発表をしたぐらいです。
AthlonXP 2600+の性能は必要スペックの2倍以上です。
推奨スペックと比べてもかなり余裕があります。

Pentium4は非常にクロック当たりの性能が低いです。
PentiumIIIの時代までIntel・AMD共にクロックとクロック当たりの性能をバランスよくあげていました。
それが、クロック当たりの性能が非常に低い代わりにクロックを引き上げやすい構造のPentium4をIntelが投入しました。
当時のユーザーはクロックの高さこそ性能の高さと勘違いしている人が非常に多く、性能では劣っていないがクロックがPentium4に比べ低い当時のAMDはの主力のAthlonは性能的に大幅に劣ると誤認された関係で、後継のAthlonXPからモデルナン...続きを読む

QPHPファイルをcronで実行するには…?

ご質問させてください。

私はさ○らインターネットを使っていて、そこで cron設定をしてあるPHPファイルを実行したいを考えています。(このPHPファイルというのはメール送信のファイルです。)

いろいろなサイトを探し回って設定の方法を調べたら、実行コマンドに

cd /home/○○/www/; ./○○.php もしくは
/usr/local/bin/php -f /home/○○/www/○○.php 

と記述すれば大丈夫ということなのですが、これが全く起動していないようなのです。

そもそも cron ではPHPを起動できないのでしょうか?ご存知の方がいらっしゃいましたらご教授お願いいたします!

Aベストアンサー

私は後者の方法でcron起動しています。(さ○らではありませんが)
なので出来ないことはないはずです。

単に起動しているが処理に失敗しているということはないでしょうか?
エラーが出ている場合、サーバーのログに出力されているかと思います。
また、プログラムの方でログ出力してちゃんと動いているか確認してはどうでしょうか。

QPCのスペックの比較をお願いします

当社でいわゆる電子黒板を導入する事になりました。
大きさは70インチで、制御用のPCには電子黒板の制御ソフトを導入します。PCとはDVI-Dで接続します。
業者からはCore i7の以下スペックのPCの提供を求められましたが、在庫PCのCore i5でも性能的に賄えればと考え、在庫PCのスペックを業者に問い合わせましたが、よくわからないとの事でした。
業者はi7-3520Mの"M"の意味がわからないうえ、HD Graphics 4000のグラフィックボードを別途積んでくださいとのこと…。
DVI-Dは本体内蔵で賄えますのでボードから出力はしないかと…。Core i7ならHD Graphics 4000も搭載といいますか内蔵といいますか…。

質問です。
1)以下に制御ソフトの動作環境とPCのスペックを記しますので、在庫PCでも賄えそうかご回答・提案願えますでしょうか。
2)純粋にPCを比較した場合、以下の2つのPC(i7-3520M・HD Graphics 4000と、Core i5-3470 3.20GHz・HD Graphics 2500)では、操作感、処理速度、外部出力の応答速度に違いはありますでしょうか。
ウェブでCPU比較表等でコア数やスコアは見ましたが、いまいちわかりませんでした。

■制御ソフト動作環境
CPU:Celeron 1.6GHzまたはAMD Sempron 1.6GHz以上
(Core 2 Duo 2.8GHzまたはAMD Athlon II X2 2.8GHz以上を推奨)
メモリー:2GB以上

■共通
システム:Windows 7 Professional(32bit)
メモリ:4GB
HD:余裕あり
ソフトウェア:電子黒板制御ソフトウェアを導入

■業者提示スペック
CPU:Core i7-3520M
グラフィックボード:HD Graphics 4000
(ノートか小型デスクトップですよね、これは…)

■在庫機スペック
機種:HP 6300 Pro SF
CPU:Core i5-3470 3.20GHz
チップセット:Q75 Expressチップセット
グラフィック:HD Graphics 2500
HPのディスプレイポートから付属アダプタでDVIに変換

当社でいわゆる電子黒板を導入する事になりました。
大きさは70インチで、制御用のPCには電子黒板の制御ソフトを導入します。PCとはDVI-Dで接続します。
業者からはCore i7の以下スペックのPCの提供を求められましたが、在庫PCのCore i5でも性能的に賄えればと考え、在庫PCのスペックを業者に問い合わせましたが、よくわからないとの事でした。
業者はi7-3520Mの"M"の意味がわからないうえ、HD Graphics 4000のグラフィックボードを別途積んでくださいとのこと…。
DVI-Dは本体内蔵で賄えますのでボードから出力は...続きを読む

Aベストアンサー

電子黒板の製品名が判らないとだれも答えられないと思うけど。

http://www.sharp.co.jp/lcd-display/corporate/lineup/l702b/
上記などは、1920X1080ピクセルで表示できればいい。
DVI-D接続には、別売品のインターフェース拡張ボード PN-ZB01が必要ってだけで、i7が必要な訳でない。
CPUなんかセレロンでOK.
http://www.sharp.co.jp/lcd-display/corporate/lineup/l702b/spec.html#hardware

どうも、業者に吹っかけられているような気がしますよ。
上のリンクなんか見せながら、
「本当にi7が必要なのだったら、i5でも使える他社製品にする。何故i7が必要か」
と業者に問い詰めればいかがでしょう?

納得の行く回答があれば購入すればいいし、納得できなければその業者を切るだけですね。

Qcronを使ってPHPからMysqlが実行できない

皆様いつもお世話になります。

現在MAMP環境(PHP+Mysql)でWEBシステム開発の勉強をしています。
一部機能でcronを利用して定時実行したい処理があるのですが、
その処理内にあるDBからデータを取得するプログラムが動かず困っています。

【症状など】
・mysql_connect()の時点で 「No such file or directory」 というエラーが返ってきます。
・上記エラーに対して、mysql.sockの場所の指定をきちんとしてやると解決することがわかり以下のコマンドをターミナルから打ち込みましたが
ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock
特にエラー内容などにも変化はなく状況は変わりません。
・ちなみにcronから実行せず、ブラウザから直接リクエスト実行するときちんと動作します。

以上です。

全く解決する糸口が見つからず本当に困っています。
お詳しいかたどなたかご教授のほどよろしくお願いいたします!

開発環境:
MacOSX 10.8
PHP 5.2
Mysql 5.5.25
google Chrome 29.0.1547.62

皆様いつもお世話になります。

現在MAMP環境(PHP+Mysql)でWEBシステム開発の勉強をしています。
一部機能でcronを利用して定時実行したい処理があるのですが、
その処理内にあるDBからデータを取得するプログラムが動かず困っています。

【症状など】
・mysql_connect()の時点で 「No such file or directory」 というエラーが返ってきます。
・上記エラーに対して、mysql.sockの場所の指定をきちんとしてやると解決することがわかり以下のコマンドをターミナルから打ち込みましたが
ln -s /Applications/MAMP/t...続きを読む

Aベストアンサー

これかな?
http://www.softel.co.jp/blogs/tech/archives/2187

こっちも
http://qiita.com/mpyw/items/b00b72c5c95aac573b71

QCPUの性能比較

CPU Intel Pentium4 3.40GHz のパソコンとeMachines EL1300-E2どちらが性能的に優秀でしょうか?

現在、自作のCPU Intel Pentium4 3.40GHz メモリ1GBのパソコンを使用しています。
最近、このパソコンが調子が悪くなり、安くて同程度のパソコンを探していたのですが、
偶然、安価な eMachines EL1300-E2をみつけました。
CPU AMD Athlon™ 64 2650e プロセッサー (1.60GHz, 512KB L2 キャッシュ, 1066MHz System Bus)
とありますが、CPUだけ比較してP4 3.4GHzとどちらの性能が上でしょうか?

PCの用途は、DVD鑑賞&製作、CDコピー、各Officeソフト、低スペックのオンラインゲームなどです。
現在のPCでは特に不満なく利用できています。

よろしくお願いします。

Aベストアンサー

まあ単純性能で言えばPentium 4の勝ちですね。
ワットパフォーマンスでは大差で逆転(Pentium 4の熱設計上の消費電力値が89~103W、Athlon64 2650eが同15W。)、またPen4側が内蔵グラフィックならグラフィック性能でもEL1300の圧勝です。
総じて消費電力を抑えつつ大差のない使用感を持ってるんじゃないでしょうか。

#しかし1066MHzシステムバスって何だろ? FSBに当たるHyperTransportは1000MHzのDDRで2000MHz相当だし、メモリコントローラはDDR2-667のデュアルチャンネルだし…

まあ、せっかく買い換えるならもっと性能ギャップのあるものを…と言う提案には賛成。少なくともデュアルコアCPU搭載品を狙いましょうよ、世界が変わりますから。

QPHPファイルをCron設定からのみ実行するには?

レンタルサーバーのCron設定についてですが、Hellow World! とメッセージを送るphpファイルをつくり、1時間おきに送信するように設定しました。ただひとつだけ問題がありまして、cronの設定だけで、phpファイルを実行したいのですが、そのphpファイルに直接アクセスしただけでもメール送信が実行されてしまうので、phpファイルをcron設定からの命令だけのみで実行されるようなことは可能でしょうか?

ファイル構成としては

public_html/
+ test.sh  ←mail.phpを実行するためのシェルスクリプト
+ mail.php  ← hello world とメッセージを送信するプログラム

※test.shの中に、php mail.php と書き加えて、レンタルサーバーのCron設定より、
0 */1 * * * /home/testsever/public_html/test.sh と指定して実行しています。
ただ、公開した www.testsever.com/mail.php に直接アクセスしても、プログラムが実行されるので困っています。

レンタルサーバーのCron設定についてですが、Hellow World! とメッセージを送るphpファイルをつくり、1時間おきに送信するように設定しました。ただひとつだけ問題がありまして、cronの設定だけで、phpファイルを実行したいのですが、そのphpファイルに直接アクセスしただけでもメール送信が実行されてしまうので、phpファイルをcron設定からの命令だけのみで実行されるようなことは可能でしょうか?

ファイル構成としては

public_html/
+ test.sh  ←mail.phpを実行するためのシェルスクリプト
...続きを読む

Aベストアンサー

CLIモードでy呼び出すのはやめてwgetなどクローラーから
公開サーバーから呼び出すようにして
mail.php?cron=1
のようにパラメーターまで見るようにすればよいでしょう


人気Q&Aランキング

おすすめ情報