PHPの処理が途中で停止する原因と解決法

このQ&Aのポイント
  • PHPの処理が途中で停止する問題について解説します。
  • Chromeでの実行時に101エラーが発生し、IEやOperaでも問題が発生しています。
  • 処理が停止するまで15秒ほどは処理を進めているようですが、具体的な原因は不明です。
回答を見る
  • ベストアンサー

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
  • 回答数9
  • ありがとう数9

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

  • ベストアンサー
  • tracer
  • ベストアンサー率41% (255/621)
回答No.10

おおまかに原因を推測するなら、 ・ネットワークに問題がある ・サーバーの設定に問題がある ・PHPのソースに問題がある(DB接続含め) のいずれかでしょう。 提示された情報では、すべての可能性を疑う必要があり、回答のしようがありません。誰も闇雲に回答なんてしたくないはずです。 また、たとえば、 <?php print 123 ?> という単純な内容で、同様のエラーが出ないのであれば、直接ではないとしても、phpの内容が関与しているのは確実です。phpに問題はないと断言するのは早計です。逆に、上記の単純なコードで同様のエラーが出るのであれば、phpとの因果関係は薄くなりますね。phpが原因の可能性を排除するなら、最低限その程度の情報は必要です。 技術的に詳しいことが分からなくても、「たとえばDBとの接続をしない場合はどうだろうか」などの試行錯誤は誰でもできます。原因を探るには、phpのどの部分に問題があるのか、あるいは関与しているかを特定する必要があるわけです。それは我々ではなく、質問者さんにしかできません。

mic_goto
質問者

お礼

ご指摘ありがとうございます。 ご指摘を受け、原因の切り分けのため、私なりに試行錯誤をいたしました。 コードを切り分けて、どの部分を削ったら(あるいは残したら)、同様の現象(ブラウザの接続エラー)が起こらなくなるか(あるいは起こるか)を検証していていきました。 その結果、Simple HTML DOM Parserというライブラリを使って、htmlファイルを取得しているのですが、そのファイルサイズが600メガ前後になるとブラウザの接続エラーがでるようです。 その他のコードはあってもなくても、この現象には関係がありませんでした。 以上から何か分かりますでしょうか?

mic_goto
質問者

補足

質問者です。 自己レスで恐縮ですが、解決しました。 DOMは循環関数なのでclear()を実行して解放しなければならなかったようです。 tracer様のご指摘の通り、まずは自分で原因の切り分けを行い、その情報を提供したうえで質問すべきでした。 申し訳ありませんでした。 また、ご指摘ありがとうございました。 ご指摘をもとに原因を切り分けて調べることにより解決に行きつきました。

その他の回答 (8)

  • iioi
  • ベストアンサー率26% (22/84)
回答No.9

>データベースに格納する処理をさせているので、どこまで処理されているかは、どこまで格納されているかを見れば確認できるようになっております。 それDBの処理としては間違っている。 処理の途中でエラーが出たら例外処理させてトランザクションをロールバックさせないと データの整合性がとれなくなるぞ。

mic_goto
質問者

お礼

こちらについても、ありがとうございます。 ご指摘をもとに構成を見直してみます。

  • iioi
  • ベストアンサー率26% (22/84)
回答No.8

>デバッグについても初心者にもとっつきやすいやり方があればご教示ください。 xdebugの何処が難しい? 俺、PHP初心者の頃からxdebug愛用しているけど別に難しいなんて思ったことはない。 むしろ超便利だと思って使い続けている。 xdebug使えば ・エラーもわかりやすく整形してくるし ・var_dump()すれば変数の中身をわかりやすく整形してくれるし ・ブレークポイントやステップ実行してデバッグそのものはやりやすいし ・プロファイリングで処理の最適化できてないところを洗い出せるし 超便利。 ですべてPHP初心者の頃から普通に使い続けている。

mic_goto
質問者

お礼

返信ありがとうございます。 Xdebugについては、以前プロファイリングをしたくてインストールし、WinCacheGrindで結果を見ようとしたのですが、このWinCacheGrindの見方がよくわかりませんでした。 その後、Eclipseでデバッグしてみようと、Pleiadesをインストールしたのですが、ヘルプが英語で、使いこなすのが難しそうだと放置してしまいました。

