ฉันต้องการใช้wget
(จากสคริปต์ PHP) เพื่อดาวน์โหลดไฟล์ภาพ แต่ไม่ต้องการดาวน์โหลดไฟล์ในขนาดที่กำหนด
ฉันสามารถ จำกัด ขนาดไฟล์ด้วยได้wget
หรือไม่? ถ้าไม่เป็นวิธีที่ดีกว่าคืออะไร?
ฉันต้องการใช้wget
(จากสคริปต์ PHP) เพื่อดาวน์โหลดไฟล์ภาพ แต่ไม่ต้องการดาวน์โหลดไฟล์ในขนาดที่กำหนด
ฉันสามารถ จำกัด ขนาดไฟล์ด้วยได้wget
หรือไม่? ถ้าไม่เป็นวิธีที่ดีกว่าคืออะไร?
คำตอบ:
หากคุณดาวน์โหลดสคริปต์คุณควรพิจารณาใช้curl
แทน Wget สามารถแยกวิเคราะห์ผลลัพธ์และเรียกทั้งไซต์ซ้ำ ๆ แต่ curl มีตัวเลือกเพิ่มเติมที่เกี่ยวข้องกับการดาวน์โหลดไฟล์จริง นี่คือตัวเลือกที่เกี่ยวข้องในหน้า man:
--max-filesize
ระบุขนาดสูงสุด (เป็นไบต์) ของไฟล์ที่จะดาวน์โหลด หากไฟล์ที่ร้องขอมีขนาดใหญ่กว่าค่านี้การถ่ายโอนจะไม่เริ่มขึ้นและจะกลับมาพร้อมกับรหัสออก 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
จะยกเลิกพร้อมข้อผิดพลาดหากขนาดไฟล์เกินบล็อก 512 ไบต์(ulimit -f $(($n/512)); curl --max-filesize $n …)
curl
$n/512