ユーザーが Web フォーム経由で zip ファイルをアップロードできるようにする必要があります。サーバーは、Apache Web サーバーで Linux を実行しています。Archive::Zipのようなモジュールを使用してこのアーカイブを抽出することには利点がありunzip
ますか?それとも、バッククォートを使用してシステム コールを実行する必要がありますか?
3 に答える
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 を優先する理由はありません。
バイナリを実行するunzip
と、プロセスは fork/exec および
- 新しいプロセスをインスタンス化する
- より多くのメモリを消費します (生成されたプロセスの間)。
への正しいパスを使用して構成する必要もありますunzip
。これらすべてを考えると、私はライブラリのアプローチを強く好みます。
1つの懸念はメモリです。Archive::Tar
メモリ リークが発生した困難な方法 (実稼働 Web サーバーがクラッシュした) を発見しました。そのため、外部コマンドへのシステム コールの代わりにモジュールを使用することは全体的には良い考えですが (理由については他の回答を参照してください)、モジュールに落とし穴がないことを確認する必要があります。