• ベストアンサー

PHPのバックグラウンド処理でタイムエラー?

PHPで定期的にサイトの更新を把握するため、fopenで呼び出すプログラムを作っています。 SYSTEM関数でバックグラウンド処理を行っているのですが1時間くらいするといつのまにか処理がストップしてファイルへの出力がとまってしまいます、タイムエラーにしては毎回停止する時間が違うので他の原因のような気がするのですが・・・ なにが原因かわかる方いませんでしょうか?回答よろしくお願いします。

  • enshi
  • お礼率68% (43/63)
  • PHP
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • racci
  • ベストアンサー率64% (9/14)
回答No.1

恐らくタイムアウトしているのだと思います。 スクリプトの最初に set_time_limit(0) と書いてもダメですか? set_time_limitはスクリプトのタイムアウト時間を規定する関数です。 >タイムエラーにしては毎回停止する時間が違うので タイムアウト時間には、fopenなどのストリーム処理やDB処理などで発生する待ち時間などは含まれません。純粋なPHP内部処理時間のみをカウントし、それが所定の時間に達したところで処理が中断されます。そのため、毎回停止する時間は一定しません。

関連するQ&A

  • PHPでバックグランド処理

    PHPでバックグラウンド処理をSYSTEM関数で行っていたのですがサーバーの変更をしてからSYSTEM関数が動作しなくなってしまいました(´;ω;`) なのでSYSTEM関数以外でバックグラウンド処理はできないでしょうか?よろしくお願いします(m。_。)m ↓旧サーバーで使用していた奴です system("/usr//bin/php /home/member/ユーザーID/public_html/melmaga.php");

    • 締切済み
    • PHP
  • PHP バックグラウンド処理

    apache1.3系+PHPで大量のメール送信プログラムを作成していますが、ある動きで困っております。 特定のフォームにて件名と本文を入力し、submitすることでsystem関数を利用して別のプログラムをバックグラウンドで動かそうとしてますが、メール送信前にコメントを表示したいのです。 しかし、表示をする前に後に記述しているsystem関数が読み込まれるようで、system関数の処理が終わると、そのコメントが表示されるようになってしまってます。 例) // ここでコメントを表示 print<<<HTML <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>WEBMAIL</title> </head> 送信を受付ました </body> </html> HTML; // メール送信プログラムをバックグラウンドで system("/usr/local/bin/php webmail2.php $subject $address $data & "); 実際に100件程のアドレスに向けて送信しましたが、送信処理は正常に動作しているようですがバックグラウンドで動いている気配がありません。 また、system関数の処理の前にコメントを表示したいのですが、実際に表示されるのは配送処理が終わってからとなっています。 system("/usr/local/bin/php webmail2.php $subject $address $data >/dev/null & "); ↑ これですと変数が受け渡しされませんでした。 先にコメントを表示するにはどうしたらいいのでしょうか?

    • ベストアンサー
    • PHP
  • PHPバックグランド処理について

    初めて、質問させて頂きます。 コミュニティーサイトを運営しているのですが、登録メンバーが増えてきてメール送信の処理に時間がかかるようになってきました。 現在は、MYSQLのDBから 条件に会った人のアドレスを検出させて whileのループでmail関数で送信しています。 $result=mysql_query("**************"); while($value = mysql_fetch_array($result)){ $MAIL=$value["MAIL"]; mail($MAIL,$sbj,$msg,$header,"-fmail@mail.com"); } バックグラウンドで処理させる方法をインターネットで調べていたら 下記のURLにたどりつきました。 http://www.itboost.co.jp/phptips/view.php?fCID=21 呼び出しプログラムを mail.php 送信プログラムを send.php とし、mail.phpから ある条件下で send.phpを実行させるために system("send.php $1 $2 $3 $4 $5 > index.php &"); という感じにしてみましたが、うまくいきません。 パスの問題なのでしょうか?それとも根本的に間違っているのでしょうか? 解決策や、他の方法があれば教えてください。 お願いします。 環境:レンタルサーバ OS Redhat Linux Server Apache DB MYSQL PHP4.12 qmailは入っていません。

    • ベストアンサー
    • PHP
  • PHPでバックグランド処理について

    PHPでバックグランドで処理させたいと考えています。 300通前後のメールを一括送信するために、この送信処理をバックグランドで処理させたいと考えています。 色々調べて、 system()関数とexec関数を知りました。 しかし、動きが上手くいきません。解決策や糸口をご教授頂けないでしょうか? メールを送るファイル: back.php フロントで実行するファイル:mai.php で下記の様に書きました。 back.php <?php require_once('Mail.php'); $params = array( "host" => "smtp.gmail.com", "port" => 587, "auth" => true, "username" => "****@gmail.com", "password" => "****" ); $mailObj = Mail::factory("smtp",$params); mb_language('ja'); mb_internal_encoding('utf-8'); $rec ='**_com2@yahoo.co.jp'; $header = array( "To"=>$rec, "From"=>"admin@**-terakoya.jp", "Subject"=>mb_encode_mimeheader('これは件名') ); $com = 'メール本文'; $com = mb_convert_encoding($com,"UTF-8","auto"); $mes =$mailObj -> send($rec,$header,$com); if(PEAR::isError($mes)){ echo '<pre>'; var_dump($mes->getMessage()); echo '</pre>'; } ?> 実行するファイル mail.php var_dump(system("php www/htdocs/ac/back.php > /dev/null &")); です。 パスの指定方法が問題なのかもしれないと思い色々試してみましたが最終的には無理でした。 ちなみに、本番サーバーの環境とXampp環境では何か違う方法が必要なのでしょうか? 上記例は、本番サーバーで記述した物です。 どうぞご教授お願いします。

    • ベストアンサー
    • PHP
  • バックグラウンド処理について

    環境:CentOS5 php 5.1.6 (cli) safe_mode off メールをバックグランド処理するため、system関数を用いています。 以下のように記述し、 system("/usr/bin/php -f /フルパス/sendjob.php > /dev/null &"); sendjob.phpには ------------------ sleep(10); 自分宛メール送信 ------------------ としております。 メールは問題なく届くのですが、非同期になっておらず困っております。 sleep(10)ブラウザで固まってから、画面遷移し送信メールが届きます。 どこを確認すればよろしいでしょうか? ご教授頂けますようよろしくお願い致します。

    • ベストアンサー
    • PHP
  • php include内のエラー処理

    あるphpのプログラムの中で、 「include('a.php');」 などというような形で「a.php」を実行させる場合に、 a.phpに構文エラーがあると、 全体の処理が停止してしまうと思います。 このような場合に、元プログラムを止めずに、 元プログラムの側で「a.php」内に構文エラーがあった事を把握し、 適当なエラー処理をすることは可能でしょうか? (例えば、本体プログラム側で 「a.phpにエラーがあるので動かせませんでした」 と表示させる) イメージとしては 「a.php」は、プラグイン的な位置づけで、状況により、 「b.php」「c.php」など様々なソースを読み込ませることを想定しています。 プラグインにエラーがあるせいで、 本体プログラムまで停止してしまうのを防ぎたいというのが趣旨です。

    • ベストアンサー
    • PHP
  • PHPが処理を途中でやめる。原因を知りたい。

    PHPが処理を途中でやめるのですが、原因が分からないので教えてください。 Chromeで実行すると15秒ほど実行した後に101エラーが出ます。 なお、max_execution_timeは1800に設定してあります。 ブラウザを変えてやってみましたが、結果は同じような感じでした。 IEでは、「Internet Explorer ではこのページは表示できません」と出て、 Operaでは「接続はリモートサーバーから切断されました」と出ます。 コマンドプロンプトから実行しても同じように15秒ほど処理した後に、「CLIは動作を停止しました」と出ます。 いずれも、まったく処理していないわけではなく、停止するまでの15秒ほどは処理を進めてくれているようです。 原因分かりますでしょうか? XAMPP: 1.7.7 PHP: 5.3.8 Windows7(64bit) localhost上で実行しています。

    • ベストアンサー
    • PHP
  • Java Servletでのバックグラウンド処理

    eclipseを利用してjavaのServletシステムの開発を行っております。 昨日納品したプログラム内で、エクセル出力処理があるのですが 一度に生成されるファイル数が多いため、実行側のブラウザでタイムアウトエラーが発生してしまいます (エクセル自体はサーバー側の所定の場所に正常に生成されている) そこで、エクセル出力処理をバックグラウンドで実行させ、ブラウザ側でタイムアウトとならないようにするという方針になりました いろいろWeb上の情報を調べてみましたが、解決には到っておりません 解決策をご存知の方、おりましたらお教えいただけたらと思います よろしくお願い致します

  • PHPからの処理結果の逐次出力をしたいのですが

    PHPとAjaxを連携させたスクリプトを作りたいのですが、アドバイス頂けないでしょうか? 自分は、formからsubmitしたあと、PHPで処理をし、その処理結果をAjaxにて逐次出力したいと思っています。 例えば、 「処理を始めました」、「現在処理プロセス1を実行中です」、「全ての処理が終わりました」 のようなものを出力したいです。 リダイレクトにて、処理終了後一気に出力は出来ますが、自分は現在のプロセスの状況を逐次出力させて把握したいと考えております。 このような場合のAjaxの書き方が分からないのでアドバイス頂ければと思うのですが。 宜しくお願い致します。

  • PHPで処理の時間を操作する方法

    PHPで処理の時間を操作する方法 はありますか? 例えば、 fopenで外部サーバを読み込む時に時間が10秒以上掛かった場合は処理中止! 等という動作は可能ですか? よろしくお願い致します。

    • ベストアンサー
    • PHP