質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

876閲覧

ajax使用時、PHP内でループすると時々エラーが出る

Dot

総合スコア120

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

2クリップ

投稿2018/10/05 00:12

編集2018/10/05 01:09

通信回数を減らせるかな?DB更新を早く検知出来ないかな?と思いPHP側をループ
javascript->ajax->PHP(データベース更新されるまで60秒sleepを挟んでdo~loop)->戻り値
送信元

javascript

1 var timestamp=new Date().getTime(); 2 jqxhr =$.ajax({ 3 url:"data.php?"+timestamp, 4 data:{ 5 "***":***, 6 "***":*** 7 }, 8 async:true, 9 type:"POST", 10 datatype:"json", 11 //timeout:5000 12 }) 13 .done(function(data){

エックスサーバー側 PHP7.0.30

PHP

1 set_time_limit(90); 2 ...... 3 $timeout=0; 4 do { 5 ......mysql内更新有無処理 6 if(更新==true)break; 7 sleep(1); 8 $TIMEOUT++; 9 } while (更新==true && $TIMEOUT<60); 10 echo json_encode(....);

通信回数はデータベース更新の頻度により1万~3万回位
90%位は60回ループする
返り値はPCブラウザのデベロッパーツール->Network->sizeで見ると200~500b
通信状態があまり良くない環境(Android携帯、通信の棒1本~2本、Chrome)で使用
送信元は8時間位表示しっぱなし
追記)
処理件数は1レコード9カラムのみ
1レコード9カラム全て埋まってて処理時間100ms位
2か所からアクセスしても変化ないみたい
DB更新は別処理(VBから別のPHPにPOST送信)

時々(1日1回位,出ない日も有り)
PHP error_log
[Wed Oct 03 04:00:21.309669 2018] [fcgid:warn] [pid 28033] (104)Connection reset by peer: [client 数値.数値.125.39:43060] mod_fcgid: error reading data from FastCGI server, referer: https://送信元.php?1529109379
[Wed Oct 03 04:00:21.309735 2018] [core:error] [pid 28033] [client 数値.数値.125.39:43060] End of script output before headers: display-data0.php, referer: https://送信元.php?1529109379
[Wed Oct 03 04:00:21.309766 2018] [fcgid:emerg] [pid 28033] (22)Invalid argument: [client 数値.数値.125.39:43060] mod_fcgid: can't lock process table in pid 28033, referer: https://送信元.php?1529109379
と出ます
出るとサイト全体にアクセスできなくなったりします

ループするのをやめると出ない(通信回数1日6万回位)
2015年~エラー無

表示元でデータベース更新→更新データ取得の他の方法などありますか?
それともループでDB更新待ちはあまり良くない方法なのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/10/05 00:26

sleep入れると実行都度停止して処理件数によって莫大な待ち時間が発生するのではないでしょうか。その辺り問題ないですか?
Dot

2018/10/05 00:33

処理件数は最大9カラム分です、更新されるとbreakでdo~loopを抜けてきます、意味が違います?
Dot

2018/10/05 00:36

最大9カラムの1行目のみです
Dot

2018/10/05 00:41

処理時間+sleep1秒か…なるほど
Dot

2018/10/05 00:43

ループ無時は9カラム1レコード全部埋まっていて最大100msくらいで返ってきます
guest

回答1

0

ベストアンサー

エラー内容を見ると FastCGI経由で実行されているようですが、FastCGIを外すことは難しいですかね?
例えば、以下の情報などを見ると、FastCGI のタイムアウト値や最大実行時間といった設定を行うことによって改善した例もあるようなので、FastCGIが関係しているのかどうかを切り分けられれば多少ポイントが絞れると思います。

https://stackoverflow.com/questions/12153518/connection-reset-by-peer-mod-fcgid-error-reading-data-from-fastcgi-server

投稿2018/10/05 02:28

ssasaki

総合スコア1167

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Dot

2018/10/05 02:45

ありがとうございます エックスサーバーではPHP7.0だと無効に出来ないみたいです php.iniなら編集可能です…
Dot

2018/10/05 03:03

エックスサーバー(レンタルサーバー)ではPHP全Ver無効に出来ないみたいです…
ssasaki

2018/10/05 03:11

そうなると、FastCGIの問題の可能性もあることを考えてFastCGIの設定をいじってみる必要もありそうですが、設定可能ですかね? もしくは、現在 set_time_limit(90); で理論値90秒、実際には60秒のsleep+実行時間が最大実行時間になりますが、この最大実行時間を減らしてみてエラーの頻度が変わるのかどうか検証するのは1つの手かもしれません。
Dot

2018/10/05 09:17

そうなのですか サーバー設定、FASTCGI設定はレンタルサーバーでは出来ないみたいです set_time_limit(90),30秒でも発生しました set_time_limit(0)で確認中です お客様が使用されているPC側が何らかのトラブルにより強制的に接続を切ってしまったようです。 とかあるので 通信状態があまり良くない環境で通信がプツプツ切れるのが原因でしょうかねぇ?
ssasaki

2018/10/05 09:34

$TIMEOUT<30 ということですよね? これでもエラーの頻度はあまり変わらなかったということでしょうか?
Dot

2018/10/05 09:39

はい 2日前に1回だけエラー出ました ループ化してまだ1週間位です
Dot

2018/10/05 09:49

切り分けが出来ないと進展がなさそうですね ループ無では問題のでテストしつつやっていこうと思います ありがとうございました
Dot

2018/10/05 09:51

問題ので->問題ないので
Dot

2018/10/06 18:15

error_log確認すると同じような時間に発生 3:00~4:00に自動バックアップをしているみたいです 時々良いタイミングですり抜けてエラー回避しているようです
ssasaki

2018/10/09 02:02

エラーログを見ると4時くらいに起きていますね。 この時間帯に限って言えば、cron で実行されるApacheの再起動時の影響かもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問