wget
(phpスクリプトから)画像ファイルをダウンロードするために使用したいが、特定のサイズを超えるファイルをダウンロードしたくない。
でファイルサイズを制限できますwget
か?そうでない場合、より良い方法は何ですか?
wget
(phpスクリプトから)画像ファイルをダウンロードするために使用したいが、特定のサイズを超えるファイルをダウンロードしたくない。
でファイルサイズを制限できます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で最大ファイルサイズを設定する合理的な方法はないようです。
ulimit
(参照bash(1)
、setrlimit(2)
)となりますが、また仕事wget(1)
、それは少し重い利きですが。
wgetには、-Q
--quota
複数のURL(再帰リストまたは入力リスト)が指定されたときに最大ダウンロード量を制限するオプションがあります。
https://www.gnu.org/software/wget/manual/html_node/Download-Options.html
$n
バイトよりも大きいファイルを作成することを禁止できます(ulimit -f $(($n/512)); curl --max-filesize $n …)
。curl
ファイルサイズが$n/512
512バイトブロックを超えると、エラーで中止されます。