
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上で実行しています。
No.10ベストアンサー
- 回答日時:
おおまかに原因を推測するなら、
・ネットワークに問題がある
・サーバーの設定に問題がある
・PHPのソースに問題がある(DB接続含め)
のいずれかでしょう。
提示された情報では、すべての可能性を疑う必要があり、回答のしようがありません。誰も闇雲に回答なんてしたくないはずです。
また、たとえば、
<?php print 123 ?>
という単純な内容で、同様のエラーが出ないのであれば、直接ではないとしても、phpの内容が関与しているのは確実です。phpに問題はないと断言するのは早計です。逆に、上記の単純なコードで同様のエラーが出るのであれば、phpとの因果関係は薄くなりますね。phpが原因の可能性を排除するなら、最低限その程度の情報は必要です。
技術的に詳しいことが分からなくても、「たとえばDBとの接続をしない場合はどうだろうか」などの試行錯誤は誰でもできます。原因を探るには、phpのどの部分に問題があるのか、あるいは関与しているかを特定する必要があるわけです。それは我々ではなく、質問者さんにしかできません。
この回答への補足
質問者です。
自己レスで恐縮ですが、解決しました。
DOMは循環関数なのでclear()を実行して解放しなければならなかったようです。
tracer様のご指摘の通り、まずは自分で原因の切り分けを行い、その情報を提供したうえで質問すべきでした。
申し訳ありませんでした。
また、ご指摘ありがとうございました。
ご指摘をもとに原因を切り分けて調べることにより解決に行きつきました。
ご指摘ありがとうございます。
ご指摘を受け、原因の切り分けのため、私なりに試行錯誤をいたしました。
コードを切り分けて、どの部分を削ったら(あるいは残したら)、同様の現象(ブラウザの接続エラー)が起こらなくなるか(あるいは起こるか)を検証していていきました。
その結果、Simple HTML DOM Parserというライブラリを使って、htmlファイルを取得しているのですが、そのファイルサイズが600メガ前後になるとブラウザの接続エラーがでるようです。
その他のコードはあってもなくても、この現象には関係がありませんでした。
以上から何か分かりますでしょうか?
No.8
- 回答日時:
>デバッグについても初心者にもとっつきやすいやり方があればご教示ください。
xdebugの何処が難しい?
俺、PHP初心者の頃からxdebug愛用しているけど別に難しいなんて思ったことはない。
むしろ超便利だと思って使い続けている。
xdebug使えば
・エラーもわかりやすく整形してくるし
・var_dump()すれば変数の中身をわかりやすく整形してくれるし
・ブレークポイントやステップ実行してデバッグそのものはやりやすいし
・プロファイリングで処理の最適化できてないところを洗い出せるし
超便利。
ですべてPHP初心者の頃から普通に使い続けている。
返信ありがとうございます。
Xdebugについては、以前プロファイリングをしたくてインストールし、WinCacheGrindで結果を見ようとしたのですが、このWinCacheGrindの見方がよくわかりませんでした。
その後、Eclipseでデバッグしてみようと、Pleiadesをインストールしたのですが、ヘルプが英語で、使いこなすのが難しそうだと放置してしまいました。
No.7
- 回答日時:
エラーコード吐かないエラーって
時間切れにしろ容量オーバーにしろ
大概無限ループが原因
whileとかforとかで無限ループに陥る要因がないか見てみるといいかも
phpではなかったけどよくやらかしたのが
反復処理で表の行を増減したときの参照のズレが原因の無限ループ
『次の行の値が~なら一つ前の処理をやりなおす』
みたいな処理をしてるとやらかしたりします
表とか配列の増減を伴う処理をしてるなら
参照のズレをちゃんと処理できてるかを注意して見直すといいかと思います
アドバイスありがとうございます。
無限ループの可能性を疑いじっくり見直してみましたが、今回の原因は無限ループではないようでした。
ですが、可能性をひとつ潰せたという意味で一歩前進ですし、勉強にもなりました。
ありがとうございます。
No.5
- 回答日時:
>1.エラーが出ない。
エラーが出ない=コードに問題がない
ではありません。
例えばかけ算をするプログラムで、間違って足し算をしていてもエラーにはなりませんよ。
No.4
- 回答日時:
PHPのコードの要所要所でファイルに出力するようにすれば、原因究明できます。
以下の関数を追加し、testLog("1通過")等で処理されているかを確認します。
function testLog($str){
$fp=fopen("test.log","a");
fwrite($fp,$str);
fclose($fp);
}
ご回答ありがとうございます。
説明不足で恐縮ですが、データベースに格納する処理をさせているので、どこまで処理されているかは、どこまで格納されているかを見れば確認できるようになっております。
tracer様の回答へのお礼欄に書いたのですが、例えば3まで処理して止まったから4に原因があるのかと思えばそうではなく、次に4から処理を始めると7まで処理できるといった感じです。
ですので、止まったところに原因があるというよりも、一回当たりの処理時間だとか重さだとかにに上限があるのかなぁと考えております。
しかしながら、質問欄記載の通り、max_execution_timeは1800に設定してあり、処理は15秒ほどで止まってしまうので、よくわからなくなって質問させていただいた次第です。
No.3
- 回答日時:
phpに原因があると思われているのであれば、phpの内容を提示しないと何とも回答のしようがありませんね。
ご回答ありがとうございます。
phpの内容とはコードのことでしょうか?
私としては、PHPのコードには原因がないと思っております。
その理由について、説明を欠いており大変失礼いたしました。
以下がその理由です。
1.エラーが出ない。
2.途中で止まるが、少しずつなら進む。
⇒例えれば、コードが1~100あるとして、まず3まで処理してとまって、次に4から処理させると7まで処理して止まってという感じ。
なお、素人考えなので伏せていたのですが、php.iniに原因があるのかなぁと考えておりました。
ですので、質問欄のような挙動を示せば「そういう挙動するなら、原因これかもねー」とか、「php.iniの設定、こう変えてみて」とか、「php.infoのこの部分どうなってるか見せてみ」という感じのお話を頂けるかも考えておりました。
(浅い考えでした。申し訳ございません。)
他に必要な情報があれば何なりとお申し付けください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルVBA マクロ処理中のポップアップメッセージについて 1 2023/08/04 21:34
- 画像編集・動画編集・音楽編集 PowerDirector21 動画出力時のCPU稼働率が急に下がってしまう原因を教えてください 2 2023/03/30 20:54
- その他(開発・運用・管理) bashで15分前と現在のエポックタイムの時間を取得したい 2 2023/02/01 19:10
- C言語・C++・C# win10で、正確な待ち時間の作り方 6 2023/02/14 18:28
- 世界情勢 中国の福島第一原発処理水放出 IAEA報告への反発 7 2023/07/06 21:16
- Excel(エクセル) Indirect関数について、Formulatextで抽出した数式を参照したい。 1 2022/12/15 11:16
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- 政治 福島原発「処理水」の海洋放出実施時の補償 93 2023/07/22 17:47
- その他(データベース) 業務用のデータベースサーバーの選び方について 4 2022/11/22 10:22
- Chrome(クローム) PCの Google Chrome が頻繁に「ページが応答していません」となり作業が進みません。 1 2023/05/25 20:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPのif文でその処理を途中で抜...
-
インスタンス化に伴うメモリ消...
-
Smartyにて、文字検索
-
phpの処理中に画面表示ををする...
-
ページの一部だけリロード
-
csvファイルの読込みとソート
-
【file_exists】ファイルが存在...
-
「クラス関数」「メンバ関数」...
-
glob関数で日本語文字が取得で...
-
VB6.0とBASP21を用いてyahooメ...
-
URLの変わらないページをPHPで...
-
FTPClientで転送結果(OKかFAIL)
-
PHPの設定で、 エラーが発生し...
-
VB6にてメールを送信する方法
-
別ファイルの変数を呼び出した...
-
WinXP PHP5 Apache2 初期設定で...
-
DLL のロードの順序
-
LoadLibraryの戻り値(HMODULE)...
-
ボタンのクリック数を合計保存...
-
別サーバのプログラムを起動
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPのif文でその処理を途中で抜...
-
PHPが処理を途中でやめる。原因...
-
phpの処理中に画面表示ををする...
-
Smartyにて、文字検索
-
PHP内、ボタン押下と同時にリロ...
-
インスタンス化に伴うメモリ消...
-
フォームが送信されたかの確認...
-
APIで出てきたXMLをPHPで表示さ...
-
大量チェックボックスの実装方...
-
デバッグの仕方・・・
-
PHPの変わった閉じタグの必要性...
-
入れ子になっているHTMLタグも...
-
デフォルト、フロントコントロ...
-
タイムアウト時に次の処理へ移...
-
PHPで偶数と奇数を判断するには
-
CakePHPでのemptyの 0 判定に関...
-
Cronで同じ処理を複数同時に実...
-
チェックボックスをビット演算...
-
PHPの書き方について
-
条件分岐 if(elseif) switchの...
おすすめ情報