回答No.7

エラーコード吐かないエラーって 時間切れにしろ容量オーバーにしろ 大概無限ループが原因 whileとかforとかで無限ループに陥る要因がないか見てみるといいかも phpではなかったけどよくやらかしたのが 反復処理で表の行を増減したときの参照のズレが原因の無限ループ 『次の行の値が~なら一つ前の処理をやりなおす』 みたいな処理をしてるとやらかしたりします 表とか配列の増減を伴う処理をしてるなら 参照のズレをちゃんと処理できてるかを注意して見直すといいかと思います

mic_goto
質問者

お礼

アドバイスありがとうございます。 無限ループの可能性を疑いじっくり見直してみましたが、今回の原因は無限ループではないようでした。 ですが、可能性をひとつ潰せたという意味で一歩前進ですし、勉強にもなりました。 ありがとうございます。

  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.5

>1.エラーが出ない。 エラーが出ない=コードに問題がない ではありません。 例えばかけ算をするプログラムで、間違って足し算をしていてもエラーにはなりませんよ。

mic_goto
質問者

お礼

ご回答ありがとうございます。 なるほど。勉強になりました。

回答No.4

PHPのコードの要所要所でファイルに出力するようにすれば、原因究明できます。 以下の関数を追加し、testLog("1通過")等で処理されているかを確認します。 function testLog($str){ $fp=fopen("test.log","a"); fwrite($fp,$str); fclose($fp); }

mic_goto
質問者

お礼

ご回答ありがとうございます。 説明不足で恐縮ですが、データベースに格納する処理をさせているので、どこまで処理されているかは、どこまで格納されているかを見れば確認できるようになっております。 tracer様の回答へのお礼欄に書いたのですが、例えば3まで処理して止まったから4に原因があるのかと思えばそうではなく、次に4から処理を始めると7まで処理できるといった感じです。 ですので、止まったところに原因があるというよりも、一回当たりの処理時間だとか重さだとかにに上限があるのかなぁと考えております。 しかしながら、質問欄記載の通り、max_execution_timeは1800に設定してあり、処理は15秒ほどで止まってしまうので、よくわからなくなって質問させていただいた次第です。

  • tracer
  • ベストアンサー率41% (255/621)
回答No.3

phpに原因があると思われているのであれば、phpの内容を提示しないと何とも回答のしようがありませんね。

mic_goto
質問者

お礼

ご回答ありがとうございます。 phpの内容とはコードのことでしょうか? 私としては、PHPのコードには原因がないと思っております。 その理由について、説明を欠いており大変失礼いたしました。 以下がその理由です。 1.エラーが出ない。 2.途中で止まるが、少しずつなら進む。 ⇒例えれば、コードが1~100あるとして、まず3まで処理してとまって、次に4から処理させると7まで処理して止まってという感じ。 なお、素人考えなので伏せていたのですが、php.iniに原因があるのかなぁと考えておりました。 ですので、質問欄のような挙動を示せば「そういう挙動するなら、原因これかもねー」とか、「php.iniの設定、こう変えてみて」とか、「php.infoのこの部分どうなってるか見せてみ」という感じのお話を頂けるかも考えておりました。 (浅い考えでした。申し訳ございません。) 他に必要な情報があれば何なりとお申し付けください。

  • OKWavex
  • ベストアンサー率22% (1222/5383)
回答No.2

原因は処理が間違っているからです

mic_goto
質問者

お礼

ご回答ありがとうございます。 処理が間違っているとは、どういう意味でしょうか? コードにエラーがあるはずという意味でしょうか?

  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.1

PHPがわかるわけではないですが、それだけの情報(原因を特定できるような情報は一切ない)で原因がわかる人はいないです。 「車が動かないんですが、動かない原因はわかりますか?」で原因わかると思いますか?

mic_goto
質問者

お礼

