Я хочу использовать wget
(из сценария php) для загрузки файлов изображений, но не хочу загружать файлы определенного размера.
Могу ли я ограничить размер файла wget
? Если нет, что лучше?
Я хочу использовать wget
(из сценария php) для загрузки файлов изображений, но не хочу загружать файлы определенного размера.
Могу ли я ограничить размер файла wget
? Если нет, что лучше?
Ответы:
Если вы загружаете сценарии, вы должны рассмотреть возможность использования curl
вместо этого. Wget может анализировать выходные данные и рекурсивно извлекать целые сайты, но у curl есть гораздо больше опций, относящихся к фактической загрузке определенного файла. Вот соответствующая опция на странице руководства:
--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 МБ.
(код некрасив, только в ознакомительных целях).
Кажется, нет разумного способа установить максимальный размер файла с помощью 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-байтовые блоки.