PHP: file_get_contents() failed with SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version

วันนี้ผมมาแชร์ error ที่เกิดจากการเรียกใช้ function file_get_contents() บน php ตัวฟังก์ชันนี้ปกติเราใช้ในการดึงข้อมูลขจากเว็บไซต์มาเก็บในตัวแปรเป็น String เช่น มีเว็บไซต์ให้บริการข้อมูลอัพเดทค่าเงิน โดยเรียกผ่าน api url ที่เขากำหนด

ตัวอย่าง api url “https://blockchain.info/ticker” ให้บริการข้อมูลราคาค่าเงินสกุลต่างๆ โดยส่งข้อมูลออกมาดังตัวอย่าง

{
  "AUD" : {"15m" : 46766.08, "last" : 46766.08, "buy" : 46766.08, "sell" : 46766.08, "symbol" : "AUD"},
  "BRL" : {"15m" : 179884.98, "last" : 179884.98, "buy" : 179884.98, "sell" : 179884.98, "symbol" : "BRL"},
  "CAD" : {"15m" : 43281.72, "last" : 43281.72, "buy" : 43281.72, "sell" : 43281.72, "symbol" : "CAD"}, 
...
}

เมื่อเราต้องการดึงข้อมูลจาก api url นี้มาเก็บ เราจะเรียกใช้ฟังก์ชัน file_get_contetns($url) ดังนี้

$url=”https://blockchain.info/ticker”;

$json = file_get_contents($url);

ตัวแปร $json ถ้าดึงข้อมูลได้เราจะสามารถใช้คำสั่ง “echo $json; ” แสดงข้อมูลออกมาได้ แต่ในกรณีนี้กลับขึ้นข้อความดังนี้

Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version in ...

เบื้องต้นได้ลองเช็ค openssl version จาก phpinfo() พบว่าเป็นเวอร์ชัน “OpenSSL 0.9.8zh” และได้ลองทดสอบ file_get_contents() จากอีกเครื่องที่สามารถดึงข้อมูลได้ พบว่าเป็นเวอร์ชัน “OpenSSL 1.0.1e-fips” จึงทดลองอัพเกรด APP SERVER ทำให้ได้ OpenSSL 1.0.2u 20 และทดสอบโค้ดอีกครั้ง พบว่า Error “SSL23_GET_SERVER_HELLO” หายไปแล้วครับ

You may also like...