0

「 C 」で書いたプログラムを php で実行したいのですが、関数 php_exec を使ってみましたがうまくいきません。私の問題をより具体的にするために、いくつかの詳細を説明します。このプログラムは、ダウンロードを高速化するために使用されます。簡単に言えば、ユーザーは Web ページに入り、直接リンクを配置し、リンクを送信して、サーバーからの直接リンクを取得します。ここでの問題は、「どうすれば多くのユーザーが同時にリンクを送信すると php_exec が機能しないと思うので、これはサーバーに害を及ぼす可能性があるかどうかも知りたいです。ありがとうございました !

4

2 に答える 2

3

exec実行されたプログラムが終了するまで待機し、完全なスクリプトをブロックするため、おそらくそのような状況では使用したくないでしょう。

PHP ドキュメントには、次のように記載されています。

注:プログラムがこの関数で開始された場合、バックグラウンドで実行を継続するには、プログラムの出力をファイルまたは別の出力ストリームにリダイレクトする必要があります。そうしないと、プログラムの実行が終了するまで PHP がハングアップします。

ただし、リンクをキュー (おそらくデータベース) に追加し、時々 cron ジョブを実行して、キューに保存されているファイルをダウンロードすることをお勧めします。

優れた答えを持つ別の同様の質問もあります。

于 2012-07-08T19:56:12.200 に答える
1
// Start your 'downloader'
$handle = popen('/path/to/executable 2>&1', 'r');
// While it's generating output, print it to the screen
while (!feof($handle)){
    echo fread($handle, 2096);
}
// Close the process handle
pclose($handle);

これにより、複数のユーザーが同時に使用できるようになります。各 PHP プロセスは、独自の のコピーを fork し/path/to/executable、バックグラウンド プロセスの出力をユーザーの画面にフラッシュできるようにします。

于 2012-07-08T20:05:19.670 に答える