Je veux utiliser wget
(à partir d'un script php) pour télécharger des fichiers image, mais je ne veux pas télécharger des fichiers d'une certaine taille.
Puis-je limiter la taille des fichiers avec wget
? Sinon, quelle est la meilleure façon?
Je veux utiliser wget
(à partir d'un script php) pour télécharger des fichiers image, mais je ne veux pas télécharger des fichiers d'une certaine taille.
Puis-je limiter la taille des fichiers avec wget
? Sinon, quelle est la meilleure façon?
Réponses:
Si vous effectuez des scripts de téléchargement, vous devriez envisager d'utiliser curl
plutôt. Wget peut analyser la sortie et récupérer récursivement des sites entiers, mais curl a beaucoup plus d'options concernant le téléchargement réel d'un fichier spécifique. Voici l'option pertinente dans la page de manuel:
--max-filesize
Spécifiez la taille maximale (en octets) d'un fichier à télécharger. Si le fichier demandé est plus grand que cette valeur, le transfert ne démarrera pas et curl reviendra avec le code de sortie 63.
REMARQUE: la taille du fichier n'est pas toujours connue avant le téléchargement, et pour de tels fichiers, cette option n'a aucun effet même si le fichier le transfert finit par être supérieur à cette limite donnée.
La remarque à ce sujet ne fonctionne que pour certains fichiers mérite d'être considérée. Le client dépend du serveur pour signaler la taille du fichier avant de commencer le téléchargement. La plupart des serveurs, mais certainement pas tous, le signalent.
Si vous souhaitez utiliser wget, voici un moyen de tester la taille du fichier sans téléchargement:
wget --spider $URL 2>&1 | awk '/Length/ {print $2}'
où $URL
est l'URL du fichier que vous souhaitez télécharger, bien sûr.
Vous pouvez donc conditionner votre script en fonction de la sortie. tel que:
{ [ $(wget --spider $URL 2>&1 | awk '/Length/ {print $2}') -lt 20971520 ] && wget $URL; } || echo file to big
pour limiter la taille du téléchargement à 20 Mo.
(le code est moche, à titre informatif uniquement).
Il ne semble pas y avoir de moyen raisonnable de définir une taille de fichier maximale avec wget.
ulimit
(voir bash(1)
, setrlimit(2)
) travaillera également avec wget(1)
, mais il est un peu lourde.
wget a une -Q
--quota
option qui limite la quantité maximale de téléchargement lorsque plusieurs URL (liste récursive ou entrée) sont fournies.
https://www.gnu.org/software/wget/manual/html_node/Download-Options.html
$n
octets:(ulimit -f $(($n/512)); curl --max-filesize $n …)
.curl
s'interrompra avec une erreur si la taille du fichier dépasse les$n/512
blocs de 512 octets.