teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

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

2018/12/09 03:44

投稿

miki0901
miki0901

スコア14

title CHANGED
File without changes
body CHANGED
@@ -22,4 +22,112 @@
22
22
  なども試しましたが、これらもエラーメールすらとどきませんでした。
23
23
 
24
24
  動作しない原因が分かる方、ご教授くださいm(__)m
25
- よろしくお願い致します。
25
+ よろしくお願い致します。
26
+
27
+ ―――――――――――――――――――――――――――――――――――
28
+ 追記
29
+ ―――――――――――――――――――――――――――――――――――
30
+ 実行されるコードを
31
+ 以下のようにメール送信のみにしたところ、
32
+ 「cd /home/XXXXX; /usr/local/bin/php test.php」
33
+ でメール送信が成功しました!!
34
+
35
+ ```PHP
36
+ <?php
37
+ $header = '';
38
+ // 差出人アドレス
39
+ $header = "From:test@XXXXX.sakura.ne.jp\n";
40
+ // 返信先アドレス
41
+ $header .= "Reply-To:test@XXXXX.sakura.ne.jp\n";
42
+
43
+ //------------------
44
+ // 送信
45
+ //------------------
46
+ mb_send_mail('宛先アドレス' , 'cron_test', 'message', $header );
47
+ ?>
48
+ ```
49
+ しかし、DB更新の処理を入れるとやはり処理が実行されず、postmasterへメールも届きませんでした。
50
+ cronの設定には問題がなさそうです。
51
+
52
+ **www直下において直接アクセスするとやはり動くのですが、cronで実行したときのみ、DB処理を入れると動かないという状況です。**
53
+
54
+ 実行している処理は以下の通りです。
55
+ ```PHP
56
+ <?php
57
+ // 関数や定数ファイルの読み込み
58
+ include_once($_SERVER['DOCUMENT_ROOT'] . '/test/common/include.php');
59
+
60
+ // pdoを返却する関数を実行
61
+ $pdo = funcGetPdo();
62
+ // トランザクションの開始
63
+ $pdo->beginTransaction();
64
+
65
+ //---------------------------------------
66
+ // 更新①
67
+ //---------------------------------------
68
+ // ステートメント発行
69
+ $stmt = $pdo->prepare
70
+ ("
71
+ 動作確認済みのSQL(INSERT)
72
+ ");
73
+ $stmt->execute();
74
+
75
+ //---------------------------------------
76
+ // 更新②
77
+ //---------------------------------------
78
+ // ステートメント発行
79
+ $stmt = $pdo->prepare
80
+ ("
81
+ 動作確認済みのSQL(UPDATE)
82
+ ");
83
+ $stmt->execute();
84
+
85
+ // コミット
86
+ $pdo->commit();
87
+
88
+ //---------------------------------------
89
+ // メール送信
90
+ //---------------------------------------
91
+ $stmt = $pdo->prepare
92
+ ("
93
+ 送信ユーザーを抽出するSELECT文
94
+ ");
95
+ $stmt->execute();
96
+ // 取得データを連想配列として格納
97
+ $aryList = $stmt->fetchAll(PDO::FETCH_CLASS);
98
+
99
+ foreach( $aryList as $row ) {
100
+ // ヘッダ
101
+ $header = '';
102
+ // 差出人アドレス
103
+ $header = "From:test@XXXXX.sakura.ne.jp\n";
104
+ // 返信先アドレス
105
+ $header .= "Reply-To:test@XXXXX.sakura.ne.jp\n";
106
+ //------------------
107
+ // ユーザーに届くメールをセット
108
+ //------------------
109
+ // 件名
110
+ $subject = "件名";
111
+ // 本文
112
+ $strMessage = <<< messagetext
113
+ {$row->NAME}様
114
+ XXXXXXXXXXXXXXXXXX
115
+ XXXXXXXXXXXXXXXXXX
116
+ XXXXXXXXXXXXXXXXXX
117
+ messagetext;
118
+ //------------------
119
+ // 送信
120
+ //------------------
121
+ mb_send_mail($row->EMAIL , $subject, $strMessage , $header );
122
+ }
123
+ ?>
124
+ ```
125
+
126
+ 繰り返しになりますが、
127
+ 上記のコードは、/home/XXXXX/www/の直下に置いて、http://XXXXX.sakura.ne.jp/test.phpでアクセスすると動作します。
128
+ しかし、/home/XXXXX/に置いて、cronで実行すると動きません。
129
+ また、ソースコードをメール送信のみに変更するとcronは動作しました。
130
+
131
+ 上記の処理(DB関連の処理?)に「**cronで実行した時のみ発生する問題**」があると思うのですが・・・。
132
+
133
+ よろしくお願いいたしますm(__)m

1

誤字修正

2018/12/09 03:44

投稿

miki0901
miki0901

スコア14

title CHANGED
File without changes
body CHANGED
@@ -16,9 +16,9 @@
16
16
  「Could not open input file: tesssst.php 」
17
17
  と言われました。
18
18
 
19
- 「/usr/local/bin/php /home/XXXXX/tesssst.php」
19
+ 「/usr/local/bin/php /home/XXXXX/test.php」
20
20
  や、
21
- 「cd /home/XXXXX; /usr/local/bin/php /home/XXXXX/tesssst.php」
21
+ 「cd /home/XXXXX; /usr/local/bin/php /home/XXXXX/test.php」
22
22
  なども試しましたが、これらもエラーメールすらとどきませんでした。
23
23
 
24
24
  動作しない原因が分かる方、ご教授くださいm(__)m