• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPが処理を途中でやめる。原因を知りたい。)

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

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

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

  • ベストアンサー
  • 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% (1626/5665)
回答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% (1626/5665)
回答No.1

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

mic_goto
質問者

お礼

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

関連するQ&A

専門家に質問してみよう