1

PHPのshell_exec関数を使用して、サーバーでbashスクリプトを呼び出しています。

shell_exec("bash -x /tesladata/isetools/0-extractbytickerforweb.bash $ticker $isedate > /t24alv2/iseoutput/$ticker-$isedate-$thistime.log &");

さて、以前はCGIスクリプト( "bash -x ...")からコマンドを実行していましたが、はるかに高速でした(瞬時)。これで、スクリプトが実行され(> 10秒)、結果のページがレンダリングされるまでに非常に遅い時間がかかります。

なぜこれがとても遅いのか、何か考えはありますか?サイト全体がPHPに変換されているため、CGIではなくPHPからbashスクリプトを実行したいと思います。おそらく別の関数がより適していますか?任意のアイデアをいただければ幸いです。

4

2 に答える 2

4

PHPのexec関数とシステム関数を見ることができますが、それらがスクリプトの実行を高速化する理由はわかりませんが、試してみる価値はあります。PHPではなくapacheの問題であると確信しています(このバグスレッドがこの結論の原因です) 。

また、公開Webサイトでこれらのコマンドを使用する場合は特に注意が必要です。escapeshellargescapeshellcmdを利用してください。

于 2009-11-18T16:37:54.583 に答える
4

ApacheをNTサービスとして実行しているWindowsユーザーの場合:デフォルトのシステムアカウントではなくユーザーアカウントで実行するようにApacheサービスを構成することで、shell_exec()またはexec()のパフォーマンスを大幅に向上させることができるようです。

たとえば、Apacheを標準のNTサービスとして実行すると、shell_exec()コマンドに15〜17秒かかることがわかりました(具体的には、svnコマンドを実行します)。ユーザーアカウントで実行するようにApacheサービスを変更すると、時間が4〜5秒に短縮されました。これは大きな違いです。

これを行うには、サービスコントロールパネルを開き、Apacheサービスを右クリックして、[プロパティ]を選択します。[ログオン]タブをクリックし、[ローカルシステムアカウント]ラジオボタンを[このアカウント]に変更します。次に、サービスで使用するユーザーアカウントを指定します。

私はWindows管理の第一人者ではないことに注意してください。ユーザーアカウントでサービスを実行すると、私が気付いていない重要な影響が生じる可能性があります。

于 2009-12-03T03:58:29.923 に答える