• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:現在、レンタルサーバ(コアサーバー)上でPHP5とmysqlでサイトへ)

タイムアウト問題によるサーバー処理の困難

yuuki0229の回答

  • yuuki0229
  • ベストアンサー率70% (33/47)
回答No.3

Apache側のタイムアウト設定に依存してそうです。 Web上でやる場合、 exec("/usr/bin/php heavy_script.php > /dev/null 2>&1 &"); のようにバックグラウンドでスクリプトを実行すればひとまずApacheのタイムアウトは気にしなくてよくなります。 そして1日1回実行とのことですが手動でしょうか? Cronから1日1回、PHPを実行すれば元々Apache関係なく処理できます。 ループのアルゴリズムに無駄があるかどうかは挙げられたコードでは判断できませんでした。

watchout
質問者

お礼

ご回答有難うございます。 exec関数について、使ったことがないので調べてみましたが、使い方が今ひとつ掴めません。 重い処理のスクリプト(c_batch.php)を、同じ階層に作成したexec.phpを頂いたご回答を元に下記のように記載し、exec.phpへブラウザからアクセスしたのですが、処理がされていない様です。。 ↓exec.php <?php echo exec("/usr/bin/php ".dirname(__FILE__)."c_batch.php > /dev/null 2>&1 &"); ?> 勉強不足の為、ご回答頂いた内容と全く違うことをしているかもしれません。 その際は申し訳ありません。 また、cornから…という処理方法が本来行いたい方法でした。 しかし、$iの処理回数が74回あるうち、58回終了後、処理がとまってしまってしまい、処理が中途半端で終わってしまってしまうのです。。 Apachのタイムアウトが関係ないとなると、他の原因はどのようなことが考えられますでしょうか? できれば、cornにて午前4時頃に自動で処理を完了させてしまいたいので、重ねてのご質問になってしまい申し訳ありませんが、お力をお貸し頂ければと思います。 exec関数に関しては、理解が浅い状況ですので、引き続き理解を深めるよう勉強していきたいと思っております。 アドバイス有難うございました。

