[PHP-users 28685] Re: 同時アクセスがあった場合のエラー処理

Shu Sawada luna @ lunanet.gr.jp
2006年 3月 10日 (金) 03:00:14 JST


さわだです。

> 今回の場合とケースは違いますが、
> このあたりのスレッドを何気に思い出しました。
> 
> >[PHP-users 27006] Re: ダウンロードヘッダー出力後の処理の制御
> http://ns1.php.gr.jp/pipermail/php-users/2005-September/027523.html
> 
> 応用で何かできるかも・・・
> http://php.s3.to/man/features.connection-handling.html

なるほど。
接続が終了する前(PHPが動いている間)であれば、状態を取れるということですね。
わりと長めの動作をするようなスクリプトであれば、ブラウザが閉じられた
あるいは中止を押下したと推定することはできそうです。

確かにPHPが動いている状況なら何とかなるような気もするんですが、
今回のケースでは素直に作るとPHPは動いていない状態だと思うので、
ちょっと実装がイメージできないでいるのでした。

----
ところで、27006で例示されているコードについてちょっと試してみました。
firefox 1.5.0.1 / WindowsXP Pro SP2 です。

if ($issuccess == 1) {
        mail("luna@***********", "tt", "hoge");
}

として、PHPがダウンロード作業を終了した気分になったら、メールを送るように
してみました。
ダウンロードには10秒程度時間が掛かりそうなサイズのファイル(5MBぐらい)を
用いています。

- ダイアログが出て「キャンセル」押下 -> 何も起こらない
- ダイアログが出て「OK」押下 -> ダウンロード完了後メール届く
- ダイアログを放置してfirefoxに先読みさせる -> ダイアログ出たままでメール届く

ということで、まあそうなるよね、という結果だと思います。
元質問者の方は解決ということにしているようですが、「保存の押下」をトリガには
できていないわけで。(クライアントにダウンロード自体はされているんですが)
PHPの実行中に通信が中断したかどうかしか把握できないと思うので、ブラウザの挙動に
結びつけるのはなかなか難しいかもですね、、、
長時間の処理(複雑なクエリとか)を行うような場合はナイスなのかな、と思います。
(使ったことあるような気もするんですが、、、(忘

-- 
Shu Sawada
http://luna.lunanet.gr.jp/


PHP-users メーリングリストの案内