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

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

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

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

Q&A

1回答

728閲覧

PHP ERROR 1129 (HY000): Host ‘0.0.0.0’ is blocked because of many connection errors;

maruo2525

総合スコア4

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

0グッド

0クリップ

投稿2020/04/21 09:15

前提・実現したいこと

PHPにてログイン制の予約サイトを作成したい。

発生している問題・エラーメッセージ

ERROR 1129 (HY000): Host ‘0.0.0.0’ is blocked because of many connection errors;

DBの接続エラーが上限に達しているようなので FLUSH HOSTS; で解消自体は出来るのですが、
1時間ほどで再発している状態です。

PHP

PHP

1<?php 2require_once('config.php'); 3require_once('header.php'); 4require_once('footer.php'); 5 6// タイムゾーンを設定 7date_default_timezone_set('Asia/Tokyo'); 8 9//曜日 10$week = array( "(日)", "(月)", "(火)", "(水)", "(木)", "(金)", "(土)" ); 11 12session_start(); 13$_SESSION["visited"] = null; 14$store_code = STORECODE; 15//ログイン済みの場合 16if (isset($_SESSION['EMAIL'])) { 17 try { 18 $pdo = new PDO(DSN, DB_USER, DB_PASS); 19 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 20 } catch (Exception $e) { 21 echo $e->getMessage() . PHP_EOL; 22 } 23 $stmt = $pdo->prepare("SELECT * FROM trn_yoyaku where store_code = ? AND customer_code = ? AND yoyakubi > ? AND delete_flag = 0 AND cancel_flg = 0;"); 24 $stmt->execute([$store_code, $_SESSION['CUSTOMERCODE'], date("Ymd")]); 25 $yoyaku = $stmt -> fetchAll(PDO::FETCH_ASSOC); 26 print_header("マイページ"); 27?> 28 29<body> 30//HTML記述 31 <?php 32 33 //予約したものの一覧を表示する機能 34 foreach ($yoyaku as $row) { 35 $yoyakubi = $row['yoyakubi']; 36 $yoyaku_jikan_from = $row['yoyaku_jikan_from']; 37 $print_yoyakubi = date('Y年m月d日', strtotime($yoyakubi)); 38 $youbi = date('w', strtotime($yoyakubi)); 39 $print_yoyaku_jikan_from = date('H:i', strtotime($yoyaku_jikan_from)); 40 echo $print_yoyakubi; 41 echo $week[$youbi]; 42 echo " " . $print_yoyaku_jikan_from; 43 echo "<br>"; 44 } 45 $pdo = null; 46 $stmt = null; 47 $yoyaku = null; 48 ?></p> 49 </div> 50 </div> 51 52 53 <div class="menu_btn"> 54 <a href="menu.php"><i class="fab fa-elementor"></i> メニューページへ</a> 55 </div> 56 <div class='logout'> 57 <a href='logout.php'>ログアウト</a> 58 </div> 59 </div> 60 </form> 61 </div> 62<?php 63 print_footer(); 64}else { 65//以下ログイン画面 66}

試したこと

・DBコネクションを明示的に閉じる。
体感のエラー発生頻度は変わらず。

・エラーログの確認
エラーログに記載はなし。

・アクセスログの確認
アクセスは全く無くサイトをブラウザで開いていない間にもエラーが発生している。

・時間帯別のエラー発生率
15時から20時くらいにかけてエラー発生頻度が高くなる。
※それ以外の時間帯は1時間~3時間で再発

・.htaccessの見直し
リダイレクトループは発生していない。

・DBのmax_connect_errorsの確認
デフォルト値の100。

補足情報(FW/ツールのバージョンなど)

PHP 5.6.40

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

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

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

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

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

m.ts10806

2020/04/21 09:18

公開されてるサーバーですか? URLがわかれば誰でもアクセスできるような
maruo2525

2020/04/21 09:21

ありがとうございます。 はい。公開されているサーバです。
m.ts10806

2020/04/21 09:22

ではサーバーのアクセスログ確認したほうが良いと思います。 当該エラーが出る時間前後にどんなアクセスがあるのか調査するところからですね
maruo2525

2020/04/21 09:28

ありがとうございます。 アクセスログを確認したのですが誰もアクセスをしていませんでした。
m.ts10806

2020/04/21 09:50

ん。それはおかしいですね。 そもそも当該アプリケーションはどのように実行されるのでしょう。 誰もアクセスしてないなら実行すらされないはずですが。 max_connect_errorsを増やしても変わりませんか?(あまり多いとサーバー負荷の問題はありますけど、ある程度境界線は把握したい)
退会済みユーザー

退会済みユーザー

2020/04/21 09:50

誰もアクセスしていないって、そもそもつながることはあるの?
maruo2525

2020/04/21 10:06

回答ありがとうございます。 DBに接続するのはログインする際にID,PWを参照する時です。 アクセスログは確認しましたが自分が最後に確認してからログインが出来ているかどうかの確認をするまで誰もアクセスしていません。
退会済みユーザー

退会済みユーザー

2020/04/21 10:08

じゃぁ、PHPのコードからはデータベースに接続できていない、ということですね。
maruo2525

2020/04/21 10:11

はい。 PHPからは接続ができなくなっています。 操作しているPCからエラーカウントをリセットしています。
guest

回答1

0

$pdo = new PDO(DSN, DB_USER, DB_PASS);のDSNで定義している、
接続先ホストをどう定義しているかを確認すること、
その経路上にルーターやファイアウォールがあれば、そこを越えられるように設定しているかを確認すること。

とか。

つながることもあるし、つながらなくなることもある、というのであれば、
MySQL DBのコネクション数の確認とか - Qiita
を参考にデータベース接続のコネクション数をチェックするとか、
phpの処理が終わっても死なない(?)コネクションがあるなら切断されるようデータベース側を調整するとか、かなぁ。

投稿2020/04/21 09:49

編集2020/04/21 09:53
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

maruo2525

2020/04/21 10:14

回答ありがとうございます。 ご教示頂いた情報をもとにDBを確認してみましたが、 PHP用に作成したDB USERはいませんでした。
退会済みユーザー

退会済みユーザー

2020/04/21 10:18

DSN, DB_USER, DB_PASS が、別のPHPファイル上に定義されているので、 まずそれを示してください。 話はそこからです。
maruo2525

2020/04/21 10:18

すみません。 追記です。 エラーカウントをリセットしてしばらくは通常通りDBに接続が出来ており、 プログラムも問題なく動作しております。
maruo2525

2020/04/21 10:20

config.php define('DSN', 'mysql:dbname=xxxxxx;host=xxxxx.com;charset=utf8mb4'); define('DB_USER', 'user'); define('DB_PASS', 'pass'); すみません。このような形で記述しています。
退会済みユーザー

退会済みユーザー

2020/04/21 10:23

データベース接続のみのシンプルなコードを用意してテストしても繋がりませんか。 なにかウイルス対策ソフトや、ファイアウォールなどに阻まれていないでしょうか。 host=xxxxx.comとしている接続先が、DNSでIPアドレスを引くと0.0.0.0と帰るようなら、 DNSの設定がおかしいとは、あるいはhostsファイルでのIPアドレス辞書での定義がおかしいなども考えられますが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問