関連するQ&A

  • PHPとMySQLで100万件のデータを登録

    PHPとMySQLで100万件のデータを登録する方法に困っております。 1.PHPで100万回ループして数字をランダムで取得し一意の数字を配列に格納。 ⇒データ量が多すぎてタイムアウトしてしまいます。いい方法はありますか? while($i<1000000){ $h = sprintf("%07d",mt_rand(1,1000000)); if(!array_search($h,$val)){      array_push($val,$h);      $i++; } } 2.またデータベースはMySQLを使用しようかと考えていますが、一気に登録する方法など効率のいいやり方はありますでしょうか?

    • ベストアンサー
    • PHP
  • PHPのループ数限界値について

    PHPのループ数限界値について 宜しくお願い致します。PHP 5.1.6を使用しております。 PHPのforやwhileのループ処理について、限界のループ数というのは存在するのでしょうか? 今作っているプログラムで、約15,000項目の配列と約10,000項目の配列で2重のループ処理しています。 この場合のループ数は15,000×10,000=150,000,000回の繰り返し回数となってしまいます。 しかも、この配列数は今後も増える可能性が高いです。 ループの限界値が何回なのか、教えてください。

    • ベストアンサー
    • PHP
  • 学校の授業で困っていることがあります。PHP+MySQLでショッピング

    学校の授業で困っていることがあります。PHP+MySQLでショッピングサイトを構築しているのですが、カートの在庫処理の部分で疑問が発生しました。 私たちのショッピングサイトは、カートに商品を追加した時点で、DBの在庫テーブルの販売数を増やし、在庫数に即時に反映させたいと考えています。 しかし、ブラウザを閉じた時やセッションタイムアウト時、ログアウト時に確定していないカートの商品については販売数を元に戻したいのです。 ログアウト時は明示的に行えると思うのですが、セッションタイムアウト時、ブラウザを閉じた時の処理はどのようにすればいいのですか? そのようなイベントを取得するメソッドや方法はないのでしょうか? 参考サイトや方法を教えてください!

    • ベストアンサー
    • PHP
  • リクエストの待ち時間が期待通りになりません。

    リクエストの待ち時間が期待通りになりません。 5秒以内にリクエストが行われた場合は、ループとスリープで待たせて、ログに記録されているタイムから5秒以上経過した時点で、新たにログにタイムを記録させたいと思っています。 複数人で同時アクセスもありますので、ループ内で常に最新のファイルを読み込む必要がある?ので、 以下のように書いてみましたが、5秒以内にリクエストした場合、通常は1秒待てば処理が終わるはずなのですが、ループが途中で終わらずに20秒待たされ、$flag==0のまま終わります。 適当な知識しかなくて恥ずかしいですが、どこか間違えている場所があればご指摘くださると幸いです。 my $logfile = "request.dat"; my $time = time; my $i = 0; my $flag=0; while ($i < 20) { $i++; open(IN, "< $logfile"); my ($request_time) = <IN>; close (IN); if($time < $request_time+5) { sleep(1); } else { $flag=1; last; } } if($flag==0){&error;} else { open(OUT,">$logfile"); print OUT $time; close(OUT); }

    • ベストアンサー
    • Perl
  • PHP プログラム ループ処理

    プログラム初心者です、ループ処理についてうまい解決方法が思い浮かばず相談させて頂きます。 ループ処理において、ループ内で変数を定義するのに違う名前を指定するにはどのような方法があるのでしょうか 例えばwhileの場合 $i =0; while($i<10){ $hoge = $i; $i++ } この$hogeを2順目には$hoge1、3順目には$hoge2と言うように増やしたり一定の法則に乗っ取って変数名を変更するにはどのように書けばいいのでしょうか。 どなたかご教授頂ければと存じます、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 3件目以降出力されないので4件目から出力したい

    <!--ループ1--> <?php $wp_query = new WP_Query(); $args = array( 'post_type' => "post", //投稿タイプ設定 ); $wp_query->query($my_posts); if ($wp_query->have_posts()) : $i = 0; $i <= 10; while ($wp_query->have_posts()) : $wp_query->the_post(); ?> <?php /**** ▼1件分の投稿内容HTML ****/ ?> <?php $i++; ?> <?php if ($i >= 3) break; ?> <?php endwhile; ?> <?php endif; ?> <!--//ループ1--> <!--ループ2--> <?php $wp_query = new WP_Query(); $args = array( 'post_type' => "post", //投稿タイプ設定 ); $wp_query->query($my_posts); if ($wp_query->have_posts()) : while ($wp_query->have_posts()) : $i<=4; //iが4より小さい時は、while内のループ処理を実施する $i>3;break; //iが3より大きい時は、while文を・強制終了する $wp_query->the_post(); ?> <?php /**** ▼1件分の投稿内容HTML ****/ ?> <?php $i++; ?> <?php endwhile; ?> <?php endif; ?> <!--//ループ2--> 変数 i の値が 0 から → $i = 0 10 未満の間は、 → $i <= 10 i の値を1づつ加算しながら → i++ 以下の命令文を実行する。 continue; echo $i; //以降の処理をスキップして、次のループ処理を行う。 0から3まででbreakして, $i<=4; //iが4より小さい時は、while内のループ処理を実施する $i>3;break; //iが3より大きい時は、while文を強制終了する 3件で出力を止めたんですが、4件目から出力されません

    • ベストアンサー
    • PHP
  • do~while文がよくわかりません

    今参考書で勉強しているのですが、do~while文がよくわかりません 。コードは下記のようになります。どうして前の処理結果が足されていくのか理解できません。こんな馬鹿にどうかわかりやすくご教授していただけないでしょうか!? <?php $s = $i = 0; do{ ++$i; $s += $i; }while($i < 10); print "1 から $i までの和は $s"; ?>

    • ベストアンサー
    • PHP
  • PHPコーディング 訓練が出来る媒体

    最近、PHPプログラミングの教室に通っています。 今までプログラム言語を習ったkとがないので、簡単なプログラムを ブラウザに表示させるのも、まったく訳が分かりません。 特に今やっている、ループ処理(for, while)が理解できません。 授業は、「~をfor/while文を使って画面に表示させなさい」のような 感じです。 変数が2個出てくる時点で、脳みそグチャグチャです。 練習するしかないと思いますが、初心者のループ処理を詳しく書かれていて、 レベルアップにつながる練習問題が記載されている書籍、またはwebを教えてください。

    • ベストアンサー
    • PHP
  • C言語/プログラミング

    1 1 2 2 3 3 このように同じ数字になったら同じ処理をループさせる方法(do whileを使って)を教えてください。

  • whileで最後のループを判別するには?

    環境:php5 Q. DBから取得した値をwhileでループさせたとき、最後のループを取得するにはどうしたらいいのでしょうか? 現状ではループさせる数を最初に取得して、whileさせているときに$i++でカウントさせながら、合計の数とイコールになったときに最後と判断させていますが、もっとスマートに記述する方法などはあるのでしょうか? smartyだとlastで取得できるみたいですけど。 ご教授いただけると幸いです。

    • 締切済み
    • PHP