
(PHPスクリプトから)を使用して画像ファイルをダウンロードしたいのですが、特定のwget
サイズ以上のファイルをダウンロードしたくありません。
ファイルサイズを制限できますかwget
?そうでなければ、より良い方法は何ですか?
答え1
ダウンロードスクリプトを書くときcurl
。 Wgetは出力を解析し、サイト全体を再帰的にインポートできますが、カールには特定のファイルの実際のダウンロードに関連するより多くのオプションがあります。マニュアルページの関連オプションは次のとおりです。
--max-filesizeは、
ダウンロードするファイルの最大サイズ(バイト単位)を指定します。要求されたファイルがこの値より大きい場合、転送は開始されず、カールは終了コード63を返します。
注:ダウンロードする前にファイルサイズが常にわかっているわけではなく、これらのファイルの場合、ファイル転送が指定された制限より大きくなっても、このオプションは効果がありません。
これが特定のファイルでのみ機能するという意見は考慮する価値があります。クライアントは、ダウンロードを開始する前にファイルサイズを報告するためにサーバーを使用します。すべてではありませんが、ほとんどのサーバーがこれを報告します。
答え2
wgetを使用したい場合は、ダウンロードせずにファイルサイズをテストする方法は次のとおりです。
wget --spider $URL 2>&1 | awk '/Length/ {print $2}'
$URL
もちろん、ダウンロードしたいファイルのURLはどこにありますか?
したがって、出力に応じてスクリプトを調整できます。たとえば、
{ [ $(wget --spider $URL 2>&1 | awk '/Length/ {print $2}') -lt 20971520 ] && wget $URL; } || echo file to big
ダウンロードサイズを20MBに制限するために使用されます。
(コードは参考のために厄介です。)
答え3
はい、wgetを使用して最大ファイルサイズを設定する合理的な方法があります。質問は理由が十分です。したがって、このリンクにはwgetの優れたパッチがあり、wgetがコンパイルされました。私は正当な理由でそれを使用しており、うまく動作します。 Linuxリポジトリのde wgetに追加してください。
https://yurichev.com/wget.html
頑張ってください。
答え4
wgetには、-Q
--quota
複数のURLが指定されている場合(繰り返し入力リストとして)、最大ダウンロードサイズを制限するオプションがあります。
https://www.gnu.org/software/wget/manual/html_node/Download-Options.html