- ベストアンサー
WindowsサーバーでのCGI実装についての疑問
- WindowsサーバーのCGIでclose(STDOUT)するとCGIが終了するようですが、UNIX系のサーバーでは問題なく動作する方法とは異なるようです。
- Windowsサーバーでブラウザに処理を戻しつつ、時間のかかる処理を行いたい場合にはどのようにすれば良いのか、適切な方法がわかりません。
- ネットで調べたところ、UNIX系のサーバーではclose(STDOUT)を行っても問題なく処理が実行される方法があるようですが、Windowsサーバーでは異なる方法が必要なのかもしれません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>ネットなどで見るかぎり、UNIX系のサーバーではよく行われる方法のようなのですが、Windowsでの実装になにか違いがあるのでしょうか? 検索したら、こういうことらしいです。ビルド環境の違いのようですね。 CGIの動作について http://chaichan.web.infoseek.co.jp/qa3000/qa3198.htm suEXEC サポート http://httpd.apache.org/docs/2.2/ja/suexec.html >また、Windowsサーバーでこのようにブラウザに処理を戻しつつ、時間のかかる処理を行いたい場合にはどうすればよいのでしょうか? こちらは、他の方にお願いします。
その他の回答 (1)
- entree
- ベストアンサー率55% (405/735)
> ネットなどで見るかぎり、UNIX系のサーバーではよく行われる方法のようなのですが、 > Windowsでの実装になにか違いがあるのでしょうか? Apacheのソースコードを見てみました。Linuxでは Unix 独自のコード部分でepoll を 使ってディスクリプタの監視をしているようです。ただ、Windows には同じAPI はない ようで、別の実装がされているように見えました。 少なくとも、mod_cgi.cの中で、Windows 環境ではAPR_FILES_AS_SOCKETSが 定義されないのでこの部分で分岐が行われます。 ------ #if APR_FILES_AS_SOCKETS apr_file_pipe_timeout_set(script_in, 0); apr_file_pipe_timeout_set(script_err, 0); b = cgi_bucket_create(r, script_in, script_err, c->bucket_alloc); #else b = apr_bucket_pipe_create(script_in, c->bucket_alloc); #endif ------