2

最近、PHPライブラリではなくコマンドラインを使用して何かを実行することを選択した2つの状況に遭遇しました。たとえば、PHPでは次のようにします。

`curl http://someplace.com`

これの代わりに:

$ ch = curl_init();
curl_setopt($ ch、CURLOPT_URL、 "http://www.example.com/");
curl_setopt($ ch、CURLOPT_HEADER、0);
curl_exec($ ch);
curl_close($ ch);

もう1つの状況は、PHPインターフェイスの代わりにImageMagickのコマンドラインインターフェイスを使用することです。

私が話した何人かの人々は、ライブラリを使用する方が良いと思います。良いと言う人もいれば、安全だと言う人もいます。

あなたの意見は何ですか?どちらか一方を使用する利点は何ですか?

私は1つの利点を知っています。それは、コードが5行ではなく1行しかないことです。

4

3 に答える 3

5

私は常にライブラリを使用します:

  1. 2 回フォークする必要はありません (サブシェル用に 1 回、実行中のプログラム用に 1 回)。したがって、より高速です。

  2. コマンドライン引数のエスケープについて心配する必要がないため、セキュリティが向上します

コードの行数が気になる場合は、その 5 行を一度関数に記述し、必要なときにその関数を呼び出します。

于 2009-03-16T22:21:47.990 に答える
2

アプリケーションの実行は潜在的に危険であり、ほとんどの場合、コストのかかる操作です。とりわけ、プログラムに渡すすべてのパラメーターを適切にエスケープする必要があります。

また、新しいプロセスを作成するコストは、既存のプロセスで単純な関数を呼び出すよりもはるかに高くなります。

あなたがしていることは今はうまくいくかもしれませんが、アプリケーションが数千の同時ユーザーを持つようになるとうまくいきません. (あなたはそれを計画していますよね?:))

于 2009-03-16T22:22:36.757 に答える
1

コマンド ライン呼び出しを使用することとライブラリを使用することのトレードオフは、アプリケーションの速度と、アプリケーションが実行されているコンピューターの速度です。

このようなコマンド ライン呼び出しを行うたびに、PHP はプロセスをフォークする必要があります (実際には、シェルと実行するコマンドの 2 つです)。つまり、コンピューターは別のアプリケーションを起動する必要があります。これは、多くのシステム リソースを消費する高価なものです。あなた (またはあなたのスタートアップ プロセス) がコンピューターで一度にあまりにも多くのプログラムを起動しようとするとどうなるか考えてみてください。

ライブラリを使用する場合、プロセスをフォークする必要はありません。PHP 自体が、他のアプリケーションが行う作業を行っています。

とは言うものの、PHP ライブラリ経由では利用できないコマンド ライン アプリケーションを呼び出して問題を解決する、多くの運用 Web アプリケーションを知っています。それがアプリケーションのトラフィックの少ない部分、またはそれほど頻繁にアクセスされないページである場合、それを回避できる可能性がありますが、スケールするときが来ると、自分自身に大きな打撃を与えることになります.

考慮すべきセキュリティもあります。そのような PHP からコマンドを実行するとき、コマンド文字列を構築するために変数を使用している場合、次のようなリスクがあります。

;rm -rf /

コマンドに挿入されると、これは悪いことです (rm -rf / はファイル システム全体を削除します)。はい、これを処理するために入力変数をエスケープできますが、ベテランの PHP 開発者に、SQL クエリのハンド エスケープがどのように機能したかを尋ねてください。

要するに、おそらくそれを回避することはできますが、それはベストプラクティスではなく、将来、ファンに打撃を与えたときに多くの苦痛を自分で購入することになります.

于 2009-03-17T06:23:40.517 に答える