質問編集履歴

4

追加情報(自己解決)

2018/12/05 01:30

投稿

ysk1118
ysk1118

スコア22

test CHANGED
File without changes
test CHANGED
@@ -245,3 +245,31 @@
245
245
   条件3:サーバAのMysqlサービス開始・サーバBのサービス停止 → 18895 5823 22192 15739 99999 22299 1
246
246
 
247
247
  以上のことから、ソース上で指定したIPアドレスは意味を成していないように思われます。
248
+
249
+
250
+
251
+ ### 追加情報2
252
+
253
+ 別のphpファイルソースを編集していた際、誤ってパスワードの記載までを変えてしまったことに気付かず処理を行いました。
254
+
255
+ 当然、エラーが出力されたのですが、このエラー内容の一部に
256
+
257
+ > PDO->__construct('mysql:host=172....', 'tc_guest', 'test', Array)
258
+
259
+
260
+
261
+ とありました。
262
+
263
+ hostの指定がIPアドレスの第1オクテットしか表示されていないため、
264
+
265
+ もしやと思って、$db['host']への設定値をIPアドレスからホスト名に変更してみたところ、
266
+
267
+ 無事DBの参照先を切り替えることに成功しました。
268
+
269
+ 自己解決という形になってしまいましたが、ホスト名指定にIPアドレス指定がNGというのはどうも納得がいかないような…。
270
+
271
+
272
+
273
+ ともあれ、コメントをいただいた方々、お付き合いいただきありがとうございました。
274
+
275
+ 一先ず本件については自己解決という形でクローズさせていただきますが、この件について知見をお持ちの方は引き続きご助言いただけると幸いです。

3

追記しました。

2018/12/05 01:30

投稿

ysk1118
ysk1118

スコア22

test CHANGED
File without changes
test CHANGED
@@ -163,3 +163,85 @@
163
163
  サーバAにしか存在していないユーザ情報でログインされましたし、その後表示されるデータもサーバAにしかないデータが
164
164
 
165
165
  出力されています。ということは、ソースの先頭で指定したホストの指定は全く意味がないということなのでしょうか…?
166
+
167
+
168
+
169
+ ### 追記
170
+
171
+ 新たにテスト確認したソースを開示します。
172
+
173
+ ```php
174
+
175
+ <?php
176
+
177
+
178
+
179
+ $db['host']="172.20.0.34";//サーバBのIPアドレス
180
+
181
+ $db['user']="tc_guest";
182
+
183
+ $db['pass']="パスワード";
184
+
185
+ $db['dbname']="DB名";
186
+
187
+
188
+
189
+ $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8',$db['host'],$db['dbname']);
190
+
191
+
192
+
193
+ // 3.エエラー処理
194
+
195
+ try {
196
+
197
+ $pdo=new PDO($dsn,$db['user'],$db['pass'],array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
198
+
199
+
200
+
201
+ $stmt=$pdo->prepare('select * from t_userdata');
202
+
203
+ $stmt->execute();
204
+
205
+
206
+
207
+ foreach($stmt as $row){
208
+
209
+ echo $row["userid"] . " ";
210
+
211
+ }
212
+
213
+
214
+
215
+
216
+
217
+ }catch(PDOExecption $e){
218
+
219
+ echo $e->getMessage();
220
+
221
+ }
222
+
223
+
224
+
225
+ ?>
226
+
227
+ ```
228
+
229
+ また、下記はサーバA,Bそれぞれのt_userdataテーブルの中身です。
230
+
231
+ ![イメージ説明](729c7a7dd047911429061a865b514eb0.png)
232
+
233
+ ↑サーバA
234
+
235
+ ![イメージ説明](587222137bff8110ab03b3c58a9a2a4f.png)
236
+
237
+ ↑サーバB
238
+
239
+ 次の条件で上記コードのphpファイルにアクセスした際の結果です。
240
+
241
+  条件1:サーバAのMysqlサービス開始 → 18895 5823 22192 15739 99999 22299 1
242
+
243
+  条件2:サーバAのMysqlサービス停止 → Fatal error: in C:\xampp\htdocs\dakoku\test.php on line 12
244
+
245
+  条件3:サーバAのMysqlサービス開始・サーバBのサービス停止 → 18895 5823 22192 15739 99999 22299 1
246
+
247
+ 以上のことから、ソース上で指定したIPアドレスは意味を成していないように思われます。

