プロが教える店舗&オフィスのセキュリティ対策術

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上で実行しています。

A 回答 (9件)

おおまかに原因を推測するなら、



・ネットワークに問題がある
・サーバーの設定に問題がある
・PHPのソースに問題がある(DB接続含め)

のいずれかでしょう。
提示された情報では、すべての可能性を疑う必要があり、回答のしようがありません。誰も闇雲に回答なんてしたくないはずです。
また、たとえば、

<?php print 123 ?>

という単純な内容で、同様のエラーが出ないのであれば、直接ではないとしても、phpの内容が関与しているのは確実です。phpに問題はないと断言するのは早計です。逆に、上記の単純なコードで同様のエラーが出るのであれば、phpとの因果関係は薄くなりますね。phpが原因の可能性を排除するなら、最低限その程度の情報は必要です。

技術的に詳しいことが分からなくても、「たとえばDBとの接続をしない場合はどうだろうか」などの試行錯誤は誰でもできます。原因を探るには、phpのどの部分に問題があるのか、あるいは関与しているかを特定する必要があるわけです。それは我々ではなく、質問者さんにしかできません。

この回答への補足

質問者です。
自己レスで恐縮ですが、解決しました。

DOMは循環関数なのでclear()を実行して解放しなければならなかったようです。

tracer様のご指摘の通り、まずは自分で原因の切り分けを行い、その情報を提供したうえで質問すべきでした。
申し訳ありませんでした。
また、ご指摘ありがとうございました。
ご指摘をもとに原因を切り分けて調べることにより解決に行きつきました。

補足日時:2013/04/24 00:33
    • good
    • 1
この回答へのお礼

ご指摘ありがとうございます。

ご指摘を受け、原因の切り分けのため、私なりに試行錯誤をいたしました。
コードを切り分けて、どの部分を削ったら(あるいは残したら)、同様の現象(ブラウザの接続エラー)が起こらなくなるか(あるいは起こるか)を検証していていきました。

その結果、Simple HTML DOM Parserというライブラリを使って、htmlファイルを取得しているのですが、そのファイルサイズが600メガ前後になるとブラウザの接続エラーがでるようです。

その他のコードはあってもなくても、この現象には関係がありませんでした。

以上から何か分かりますでしょうか?

お礼日時:2013/04/23 22:10

>データベースに格納する処理をさせているので、どこまで処理されているかは、どこまで格納されているかを見れば確認できるようになっております。


それDBの処理としては間違っている。
処理の途中でエラーが出たら例外処理させてトランザクションをロールバックさせないと
データの整合性がとれなくなるぞ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/04/23 13:11

>デバッグについても初心者にもとっつきやすいやり方があればご教示ください。


xdebugの何処が難しい?
俺、PHP初心者の頃からxdebug愛用しているけど別に難しいなんて思ったことはない。
むしろ超便利だと思って使い続けている。

xdebug使えば
・エラーもわかりやすく整形してくるし
・var_dump()すれば変数の中身をわかりやすく整形してくれるし
・ブレークポイントやステップ実行してデバッグそのものはやりやすいし
・プロファイリングで処理の最適化できてないところを洗い出せるし
超便利。
ですべてPHP初心者の頃から普通に使い続けている。
    • good
    • 0
この回答へのお礼

返信ありがとうございます。

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

お礼日時:2013/04/23 13:10

エラーコード吐かないエラーって


時間切れにしろ容量オーバーにしろ
大概無限ループが原因

whileとかforとかで無限ループに陥る要因がないか見てみるといいかも

phpではなかったけどよくやらかしたのが
反復処理で表の行を増減したときの参照のズレが原因の無限ループ
『次の行の値が~なら一つ前の処理をやりなおす』
みたいな処理をしてるとやらかしたりします

表とか配列の増減を伴う処理をしてるなら
参照のズレをちゃんと処理できてるかを注意して見直すといいかと思います
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。

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

お礼日時:2013/04/23 21:49

>1.エラーが出ない。



エラーが出ない=コードに問題がない
ではありません。

例えばかけ算をするプログラムで、間違って足し算をしていてもエラーにはなりませんよ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/04/21 16:26

PHPのコードの要所要所でファイルに出力するようにすれば、原因究明できます。


以下の関数を追加し、testLog("1通過")等で処理されているかを確認します。
function testLog($str){
$fp=fopen("test.log","a");
fwrite($fp,$str);
fclose($fp);
}
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

説明不足で恐縮ですが、データベースに格納する処理をさせているので、どこまで処理されているかは、どこまで格納されているかを見れば確認できるようになっております。

tracer様の回答へのお礼欄に書いたのですが、例えば3まで処理して止まったから4に原因があるのかと思えばそうではなく、次に4から処理を始めると7まで処理できるといった感じです。

ですので、止まったところに原因があるというよりも、一回当たりの処理時間だとか重さだとかにに上限があるのかなぁと考えております。

しかしながら、質問欄記載の通り、max_execution_timeは1800に設定してあり、処理は15秒ほどで止まってしまうので、よくわからなくなって質問させていただいた次第です。

お礼日時:2013/04/21 15:52

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

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

phpの内容とはコードのことでしょうか?
私としては、PHPのコードには原因がないと思っております。

その理由について、説明を欠いており大変失礼いたしました。
以下がその理由です。

1.エラーが出ない。
2.途中で止まるが、少しずつなら進む。
⇒例えれば、コードが1~100あるとして、まず3まで処理してとまって、次に4から処理させると7まで処理して止まってという感じ。

なお、素人考えなので伏せていたのですが、php.iniに原因があるのかなぁと考えておりました。

ですので、質問欄のような挙動を示せば「そういう挙動するなら、原因これかもねー」とか、「php.iniの設定、こう変えてみて」とか、「php.infoのこの部分どうなってるか見せてみ」という感じのお話を頂けるかも考えておりました。
(浅い考えでした。申し訳ございません。)

他に必要な情報があれば何なりとお申し付けください。

お礼日時:2013/04/21 15:04

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

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

処理が間違っているとは、どういう意味でしょうか?
コードにエラーがあるはずという意味でしょうか?

お礼日時:2013/04/21 13:50

PHPがわかるわけではないですが、それだけの情報(原因を特定できるような情報は一切ない)で原因がわかる人はいないです。



「車が動かないんですが、動かない原因はわかりますか?」で原因わかると思いますか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
情報に不足があったようで大変申し訳ございませんでした。

お恥ずかしい話ですが、原因の特定につながる情報がどのようなものか分かりかねるため、必要な情報をご教示いただければ、補足させていただきます。

よろしくお願いします。

お礼日時:2013/04/21 13:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!