7

ユーザーが Web フォーム経由で zip ファイルをアップロードできるようにする必要があります。サーバーは、Apache Web サーバーで Linux を実行しています。Archive::Zipのようなモジュールを使用してこのアーカイブを抽出することには利点がありunzipますか?それとも、バッククォートを使用してシステム コールを実行する必要がありますか?

4

3 に答える 3

14

Archive::Zip のドキュメントによると、 Archive ::Extractを使用したほうがよいでしょう:

zip (および/または他のアーカイブ) を抽出するだけの場合は、代わりに Archive::Extract を使用することを検討することをお勧めします。これは、はるかに使いやすく、アーカイブ固有の機能を除外するためです。

Archive::Extract は最初に Archive::Zip を試行し、unzip失敗した場合はバイナリにフォールバックするため、これは興味深いことです。 したがって、Archive::Zip が好ましいオプションであるように思われます。

Archive::Zip は、zlib システム ライブラリへの低レベル インターフェイスであるCompress::Raw::Zlibを使用します。したがって、これは純粋な Perl 実装ではありません。つまり、パフォーマンスが に似ていますunzip。つまり、パフォーマンスの観点からはunzip、Archive::Zip を優先する理由はありません。

于 2009-11-03T17:07:13.383 に答える
5

バイナリを実行するunzipと、プロセスは fork/exec および

  1. 新しいプロセスをインスタンス化する
  2. より多くのメモリを消費します (生成されたプロセスの間)。

への正しいパスを使用して構成する必要もありますunzip。これらすべてを考えると、私はライブラリのアプローチを強く好みます。

于 2009-11-03T17:00:51.993 に答える
1

1つの懸念はメモリです。Archive::Tarメモリ リークが発生した困難な方法 (実稼働 Web サーバーがクラッシュした) を発見しました。そのため、外部コマンドへのシステム コールの代わりにモジュールを使用することは全体的には良い考えですが (理由については他の回答を参照してください)、モジュールに落とし穴がないことを確認する必要があります。

于 2009-11-04T02:51:13.093 に答える