2

apacheのエラーログと追加情報を追記

2018/11/30 05:04

投稿

ysk1118
ysk1118

スコア22

test CHANGED
File without changes
test CHANGED
@@ -112,6 +112,30 @@
112
112
 
113
113
  ```
114
114
 
115
+ ご指摘に沿い、apacheのエラーログを確認しました。エラーを発生させた日時に該当するエラーログを抽出しましたが、
116
+
117
+ 直接エラーと関与するような記述は見受けられませんでした。
118
+
119
+ > [Fri Nov 30 12:13:37.889772 2018] [ssl:warn] [pid 3408:tid 616] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
120
+
121
+ [Fri Nov 30 12:13:38.046179 2018] [core:warn] [pid 3408:tid 616] AH00098: pid file D:/xampp/apache/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
122
+
123
+ [Fri Nov 30 12:13:38.249217 2018] [ssl:warn] [pid 3408:tid 616] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
124
+
125
+ [Fri Nov 30 12:13:38.296097 2018] [mpm_winnt:notice] [pid 3408:tid 616] AH00455: Apache/2.4.25 (Win32) OpenSSL/1.0.2j PHP/7.1.6 configured -- resuming normal operations
126
+
127
+ [Fri Nov 30 12:13:38.296097 2018] [mpm_winnt:notice] [pid 3408:tid 616] AH00456: Apache Lounge VC14 Server built: Dec 17 2016 10:42:52
128
+
129
+ [Fri Nov 30 12:13:38.296097 2018] [core:notice] [pid 3408:tid 616] AH00094: Command line: 'd:\xampp\apache\bin\httpd.exe -d D:/xampp/apache'
130
+
131
+ [Fri Nov 30 12:13:38.296097 2018] [mpm_winnt:notice] [pid 3408:tid 616] AH00418: Parent: Created child process 4036
132
+
133
+ [Fri Nov 30 12:13:39.483729 2018] [ssl:warn] [pid 4036:tid 624] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
134
+
135
+ [Fri Nov 30 12:13:39.749383 2018] [ssl:warn] [pid 4036:tid 624] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
136
+
137
+ [Fri Nov 30 12:13:39.796265 2018] [mpm_winnt:notice] [pid 4036:tid 624] AH00354: Child: Starting 150 worker threads.
138
+
115
139
 
116
140
 
117
141
  ### 試したこと
@@ -127,3 +151,15 @@
127
151
  grant all privileges on DB名.* to tc_guest@"テスト環境サーバのIP" identified by 'パスワード' with grant option;
128
152
 
129
153
  ```
154
+
155
+
156
+
157
+ ### 追加情報
158
+
159
+ ふと、テスト環境であるサーバAのMySQLのサービスをスタートさせたところ、ソースの処理が正常に動作しました。
160
+
161
+ ただし、DBはサーバBではなくサーバAを見に行っているようです。ソースはユーザ認証の処理なのですが、
162
+
163
+ サーバAにしか存在していないユーザ情報でログインされましたし、その後表示されるデータもサーバAにしかないデータが
164
+
165
+ 出力されています。ということは、ソースの先頭で指定したホストの指定は全く意味がないということなのでしょうか…?

1

エラー例外処理の記載漏れを修正しました。

2018/11/30 03:19

投稿

ysk1118
ysk1118

スコア22

test CHANGED
File without changes
test CHANGED
@@ -90,6 +90,14 @@
90
90
 
91
91
  …以下略
92
92
 
93
+        }catch (PDOException $e){
94
+
95
+ $err_msg='データベースエラー:';
96
+
97
+   echo $e->getMessage();
98
+
99
+ }
100
+
93
101
  ```
94
102
 
95
103