A 回答 (7件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんにちは。
どんなことをどんな環境でやりたいのかわからないので何とも言えませんが、まず、毎日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だったらそういったソフトを使いますよね)
もし、他人のサーバを借りて、そこでこうしたループをやりたい場合は・・・・。
うーん。やらないでください。(^ ^ ;ゞ
あくまでこうしたことをやりたい場合は、高いお金を払って自分専用のサーバを借り+管理してもらった状況か、自分でサーバを立ててる状況だけだと思いますよ。
PerlよりPHPの方が高速でメモリも食わないものなんじゃないでしょうか。
レンタルサーバでcronが使えず、サーバ言語はPHPしか使えないという環境です。
No.3
- 回答日時:
うーん。
どこかの素人サイトで「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 使えるレンタルサーバを探す方が確実かな。
実際、sleep(60)をやったら30秒でエラーが返されました。
設定で30秒というのを延長できるようですが、その30秒は無限ループの失敗を止めてくれたりするものだとおもうので、それは変更したくないので、30秒以上のsleepは無理のようでした。
30秒ごとに自分を実行して今の自分を終了することを繰り返し、1日たてば日バッチを実行というのならできそうでした。
ブラウザを閉じた場合も大丈夫だと思います。
起動はHTMLのアンカーからでもそのphpを呼び出せば、HTMLを閉じてもphpは処理が完了するまでは動いていると思います。
30秒ごとのsleepなら怒られないと思います。
ただ、30秒に相当するwhile(1)だと怒られますが、sleepはたぶん大丈夫なんですよね?
モジュールとして組み込んだCGIはPHPを凌ぐ速度が出るというサイトを見た記憶がよみがえりりましたが、モジュールというのが分からないので、それだとphpの方が速いということでいいんですよね?
No.4
- 回答日時:
まず、ここで質問する前に、借りているサーバの管理者には許可をもらいましたか?
それともう少し知識と経験を付けてから、そのような「負荷のかかる」処理をするプログラムを作ってください。
ブラウザを閉じても大丈夫とか、30秒なら怒られないとか、sleepなら大丈夫っていうのは何が根拠なんだろ。
PHPが遅いか速いかってのも、自分で確かめればわかるよ。
No.5
- 回答日時:
はじめまして。
Webサーバ上で処理を流しっぱなしというのは、
Webサーバが想定していないといいますか、
変な処理といいますか、知っている人から見ると
筋が悪い実装方法と思います。
サーバの管理者の立場から見ますと、
そのような処理はぜひ作ってほしくない
という種類のものであると思います。
基本的にはCRONを使えるサーバを利用することが、
根本的な解決策であると思います。
もしも、実用上問題がなければという前提つきですが、
こんな方法もあります。
1)何でもよいので他のホームページがクリック
されたついでに処理を行うPHPがついでに
呼ばれるようにしておく。
2)前回実行した時間を保持しておき、
それと比べて、今回が実行すべき時間で
であれば、実行する。
(2日たっていたら2回実行する(謎))
おしまい。
No.6
- 回答日時:
質問とはかけ離れていますが…
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
------------
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) uwscとWinShotを使いスクリーンショットを撮る 1 2022/06/30 21:15
- 電気・ガス・水道業 電気契約について 1 2023/03/14 13:45
- その他(ヘルスケア・フィットネス) 24歳、174cm、60kgの男です。 ジムに通っているのですが、 エアロバイクを使う際、負荷はどれ 3 2022/06/10 15:17
- 物理学 ACモーターは、無負荷時より、負荷時のほうが、電流値は上がるのでしょうか? 3 2022/11/30 17:15
- MySQL データベースの検索で、この場合、どの程度負荷になりますか? 3 2022/04/11 04:45
- Visual Basic(VBA) vba Sleep関数について教えてください 1 2023/01/18 10:18
- 電気工事士 考え方良いかお手数ですが教えて下さい 負荷が12KVAの単相200V使用しています。負荷迄33mあり 8 2022/08/24 21:40
- 筋トレ・加圧トレーニング ed改善のためにスクワットをしようと思うのですが高負荷のバーベルスクワットを週に2回とかやるのと、軽 2 2023/02/20 12:09
- その他(ヘルスケア・フィットネス) スポーツジム 行う間隔? それとも負荷軽く? 3 2022/11/09 16:22
- その他(ヘルスケア・フィットネス) 歩くのと踏み台昇降 1 2022/10/26 23:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
php ob_flushが全く動作しない
-
読み込み中に「Now Loading」を...
-
ASP.NET(VB)VBソースからJavas...
-
掲示板の荒らし対策
-
jQueryのAjaxで通信の途中結果...
-
HTMLでDBからデータを表形式で...
-
phpとajaxの比較
-
【JavaScript】confirmのボタン...
-
非同期通信を使うタイミングが...
-
saved from url=(0013)abou
-
チャットを作る
-
Javadcriptでwebサーバー側にあ...
-
Ajaxでpostした内容のresponse...
-
ローカルにあるhtmlをブラウザ...
-
ローカルネットワーク内での502...
-
カーソルの動きに合わせてDBか...
-
JQuery サーバー上にアップする...
-
DirectXとOpenGLはどちらが動作...
-
HTMLでリアルタイムグラフを作...
-
非同期関数とノンブロッキング...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ASP.NET(VB)VBソースからJavas...
-
呼び出し元のURLを知りたいのです
-
ブラウザ閉じたらサーバー処理...
-
読み込み中に「Now Loading」を...
-
PHPでフォームの自動入力できま...
-
PHPでオンライン将棋ゲーム
-
sleepの負荷
-
PHPで一定時間が経過すると処理...
-
PHPのリアルタイム表示について
-
include 再読み込み
-
php ob_flushが全く動作しない
-
ブラウザを閉じた瞬間にログアウト
-
jQueryのAjaxで通信の途中結果...
-
PHPにコネクションプールってあ...
-
PHPで タイピング練習サイトを...
-
JSTLを利用してJavascriptの結...
-
cakephp2とsmartyの表示が遅い
-
処理中インジケータの表示
-
PHPでpostされた値をクライアン...
-
PHP内でJavaScriptの処理は可能?
おすすめ情報