PHP get_headers: ส่งคำขอ HTTP HEAD ผ่านพร็อกซี
ส่ง stream context ไปยัง get_headers โดยตรง เลือก HEAD อย่างตั้งใจ และตัดสินใจว่าจะติดตามการเปลี่ยนเส้นทางหรือไม่
ใน PHP นั้น get_headers() ยอมรับ stream context เป็นอาร์กิวเมนต์ตัวที่สาม บน PHP 8 การตรวจสอบเฮดเดอร์สำหรับ URL แบบ HTTP สามารถนำการตั้งค่าพร็อกซีของตัวเองมาด้วยได้:
$context = stream_context_create([
'http' => [
'proxy' => 'tcp://proxy.example.net:8080',
'request_fulluri' => true,
'method' => 'HEAD',
'follow_location' => 0,
'timeout' => 10,
],
]);
$headers = get_headers('http://example.net/file.zip', false, $context);
if ($headers === false) {
throw new RuntimeException('Header request failed');
}พร็อกซีคือปลายทาง TCP สำหรับตัวห่อสตรีม HTTP แทนที่โฮสต์และพอร์ตตัวแทนด้วยผู้สมัครที่ไม่ต้องพิสูจน์ตัวตนจากรายการพร็อกซี HTTPสำหรับการตรวจสอบ HTTP สาธารณะนี้ request_fulluri จัดเตรียม URI ปลายทางแบบเต็มในบรรทัดคำขอ HTTP ตามที่พร็อกซีส่งต่อหลายตัวคาดหวัง context นี้เป็นของการเรียกครั้งนี้ มันไม่เปลี่ยน context เริ่มต้นที่การอ่าน URL อื่นใช้
แม้ชื่อฟังก์ชันจะเป็นเช่นนั้น วิธีคำขอเริ่มต้นของมันคือ GET วิธี HEAD ที่ระบุชัดเจนจะขอเมทาดาทาการตอบกลับจากเซิร์ฟเวอร์โดยไม่มีเนื้อหาการตอบกลับที่สอดคล้องกัน เซิร์ฟเวอร์อาจปฏิเสธ HEAD หรือจัดการต่างออกไป ดังนั้นการตรวจสอบเฮดเดอร์ที่สำเร็จจึงไม่ใช่หลักฐานว่าการดาวน์โหลดในภายหลังจะสำเร็จ
ที่นี่ การติดตามการเปลี่ยนเส้นทางถูกปิดเพื่อตรวจสอบการตอบกลับครั้งแรก จากนั้นเฮดเดอร์ Location และสถานะการเปลี่ยนเส้นทางจึงเป็นผลลัพธ์ที่มีประโยชน์แทนที่จะเป็นคำสั่งให้ดึง URL อื่น หากการตรวจสอบควรติดตามการเปลี่ยนเส้นทาง ให้เปลี่ยนนโยบายนั้นอย่างตั้งใจและคำนึงถึงเฮดเดอร์การตอบกลับเพิ่มเติม
อาร์กิวเมนต์ false เก็บอาร์เรย์เฮดเดอร์แบบมีดัชนี ใช้ true เมื่อการแยกแบบเชื่อมโยงมีประโยชน์มากกว่า