2010-12-08 11 views
1

私のC++アプリケーションからサーバー上のPHPスクリプトにHTTP POST requestを送信しています。 HttpOpenRequest/HttpSendRequest/etcを使用してください。現在、PHPスクリプトの実行が完了してからHttpSendRequestが返されます。この機能を変更するにはどうすればよいですか?HttpSendRequestはPHPスクリプトの終了を待っていません

私のC++アプリケーションが終了する直前にデータを送信していますので、PHPスクリプトが実行を完了するのを待って10秒以上そこに座ることは望ましくありません。私はちょうどそれがデータを送信し、アプリを終了します。

私が考えていたことの1つは、PHPスクリプトに別のプロセスでexecコマンドを使って別のPHPスクリプトを生成させることだったので、最初のスクリプトはすぐに戻ります。しかし、私はHTTP POSTリクエストで多くのデータを送信しているので、このデータを生成されたプロセスに渡す必要があります。

理想的には、HttpSendRequestを待たないように設定するフラグを設定します。私はドキュメントではっきりと何かを見ることができませんでしたが、何かを見逃しているかもしれません。

答えて

2

PHPスクリプトでignore_user_abort()が必要な場合があります。その後、データが送信された後でCクライアントからの接続を閉じることができます.PHPはそれが行うべきことを何でもし続けます。

+0

問題は、それがブロックしているHttpSendRequestをということです。だから私はその関数が戻るまで接続を閉じることはできません。 – Dan

+0

しかし、応答を受け取るまではブロックされていますよね? http://www.php.net/manual/en/features.connection-handling.php#71172 – rik

+0

Aha!あなたが投稿したリンクのコードは、ignore_user_abort()呼び出しと同じようにしたいものです。ヘッダー( "Connection:close")とob_ *関数を使用すると、接続を早期に閉じることができます。他の誰かがこの問題を抱えている場合、この情報であなたの投稿を更新する価値があるかもしれません。ありがとう:-) – Dan

3

INTERNET_FLAG_ASYNCInternetOpenと電話をかけ、コールバックに何も影響を与えないでください。

ここであなたが始めるためにいくつかのサンプルコードです。

http://www.codeproject.com/KB/IP/asyncwininet.aspx

を次に(RIKの通り)を、それが完全に実行されることを確認するためにあなたのPHPスクリプトの先頭にignore_user_abort(true);を呼び出します。

ignore_user_abort

関連する問題