質問編集履歴

2

コードを変えると処理は動作しました。処理内容を追記します。

2018/12/09 03:44

投稿

miki0901
miki0901

スコア14

test CHANGED
File without changes
test CHANGED
@@ -47,3 +47,219 @@
47
47
  動作しない原因が分かる方、ご教授くださいm(__)m
48
48
 
49
49
  よろしくお願い致します。
50
+
51
+
52
+
53
+ ―――――――――――――――――――――――――――――――――――
54
+
55
+ 追記
56
+
57
+ ―――――――――――――――――――――――――――――――――――
58
+
59
+ 実行されるコードを
60
+
61
+ 以下のようにメール送信のみにしたところ、
62
+
63
+ 「cd /home/XXXXX; /usr/local/bin/php test.php」
64
+
65
+ でメール送信が成功しました!!
66
+
67
+
68
+
69
+ ```PHP
70
+
71
+ <?php
72
+
73
+ $header = '';
74
+
75
+ // 差出人アドレス
76
+
77
+ $header = "From:test@XXXXX.sakura.ne.jp\n";
78
+
79
+ // 返信先アドレス
80
+
81
+ $header .= "Reply-To:test@XXXXX.sakura.ne.jp\n";
82
+
83
+
84
+
85
+ //------------------
86
+
87
+ // 送信
88
+
89
+ //------------------
90
+
91
+ mb_send_mail('宛先アドレス' , 'cron_test', 'message', $header );
92
+
93
+ ?>
94
+
95
+ ```
96
+
97
+ しかし、DB更新の処理を入れるとやはり処理が実行されず、postmasterへメールも届きませんでした。
98
+
99
+ cronの設定には問題がなさそうです。
100
+
101
+
102
+
103
+ **www直下において直接アクセスするとやはり動くのですが、cronで実行したときのみ、DB処理を入れると動かないという状況です。**
104
+
105
+
106
+
107
+ 実行している処理は以下の通りです。
108
+
109
+ ```PHP
110
+
111
+ <?php
112
+
113
+ // 関数や定数ファイルの読み込み
114
+
115
+ include_once($_SERVER['DOCUMENT_ROOT'] . '/test/common/include.php');
116
+
117
+
118
+
119
+ // pdoを返却する関数を実行
120
+
121
+ $pdo = funcGetPdo();
122
+
123
+ // トランザクションの開始
124
+
125
+ $pdo->beginTransaction();
126
+
127
+
128
+
129
+ //---------------------------------------
130
+
131
+ // 更新①
132
+
133
+ //---------------------------------------
134
+
135
+ // ステートメント発行
136
+
137
+ $stmt = $pdo->prepare
138
+
139
+ ("
140
+
141
+ 動作確認済みのSQL(INSERT)
142
+
143
+ ");
144
+
145
+ $stmt->execute();
146
+
147
+
148
+
149
+ //---------------------------------------
150
+
151
+ // 更新②
152
+
153
+ //---------------------------------------
154
+
155
+ // ステートメント発行
156
+
157
+ $stmt = $pdo->prepare
158
+
159
+ ("
160
+
161
+ 動作確認済みのSQL(UPDATE)
162
+
163
+ ");
164
+
165
+ $stmt->execute();
166
+
167
+
168
+
169
+ // コミット
170
+
171
+ $pdo->commit();
172
+
173
+
174
+
175
+ //---------------------------------------
176
+
177
+ // メール送信
178
+
179
+ //---------------------------------------
180
+
181
+ $stmt = $pdo->prepare
182
+
183
+ ("
184
+
185
+ 送信ユーザーを抽出するSELECT文
186
+
187
+ ");
188
+
189
+ $stmt->execute();
190
+
191
+ // 取得データを連想配列として格納
192
+
193
+ $aryList = $stmt->fetchAll(PDO::FETCH_CLASS);
194
+
195
+
196
+
197
+ foreach( $aryList as $row ) {
198
+
199
+ // ヘッダ
200
+
201
+ $header = '';
202
+
203
+ // 差出人アドレス
204
+
205
+ $header = "From:test@XXXXX.sakura.ne.jp\n";
206
+
207
+ // 返信先アドレス
208
+
209
+ $header .= "Reply-To:test@XXXXX.sakura.ne.jp\n";
210
+
211
+ //------------------
212
+
213
+ // ユーザーに届くメールをセット
214
+
215
+ //------------------
216
+
217
+ // 件名
218
+
219
+ $subject = "件名";
220
+
221
+ // 本文
222
+
223
+ $strMessage = <<< messagetext
224
+
225
+ {$row->NAME}様
226
+
227
+ XXXXXXXXXXXXXXXXXX
228
+
229
+ XXXXXXXXXXXXXXXXXX
230
+
231
+ XXXXXXXXXXXXXXXXXX
232
+
233
+ messagetext;
234
+
235
+ //------------------
236
+
237
+ // 送信
238
+
239
+ //------------------
240
+
241
+ mb_send_mail($row->EMAIL , $subject, $strMessage , $header );
242
+
243
+ }
244
+
245
+ ?>
246
+
247
+ ```
248
+
249
+
250
+
251
+ 繰り返しになりますが、
252
+
253
+ 上記のコードは、/home/XXXXX/www/の直下に置いて、http://XXXXX.sakura.ne.jp/test.phpでアクセスすると動作します。
254
+
255
+ しかし、/home/XXXXX/に置いて、cronで実行すると動きません。
256
+
257
+ また、ソースコードをメール送信のみに変更するとcronは動作しました。
258
+
259
+
260
+
261
+ 上記の処理(DB関連の処理?)に「**cronで実行した時のみ発生する問題**」があると思うのですが・・・。
262
+
263
+
264
+
265
+ よろしくお願いいたしますm(__)m

1

誤字修正

2018/12/09 03:44

投稿

miki0901
miki0901

スコア14

test CHANGED
File without changes
test CHANGED
@@ -34,11 +34,11 @@
34
34
 
35
35
 
36
36
 
37
- 「/usr/local/bin/php /home/XXXXX/tesssst.php」
37
+ 「/usr/local/bin/php /home/XXXXX/test.php」
38
38
 
39
39
  や、
40
40
 
41
- 「cd /home/XXXXX; /usr/local/bin/php /home/XXXXX/tesssst.php」
41
+ 「cd /home/XXXXX; /usr/local/bin/php /home/XXXXX/test.php」
42
42
 
43
43
  なども試しましたが、これらもエラーメールすらとどきませんでした。
44
44