0

ブラウザーからのクエリ/GET データで正しく実行される PHP ルーチンがあり、バックグラウンドで実行できるように、起動後にブラウザーから切断したいと考えています。ファイルをディスクに書き込み、リンクをユーザーに電子メールで送信するため、ブラウザーは不要になります。

ブラウザが立ち上げたiframeのパスはこんな感じ

src="tool/scan.php?types=All&order=Newest&email=test@example.com"

iframe ターゲットを、すべてを主力ファイルに渡す仲介者に置き換えscan.phpます。

exec()使用できることは理解していますが、どうやらコマンド ラインをフォーマットする方法を正確に理解していないようで、これまでに見つけたリソースに困惑しています。

$_SERVER["DOCUMENT_ROOT"] を渡してみました。パス/ファイル名 . $_SERVER['QUERY_STRING'] 逐語的に、しかしそれはうまくいかないようです (エコーは以下の引用符で値を示します):

exec("/var/www/vhosts/example.com/httpdocs/tool/scan.php?types=All&order=Newest&email=test@example.com");

それで、コマンドラインがブラウザのパラメーターと異なるのだろうかと思ってこれを試してみましたが、それもそうではありません

exec("/var/www/vhosts/example.com/httpdocs/tool/scan.php types=All order=Newest email=test@example.com");

誰かがポインターを提供できる場合は、正しい方向へのヒントが必要です。私はあまり PHP の知識がなく、本もよく読んでいませんが、いくつかの適切なヒントを参考にすれば、たいていの障害を回避することができます。ありがとう...

4

1 に答える 1

0

あなたの最善の策は、おそらくMessage Queueを作成することです。したがって、フォーム ポストを受け入れるスクリプトは、データをメッセージ キューに送信します。メッセージ キューは、処理するデータを保持する MySQL データベース内のテーブルにすることができます。次に、数分ごとに実行される cron サービスを使用して、すべてのメッセージをキューから取り出して処理します。

関数内で $_GET パラメーターを使用して PHP を実行する場合は、次のように実行exec()できます。

exec('php-cgi -f /var/www/vhosts/example.com/httpdocs/tool/scan.php types=All order=Newest email=test@example.com');

またはこの方法:

exec('wget "http://example.com/tool/scan.php?types=All&order=Newest&email=test@example.com"');
于 2013-06-21T05:09:46.060 に答える