- ベストアンサー
PHPでバックグランド処理について
- PHPでバックグランドで処理させたいと考えています。300通前後のメールを一括送信するために、この送信処理をバックグランドで処理させたいと考えています。解決策や糸口をご教授頂けないでしょうか?
- back.phpというファイルでメールの送信処理を記述し、mail.phpというファイルでPHPのsystem関数を使用してバックグランドでback.phpを実行しようとしていますが、うまくいきません。パスの指定方法が問題なのかもしれません。本番サーバーとXampp環境では異なる方法が必要なのでしょうか?ご教授お願いします。
- PHPでバックグランドでメール送信処理を行いたいです。300通前後のメールを一括送信するために、バックグランドで処理させたいと考えています。しかし、system関数やexec関数を使用してもうまくいきません。解決策や糸口をご教授頂けないでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 そもそも、引数が配列で渡っていないです・・・。 $obo =$_POST['ID']; $ndd ="/usr/local/bin/php /www/htdocs/ac/wp-content/plugins/member/back.php ".$obo; $ref =system($ndd); この$oboが配列ですが、$nddの文字列は、 /usr/local/bin/php /www/htdocs/ac/wp-content/plugins/member/back.php Array と等価です・・・。 標準入力に配列を渡そうとしていますが、これは無理です。 なので、 一度implodeして、何かの区切り文字列で渡して、explodeするとか・・・。
その他の回答 (2)
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 うーん・・・、部分的に記述されても、さっぱりわかりません・・・。 ソースコードを書いて、どこがどうおかしいのか、補足して頂けますか?
補足
申し訳ありません。 説明不足で・・・ 下記にソースを書かせて頂きます。 フロントで実行するファイル mail.php if($_POST['submit']=='on'){ //var_dump($_POST); if(isset($_POST['ID'])){ //var_dump($_POST['ID']); $mailObj = Mail::factory("smtp",$params); $obo =$_POST['ID']; $ndd ="/usr/local/bin/php /www/htdocs/ac/wp-content/plugins/member/back.php ".$obo; $ref =system($ndd); 上記コードはsystem関数を使用するまでの部分です。 メンバーの一覧から選択してsubmitとすると、配列でメールアドレスにつながるためのIDが$_POST['ID']に入ります。 そして、この$_POST['ID']をメールを送信するために使用する(バックグランドで動かすための)back.phpファイルに渡したいと思っています。恐らく、back.phpには配列が渡されていると思うのですが、bakc.phpでその渡された配列をどのように取得すればよいのか分かりません。 下記がback.phpのソースです。 if(!$link=mysql_connect($dbSERVER,$dbUSER,$dbPASS)){ $flag =false; }else if(!mysql_select_db($dbName,$link)){ $flag =false; }else if(!mysql_set_charset('utf8',$link)){ $flag = false; } $mailObj = Mail::factory("smtp",$params); if($flag ==true){//DBの接続 foreach($argv[1] as $values){ $posted = "SELECT user_nicename,user_email FROM hogehoge"; $posted = sprintf("SELECT user_nicename,user_email FROM hogehoge1 WHERE ID='%d'",mysql_real_escape_string($values)); $query = mysql_query($posted,$link); while($row = mysql_fetch_array($query,MYSQL_NUM)){ mb_language('ja'); mb_internal_encoding('utf-8'); $returnMail ='hogehoge@gmail.com'; //get_option('from_mail'); $subject ='テストメール';//get_option('mail_subject'); $rec =$argv[1][0];//$posted[0]['user_email'] ; ----省略(メールを飛ばすソース)----- var_dump($argv[1][0]); 最後にvar_dumpしている物の返り値が string(1) "A" string(13) "string(1) "A"" と言う返り値です。 mail.phpからメールアドレスを1つだけ渡して、1つのメールアドレスを送信するようにback.phpを変更すれば、メールは飛ばされます。 上記のことから、引数は渡っていると思うのですが、引数が配列になった場合の取り出し方が分かりません。 原因はわかりますでしょうか? 宜しくお願いします。
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 上手くいっていない・・・というのは、 どこがどのように上手くいっていないのでしょうか? mail.phpからの呼び出しは大丈夫なように見えますが?
補足
回答ありがとうごじます。 説明不足で申し訳ありません。 現在段階では、質問にある内容はクリアしてback.phpはsystem関数の呼び出しにより動いてくれているようです。 結局パスの指定方法の問題だったようです。 ただ、新たに問題が発生しておりよろしければご教授頂きたいのですが、 system関数から引数を渡しています。 この引数はDBからメールアドレスを取得するためのIDが配列で入っています。 array( [0]=>320 [1]=>321 .... ) と言った形です。 それで色々調べたのですが、system関数からの引数は配列になった状態になるため、連想配列と言う形になると考えたました。 そこで、$argv[1]でIDが入った配列をback.phpでループさせて配列の値を取り出したいと考えたのですが、ここが上手くいきません。 back.phpのサイトで、var_dump($argv[0][1])として、mail.phpで結果を受け取ってみると string(1) "A" string(13) "string(1) "A"" と表示されます。 渡している配列は array( [0]=>320 ) です。 原因はなんでしょうか? ちなみに、bakc.phpに直接メールアドレスをmail.phpからsystem関数を使って渡すと、問題なく送信されます。
お礼
goo教えての使いかたが分かっていなくて、お礼入力する事を補足で売ってしまいました。 改めて、ありがとうございました。
補足
taka451213様 ありがとうございます!! お陰様で問題なく解決する事ができました。 >>標準入力に配列を渡そうとしていますが、これは無理です。 標準入力と言う言葉を初めてしりました・・・・勉強不足ですね。 やはり、教えていただいたように、配列は渡っていなくて渡す前に文字列に変換ご、再び配列にするなどの方法で解決しました。 ありがとうございます。 標準入力について調べてみました。 「OSの実行するプログラムをデータを受け取るデフォルトの入口」とあります。 これは、サーバーのOSの事を指していると思うのですが、今一理解できていません。 もしよろしければ、どのような事か教えて頂けませんか? 1つ分かっている事は、標準入力で配列を渡す事は無理と言うことですよね? いずれにしても本当にありがとうございました。