質問編集履歴

3

レイアウトを見やすく

2016/11/16 01:13

投稿

keiji44
keiji44

スコア18

test CHANGED
File without changes
test CHANGED
@@ -10,11 +10,11 @@
10
10
 
11
11
 
12
12
 
13
- (1) http://ドメイン/batch/action/{$method} にアクセス
13
+ 1. http://ドメイン/batch/action/{$method} にアクセス
14
14
 
15
15
  {$method} は実行する function 名
16
16
 
17
- (2) BatchesController 内の function action 内で、
17
+ 2. BatchesController 内の function action 内で、
18
18
 
19
19
  "Console\cake batch {$method}" を非同期で実行
20
20
 
@@ -22,7 +22,7 @@
22
22
 
23
23
  外部コマンドを利用して start で非同期を実施します。
24
24
 
25
- (3) BatchShell 内に定義した function {$method} に処理を記載
25
+ 3. BatchShell 内に定義した function {$method} に処理を記載
26
26
 
27
27
 
28
28
 
@@ -30,25 +30,19 @@
30
30
 
31
31
  BatchShell 内の function {$method} 内で DB へのアクセスが発生するプログラムがあるのですが、
32
32
 
33
- どうやら、DB の設定情報が取得できないようで、
34
-
35
- DB へのアクセスができない状態が発生しています。
33
+ どうやら、DB の設定情報が取得できないようで、DB へのアクセスができない状態が発生しています。
36
34
 
37
35
  以下のエラーメッセージを確認しました。
38
36
 
39
37
 
40
38
 
41
- ```
42
-
43
- Database connection "Mysql" is missing, or could not be created.
39
+ `Database connection "Mysql" is missing, or could not be created.`
44
-
45
- ```
46
40
 
47
41
 
48
42
 
49
43
  コマンドプロンプトを立ち上げて、
50
44
 
51
- "Console\cake batch {$method}" と直接実行すれば正常に動作するので、
45
+ `Console\cake batch {$method}` と直接実行すれば正常に動作するので、
52
46
 
53
47
  popen を経由することで発生しているような気がします。
54
48
 
@@ -62,7 +56,7 @@
62
56
 
63
57
  ###試したこと
64
58
 
65
- BatchShell 内の function {$method} 内で $this->log("hoge"); とすると、
59
+ BatchShell 内の function {$method} 内で `$this->log("hoge");` とすると、
66
60
 
67
61
  ログには出力されるので、function {$method} までは処理が到達しています。
68
62
 
@@ -70,7 +64,7 @@
70
64
 
71
65
  ただ、以下のような DB へのアクセスが発生するようなプログラムを書くと上記のエラーメッセージが表示されます。
72
66
 
73
- $this->{Model}->{function}; (実際に存在する関数)
67
+ `$this->{Model}->{function}; (実際に存在する関数)`
74
68
 
75
69
 
76
70
 

2

検証の追加

2016/11/16 01:13

投稿

keiji44
keiji44

スコア18

test CHANGED
File without changes
test CHANGED
@@ -125,3 +125,177 @@
125
125
 
126
126
 
127
127
  お知恵を拝借していただければありがたいです。
128
+
129
+
130
+
131
+ ---
132
+
133
+ 追加で、以下の2つファイルを用意して検証しました。
134
+
135
+
136
+
137
+ **・check_pdo.php**
138
+
139
+ ```
140
+
141
+ <?php
142
+
143
+ echo '<pre>';
144
+
145
+ var_dump('ACTION!'); // この文字列が表示されれば check_pdo.php 自体は実行されている
146
+
147
+ var_dump(PDO::getAvailableDrivers());
148
+
149
+ echo '</pre>';
150
+
151
+ ?>
152
+
153
+ ```
154
+
155
+
156
+
157
+ **・check_pdo_via_popen.php** : **chekc_pdo.php** を **popen** で呼び出すファイル
158
+
159
+ ```
160
+
161
+ <?php
162
+
163
+ $cmd = 'php {ファイルまでのパス}/check_pdo.php';
164
+
165
+ $fp = popen($cmd, 'r');
166
+
167
+ print '<pre>';
168
+
169
+ while ($read = fread($fp, 2096)) { echo $read; }
170
+
171
+ print '</pre>';
172
+
173
+ pclose($fp);
174
+
175
+ ?>
176
+
177
+ ```
178
+
179
+
180
+
181
+ ### コマンドプロンプトから **check_pdo.php** を **php** コマンドで直接実行
182
+
183
+ **実行コマンド**
184
+
185
+ `C:\Windows\SysWOW64> php {ファイルまでのパス}/check_pdo.php`
186
+
187
+ ※ php のパスは通してあります。
188
+
189
+
190
+
191
+ **結果**
192
+
193
+ ```
194
+
195
+ <pre>string(7) "ACTION!"
196
+
197
+ array(2) {
198
+
199
+ [0]=>
200
+
201
+ string(5) "mysql"
202
+
203
+ [1]=>
204
+
205
+ string(4) "odbc"
206
+
207
+ }
208
+
209
+ </pre>
210
+
211
+ ```
212
+
213
+
214
+
215
+ ### Web ブラウザから直接 **check_pdo.php** にアクセス(CakePHP は経由せず)
216
+
217
+ **結果**
218
+
219
+ ```
220
+
221
+ string(7) "ACTION!"
222
+
223
+ array(2) {
224
+
225
+ [0]=>
226
+
227
+ string(5) "mysql"
228
+
229
+ [1]=>
230
+
231
+ string(4) "odbc"
232
+
233
+ }
234
+
235
+ ```
236
+
237
+
238
+
239
+ ### コマンドプロンプトから **check_pdo_via_popen.php** を **php** コマンドで直接実行
240
+
241
+ **実行コマンド**
242
+
243
+ `C:\Windows\SysWOW64> php {ファイルまでのパス}/check_pdo_via_popen.php`
244
+
245
+ ※ php のパスは通してあります。
246
+
247
+
248
+
249
+ **結果**
250
+
251
+ ```
252
+
253
+ <pre><pre>string(7) "ACTION!"
254
+
255
+ array(2) {
256
+
257
+ [0]=>
258
+
259
+ string(5) "mysql"
260
+
261
+ [1]=>
262
+
263
+ string(4) "odbc"
264
+
265
+ }
266
+
267
+ </pre></pre>
268
+
269
+ ```
270
+
271
+
272
+
273
+ ### Web ブラウザから直接 **check_pdo_via_popen.php** にアクセス(CakePHP は経由せず)
274
+
275
+ **結果**
276
+
277
+ ```
278
+
279
+ string(7) "ACTION!"
280
+
281
+ array(0) {
282
+
283
+ }
284
+
285
+ ```
286
+
287
+
288
+
289
+ コマンドプロンプトからであれば popen を利用しても表示されたので、
290
+
291
+ 原因は popen ではないようです。
292
+
293
+
294
+
295
+ 最初の質問と共通するのは **Webブラウザからアクセスだと空になる** ということですので、
296
+
297
+ Apache ユーザで実行すると特定の条件下で発生する?辺りなのかと踏んでいます。
298
+
299
+
300
+
301
+ 引き続き、よろしくお願いします。

1

2016/11/16 01:06

投稿

keiji44
keiji44

スコア18

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  ###環境
2
2
 
3
- Windows10 / Apache 2.4系 / MySQL 5.5系
3
+ Windows10 / Apache 2.4系 / MySQL 5.5系 / CakePHP 2.7.5
4
4
 
5
5
  ###前提・実現したいこと
6
6