こんにちは、私は PHP が初めてで、私が尋ねようとしていることが可能であるかどうか、または意味があるかどうかさえわかりませんが、ここに行きます。
WebServer でスタンドアロン アプリケーションを実行しているかのように PHP スクリプトを実行したいのですが、実装しようとしているのは、顧客が Web サイトで何かを購入し、Web サイトで支払い確認通知が表示されたら、ユーザーが支払いが成功したことを表示するページに移動すると開始される大きな注文生成プロセスに影響を与えることなく、ブラウザ ウィンドウを閉じたりログオフしたりできます。
現在、私はAJAXを利用して支払い処理後のPHPスクリプトを呼び出しており、そのスクリプトを保持してユーザーの中止呼び出しを無視しています。
これは、支払いが正常に受領されたことをユーザーに伝えるページです。
ありがとう.php
これは、支払いが正常に受領された後にのみ実行する必要がある処理を実行するページです
FinishCheckoutProcess.inc.php
これで、 thankyou.phpは AJAX を使用してFinishCheckoutProcess.inc.phpを非同期的に実行し、 FinishCheckoutProcess.inc.phpには次のような PHP.ini 設定が含まれています。
AJAX と ignore_user_abort(true) の組み合わせにより、ユーザーがブラウザ ウィンドウを閉じてもエラーなしで支払いプロセスを実行できますが、このスクリプトはユーザーやブラウザとは関係がないため、ブラウザから独立したスタンドアロン アプリケーションのように、このスクリプトをバックグラウンドで実行できます。
また、私の WebServer は Apache で、OS は Linux(Ubuntu OS) です。
私の仕事は終わっていますが、それを行うためのより良い/安全な方法があるかどうか知りたいだけです.
このサイトは、どの本よりも私を助けてくれました。ですから、私のような初心者に時間を寄付してくれる専門家の皆さんは素晴らしいです。これからも頑張ってください。
再びどうもありがとう。
受け取った提案に基づいて、「exec」メソッドを使用して FinishCheckoutProcess.inc.php を実行すると、データベース関連のコマンドが実行され、さらに PHP スクリプトを実行できるようになります。
FinishCheckoutProcess.inc.phpは、他の PHP スクリプトを実行する一連の他の PHP スクリプトを順番に実行するため、「exec」コマンドを使用して FinishCheckoutProcess.inc.php を実行すると、問題が発生します。
FinishCheckoutProcess.inc.phpプロセスは MySQL データベースとの対話も行うため、このスクリプトを「 exec」コマンドを使用して実行すると、これを行うことができます。現在、必要な MySQLi 接続オブジェクトをこの PHP スクリプトに渡しています。「 exec」を使用して同じ方法で渡すことができますか
また、 IMagickとImageMagickを使用して 4 つの画像ファイルのセットを生成するため、プロセスは非常に重くなります。
注文されたすべての製品に対して 4 つの画像ファイルのセットが生成されるため、1 つの製品の数量が 10 の場合、生成されるファイルの合計は 1x10x4 = 40 になります。
一方の数量が 2 で、もう一方の数量が 4 の 2 つの製品がある場合、生成されるファイルの合計は 1x2x4 = 8 + 1x4x4 = 16 = 24 になります。
そのため、このスクリプトは長時間実行する必要があり、タイムアウトの理由で停止することはできません。開始したことを終了する必要があります。
基本的に、FinishCheckoutProcess.inc.phpのロジックとプロセスは非常に複雑なので、「exec」がそれを処理できるかどうかを確認したいだけです。
また、よくわかりませんが、それらのいくつかは $_SESSION 変数も使用していますが、これが問題である場合は変更できます。$_SESSION 変数は 1 か所でのみ使用され、$_SESSION はFinishCheckoutProcess の前にブラウザーで設定されます。 inc.phpスクリプトが実行されます。いくつかの以前の PHP スクリプトによって。
親/呼び出しスクリプト、つまり thankyou.php とは無関係に FinishCheckoutProcess.inc.php スクリプトを実行したいだけなので、ユーザーがブラウザを閉じても、親/呼び出しスクリプトのためにFinishCheckoutProcess.inc.phpが停止または中止されません。つまり、 thankyou.phpは実行されなくなりました。