(phpスクリプトから)wget
を使用して画像ファイルをダウンロードしたいのですが、特定のサイズを超えるファイルをダウンロードしたくありません。
wget
でファイルサイズを制限できますか?そうでない場合、より良い方法は何ですか?
ダウンロードのスクリプトを作成する場合は、代わりにcurl
の使用を検討する必要があります。 Wgetは出力を解析してサイト全体を再帰的に取得できますが、curlには特定のファイルの実際のダウンロードに関連するオプションがはるかに多くあります。これは、manページの関連オプションです。
--max-filesize
ダウンロードするファイルの最大サイズ(バイト単位)を指定します。要求されたファイルがこの値より大きい場合、転送は開始されず、curlは終了コード63で戻ります。
注:ダウンロード前にファイルサイズが常にわかっているとは限りません。そのようなファイルの場合、ファイル転送がこの制限よりも大きくなっても、このオプションは効果がありません。
一部のファイルに対してのみ機能することに関する注意は、検討する価値があります。クライアントはサーバーに依存して、ダウンロードが始まる前にファイルのサイズを報告します。ほとんどの、しかし確実ではないすべてのサーバーがこれを報告します。
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
ダウンロードサイズを20 MBに制限します。
(コードは醜く、情報提供のみを目的としています)。
Wgetで最大ファイルサイズを設定する合理的な方法はないようです。
wgetには-Q
--quota
複数のURL(再帰的または入力リスト)が指定されている場合の最大ダウンロード量を制限するオプション。
https://www.gnu.org/software/wget/manual/html_node/Download-Options.html