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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPのif文でその処理を途中で抜...
-
インスタンス化に伴うメモリ消...
-
phpの処理中に画面表示ををする...
-
データベースのレコードを入れ...
-
PHPにおける時間計算、時間足し...
-
imagecreatetruecolor()関数で...
-
透過PNGが透過されない!!
-
フォントの色を変えるには?
-
php,mysqlにて画像パス保存/表...
-
FTPコマンドでディレクトリごと...
-
PythonのTkinter詳しい方へ。画...
-
PHPでネットワークドライブのop...
-
SSI される .inc ファイル内に ...
-
拡張子php画像をjpg画像等に変...
-
onedrive にexcelファイルをア...
-
違法アップロードについて
-
renameでのPermission deniedエ...
-
改行コードのカウント
-
【file_exists】ファイルが存在...
-
Subversionのリポジトリの削除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPのif文でその処理を途中で抜...
-
PHPが処理を途中でやめる。原因...
-
Cronで同じ処理を複数同時に実...
-
phpの処理中に画面表示ををする...
-
3の倍数の和
-
インスタンス化に伴うメモリ消...
-
関数の前についている「@」の意...
-
web画面から呼び出したphp処理...
-
submitボタンを自動クリック
-
PHPのSmartyについて質問です。...
-
includeしたファイルに変数を持...
-
PHPで文字列(日本語)の比較
-
プログラム内で処理中断後も継...
-
チェックボックスをビット演算...
-
Smartyにて、文字検索
-
タイムアウト時に次の処理へ移...
-
csvファイルの読込みとソート
-
VBAからPHPを実行(キック)したい
-
PHPの複数関数非同期実行方法を...
-
Linuxサーバに移行とphpexcel出力
おすすめ情報