ご回答ありがとうございます。 情報に不足があったようで大変申し訳ございませんでした。 お恥ずかしい話ですが、原因の特定につながる情報がどのようなものか分かりかねるため、必要な情報をご教示いただければ、補足させていただきます。 よろしくお願いします。

関連するQ&A

  • PATHは;C:\xampp\phpでOK^^

    http://okwave.jp/qa/q8480862.html の続きですが   PATHは以下で解決しました^^・・と思いますが!?  システムプロパティ⇒詳細設定⇒環境変数⇒システム環境変数⇒Pathの最後に;C:\xampp\php  と入力した。 それで!  コマンドプロンプトを実行した結果が以下です。  c:\>php -v PHP 5.4.19 (cli) (built: Aug 21 2013 01:12:03) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies c:\>cd C:\xampp\htdocs\study.localhost C:\xampp\htdocs\study.localhost>php stringcast.php 100 ・ソnum is 100 C:\xampp\htdocs\study.localhost> 以上、OKでしょうか!?  宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • 処理途中でストップしてしまう

    PHPスクリプト(パズルの答えを検索し、書き出すようなもの)をMAMPで動かしてるんですが何度やっても20~60秒ほどで止まってしまいます。 コンピュータに負荷がかかってもいいのでなんとかして答えが出るまで動かし続けたいのですが、どうすればいいか教えていただけませんでしょうか。 php.iniの設定をいじればいいかと思い、max_execution_timeやmax_input_timeを変えて(30を300にしたりしてみました)みたのですが変化なし。 どうか解決策を教えてください。お願いします。

    • ベストアンサー
    • PHP
  • PHPがLocalhostのフォルダ内で実行できない

    WindowsVista でPHPを使っています。 XAMPPを、D:/Program Files にインストールし、 http://localhost/echo.php は、正常に実行できました。 しかし、この「echo.php」ファイルを、 http://localhost/work/echo.php に移すと、実行できません。 なぜなのでしょうか。 お手数をおかけして申し訳ありません。 教えてください。

    • ベストアンサー
    • PHP
  • PHP環境について

    PHP初心者です。 PHPの環境を作り、Windows環境のローカル端末にて開発をはじめようと思っているのですがApache HTTP Server 2.0.55とXAMPPをインストールし、XAMPPコントロールパネルからApacheのサービスを起動したにもかかわらず、下記内容のPHPファイルを作成してC:\Program Files\xampp\htdocs\info.php に保存してもphpの情報が表示されません(404Error)。 ーーーーーーーーー <?php phpinfo(); ?> ーーーーーーーーー また、XAMPPはhttp://localhost/xampp/index.php のアドレスでWebベースのXAMPPコントロールパネルが表示されるはずですが、表示されません(404Error)。 おそらくPHPが正常に動作していない(起動していない)ような気がするのですが、どのような原因が考えられますでしょうか?? ちなみにhttp://localhost/のアドレスだと「あなたの予想に反して・・・」の表示が確認できます。 また、ApacheがインストールPHP4⇔PHP5の切り替えはできます。 どんなことでも結構なのでご教授願います。

    • ベストアンサー
    • PHP
  • PHPで外部プログラムのバックグラウンド処理(Windows)

    よろしくお願いします。 PHPのバージョン4でWindowsです。 現在***.exeをsystem()で実行しています。 この***.exeの処理が長い時で、10分位かかってしまうので、バックグラウウンドで処理をしたいと考えています。 コマンドプロンプトで >start ***.exe ~ を実行したところ、うまいことバックグラウンドで処理できました。 しかし、system()で上記のコードを実行したら一瞬黒い画面が出るだけで***.exeが実行されませんでした。 なにがだめなのか全然見当もつきません… 実現できればどんな方法でもかまわないので、 次の方法も試しました。 1. a.phpでsystem(">b.php") b.phpを呼び出し b.phpでsystem(">***.exe")を実行 結果:***.exeは実行されるのですがバックグラウンドで処理されない。 2. コマンドプロンプトでIEを開いてa.phpにアクセス a.phpでjavascript window.openでb.phpをオープン b.phpでsystem(">***.exe")を実行 b.phpをwindow.closeで閉じる 処理は出来たのですが、a.phpが残ってしまう…(消せない、消し方がわからない) a.phpが消せればこの方法でもいいのですが… とにかく実現できればいいのですが… わかる方がいたら教えてくださいお願いします。

    • 締切済み
    • PHP
  • php xampp TOPページ

    xamppをインストールして、PHPがネットにつながらなくてもできるようになりました。 しかしこのhttp://localhost/のTOPページのフォルダ(DocumentRoot)を変えようと思い、 http.confを DocumentRoot "C:/Program Files/xampp/htdocs" ↓ DocumentRoot "C:/Documents and Settings/username/デスクトップ/php" に変更してxampp_restart.exeを実行して、確かめてみたのですが、 php/フォルダにあるPHPは動きませんでした。 まったくお手上げ状態です。 どこを変更すれば動くようになるのかわかる方教えて下さい。

    • ベストアンサー
    • PHP
  • PHPの表示確認ができない

    PHPの勉強をしようと思い、XAMPPをインストールしました。 Apache,MysqlはRunning状態となっているのですが、webブラウザ(firefox)でhttp://localhost/sample01.php と入力しても表示できません。 どうすれば表示できるのでしょうか?初心者ですみません。どなたか教えてください。 ちなみにhttp://d.hatena.ne.jp/port80/20080211/1202700844の処理は、行っています。

    • 締切済み
    • PHP
  • PHPでディレクトリが表示される

    WindowsXP,XAMPP,PHP5です。 http://localhost/scheduleが以下の中身になっています。 --Pagesフォルダ --Smartyフォルダ --index.php httpd.confの設定は以下のようになっています。 DirectoryIndex index.php index.php4 index.php3 index.cgi index.pl index.html index.htm index.shtml index.phtml この状態でhttp://localhost/scheduleを実行するとディレクトリが表示されてしまいます。 Pagesの中にもindex.phpがあるのですがhttp://localhost/schedule/Pagesはちゃんと実行できます。 なぜなのでしょうか?解決策が分かる方、アドバイスお願いいたします。

    • 締切済み
    • PHP
  • XAMPPでのPHPがうまく実行されない。

    XPパソコンに、書籍を参考にXAMPP1.6.5(日本語版)をインストールしました。 そこで本に書いてある通りに、Apacheを起動し、ブラウザで http://localhost/ にアクセスしました。 本では、大きくXAMPPと表示されるとかいているのですが、 It Works! とだけ表示される状態です。 それでもかまわず、htdocsと言うフォルダにwebappと言うフォルダを作り、PHPエディタというエディタで「こんにちは」と表示される簡単なindex.htmlと言う名前のファイルを作ってそのwebappに保存しました。 そして、ブラウザで http://localhost/webapp/index.html と入力してEnterしたのですが、Not Foundと表示されてうまく行きません。 ところが、確かにwebappの中にはindex.htmlがあり、それをダブルクリックすると、その「こんにちは」 と表示されるのです。 そのときのブラウザにのURL欄には localhost/c:/xampp/htdocs/webapp/index.html となっているのです。 この方法で行けば一応できるのかもれませんが、本来、 http://localhost/webapp/(ファイル名) として実行されなければならないはずです。 この、本来の方法でPHPなり、HTMLなりのソースコードを実行させたいのですが、回等よろしくお願い致します。 因みにApacheは2.2.6、PHPは5.2.4です。

    • ベストアンサー
    • PHP
  • apacheとPHPが上手く連携しない

    PHP初心者です。 開発環境 apache2.0.59 PHP5.2.9 Eclipse3.3 apacheはポート80でインストールしたのですが、何故かlocalhost:8080でないと、ファイルが実行されません。 後はapache2.2.11をインストールしている点ですかね。 これもポート80でインストールしています。 後、現在Tomcatと連携しているんですが、これが原因になっているんでしょうか。 ただ、何故かlocalhost:8080だと表示されるんですよね。 私としてはlocalhostで表示したいのですが、どのようにすればいいのでしょうか。 アドバイスどうぞ宜しくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう