[PHP-users 35807] PHPバックグラウンド動作&リダイレクトについて

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

[PHP-users 35807] PHPバックグラウンド動作&リダイレクトについて

沓掛紳也
はじめまして
PHPの動作で質問したいことがありましてメールいたします。
よろしくお願いします


以下の操作を行いたいと考えております。

・1000件のメール送信
・FORMのactionはsend.php
・send.phpが読まれると即ブラウザはresult.phpへ遷移する。
・ブラウザは遷移してもバックグラウンドでメールが送信されている
・WindowsサーバーとLINUXサーバー双方で動作させたいので、execなどのシステム関数は使用できない

下記のURLを参照して
http://xoops.hypweb.net/modules/UsersWiki/person/nao-pon/blog/2006-11-17

以下のようにコーディングしたのですがメール送信が完了した後でないとブラウザの画面が遷移しませんでした。

原因又は対策等お分かりになる方いらっしゃいましたらお教えいただけたらと思います。
よろしくお願いします。

------------パターン1---------------------------------------
// ブラウザとのコネクションが切れても実行し続ける
ignore_user_abort(TRUE);

// ブラウザにはリダイレクトを通知
$location_url = 'http://yahoo.co.jp';
while($i=ob_get_level()){
  ob_end_clean();
}

$out = "\r\n";
header("Content-Length: ".strlen($out));
header("Connection: close");
header("Location: " . $location_url);
echo $out;

@ob_flush();
@flush();

//メール送信
$Mail->sendP();

------------パターン2---------------------------------------
// ブラウザとのコネクションが切れても実行し続ける
ignore_user_abort(TRUE);

// ブラウザにはリダイレクトを通知
$location_url = 'http://yahoo.co.jp';
while($i=ob_get_level()){
  ob_end_clean();
}

?>
<SCRIPT type="text/javascript">
<!--
setTimeout("link()", 0);
function link(){
  //location.href='http://www.onlineconsultant.jp/';
  location.href = '<?php
printf("%suser/mailendregist.php?created=%d&birthyear=%d",$Common->RootUrlAdmin[0],$User->request["created"],$User->request["birthyear"]);
?>';
}
-->
<?php
@ob_flush();
@flush();

//メール送信
$Mail->sendP();
_______________________________________________
PHP-users mailing list  [hidden email]
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3
Reply | Threaded
Open this post in threaded view
|

[PHP-users 35808] Re: PHPバックグラウンド動作&リダイレクトについて

nakaji
nakajiともうします

> ・1000件のメール送信
> ・FORMのactionはsend.php
> ・send.phpが読まれると即ブラウザはresult.phpへ遷移する。
> ・ブラウザは遷移してもバックグラウンドでメールが送信されている
> ・WindowsサーバーとLINUXサーバー双方で動作させたいので、execなどのシステム関数は使用できない

javascript使って、send.phpに投げっぱなしにしてすぐにページ遷移したほうが
簡単なんじゃないかと思いました。submitボタン押したらjQueryが発火!みたいな。

PHP側でexec使えないならMail_Queueなどのキュー管理に突っ込むのが正当派か
なと思いましたが、1000通ということで分割してCronとかで回さないとスパム判
定されそうで面倒くさいですね。



_______________________________________________
PHP-users mailing list  [hidden email]
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3
Reply | Threaded
Open this post in threaded view
|

[PHP-users 35809] Re: PHPバックグラウンド動作&リダイレクトについて

naoaki
In reply to this post by 沓掛紳也
こんにちは。

過去に似たような事をしたことあります。(メール送信処理ではありませんでしたが)
その際は、JavaScriptが使えない状況だったので、cURL関数使いました。

今回のを例に取るなら以下の様な感じになります。

・メールの送信プログラムはPOSTでFROMやTOやデータBODYを受け取るようにしておく
・同一サーバーに設置しておく(http://localhost/exec/send.php とか)
・WEBページからそのプログラムへcurl関数をつかって、マルチスレッドでPOSTする

完全に同時に1000POSTするのがアレでしたら、例えば250ずつとかって区切ってあげるとか。
1000回をシリアライズして処理するより、4分の1の時間で完了するかと思います。




2014年6月5日 17:28 沓掛紳也 <[hidden email]>:

> はじめまして
> PHPの動作で質問したいことがありましてメールいたします。
> よろしくお願いします
>
>
> 以下の操作を行いたいと考えております。
>
> ・1000件のメール送信
> ・FORMのactionはsend.php
> ・send.phpが読まれると即ブラウザはresult.phpへ遷移する。
> ・ブラウザは遷移してもバックグラウンドでメールが送信されている
> ・WindowsサーバーとLINUXサーバー双方で動作させたいので、execなどのシステム関数は使用できない
>
> 下記のURLを参照して
> http://xoops.hypweb.net/modules/UsersWiki/person/nao-pon/blog/2006-11-17
>
> 以下のようにコーディングしたのですがメール送信が完了した後でないとブラウザの画面が遷移しませんでした。
>
> 原因又は対策等お分かりになる方いらっしゃいましたらお教えいただけたらと思います。
> よろしくお願いします。
>
> ------------パターン1---------------------------------------
> // ブラウザとのコネクションが切れても実行し続ける
> ignore_user_abort(TRUE);
>
> // ブラウザにはリダイレクトを通知
> $location_url = 'http://yahoo.co.jp';
> while($i=ob_get_level()){
>   ob_end_clean();
> }
>
> $out = "\r\n";
> header("Content-Length: ".strlen($out));
> header("Connection: close");
> header("Location: " . $location_url);
> echo $out;
>
> @ob_flush();
> @flush();
>
> //メール送信
> $Mail->sendP();
>
> ------------パターン2---------------------------------------
> // ブラウザとのコネクションが切れても実行し続ける
> ignore_user_abort(TRUE);
>
> // ブラウザにはリダイレクトを通知
> $location_url = 'http://yahoo.co.jp';
> while($i=ob_get_level()){
>   ob_end_clean();
> }
>
> ?>
> <SCRIPT type="text/javascript">
> <!--
> setTimeout("link()", 0);
> function link(){
>   //location.href='http://www.onlineconsultant.jp/';
>   location.href = '<?php
> printf("%suser/mailendregist.php?created=%d&birthyear=%d",$Common->RootUrlAdmin[0],$User->request["created"],$User->request["birthyear"]);
> ?>';
> }
> -->
> <?php
> @ob_flush();
> @flush();
>
> //メール送信
> $Mail->sendP();
> _______________________________________________
> PHP-users mailing list  [hidden email]
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
_______________________________________________
PHP-users mailing list  [hidden email]
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3