EC-CUBEのメルマガ配信で100通/分、1000通/時 の制約を守りたい。
配信数は 約500を考えています。 数日に1回、送信時間も 10分ぐらいなら問題なし。
EC-CUBEは sleep()でも 1分弱で Gateway Time-out が起こるので、「95通送ったら1分休む」的なアプローチができない。そこで、バックグラウンドでの実行を考えています。
exec(ls)、 exec(whoami)などは実行できました。
同一ディレクトリーに呼出し元ファイル(aa.php)と呼び出せれるファイル(xxxx.php)を作成して xxxx.phpが引数を受け取り実行されるか実験しています。
呼出し元ファイル(aa.php)
<?php $send_id = 1024; $cmd = "/usr/bin/php xxxx.php " . $send_id; exec($cmd, $opt, $return_ver); print_r($opt); echo '戻り値; ' . $return_ver; ?> を実行すると、 Array ( [0] => Content-type: text/html [1] => [2] => Array [3] => ( [4] => [0] => Status: 404 [5] => [1] => Content-type: text/html [6] => [2] => [7] => [3] => No input file specified. [8] => ) [9] => 戻り値; 255 ) 戻り値; 0
呼び出せれるファイル(xxxx.php)
<?php //引数を受け取る $send_id = $argv[1]; //同じディレクトリにテキストファイル作成 $file = 'aaaa.txt'; $text = $send_id . ', ' . $send_id; file_put_contents($file, $text); ?>
試したこと
- 実験環境:Windows7,Wampserverでは 成功しました。(php のディレクトリーはWindows用に変えました。)
- /usr/bin/php phpのディレクトリは間違いないと思います。
- ちなみに $cmd 'php' としても同じでした。
*「戻り値」を見ての感想 Status: 404 や No input file specified を見ると、xxxx.php が見えていないような気がしますが、aa.php と xxxx.phpは同じディレクトリーにあります。
$cmd = "/usr/bin/php xxxx.php " . $send_id; を
$cmd = "/usr/bin/php ./xxxx.php " . $send_id; としても同じでした。
- xxxx.phpを直接 ブラウザーから呼び出すと そのディレクトリーにaaaa.txtファイルが生成されています。
テクニカルサポートセンター(辛子 様)から回答済
心の籠った 丁寧なお返事をいただきました。官舎!
「ご回答差し上げることができません。ご了承をお願いいたします。
なお、SuiteXは共用レンタルサーバのため、スクリプト実行時間に制限を設け
ております。明確な数値は非公開となりますが、その制限に抵触している可能性
がございます。」
・・・・・テキストファイル1個作るだけで 「スクリプト実行時間に制限を設け
ております・・・・」
$cmd = "nohup php xxxx.php " . $send_id . " > /dev/null &";
とできれば、バックグラウンド処理としては 優秀なのでしょうが まず、引数を渡し別phpを実行したいです。
なにぶんPHP初心者です、よろしくお願いします。

