…生活與工作…個人的生活雜記….
blur business close up code

PHP file_get_contents 讀取網頁資料時間過久解決方法

最近因為ipv6怪怪的,所以網頁載入外部資料時會被file_get_contents卡住,導致超時連結。除了可以改用curl之外。

也可以在file_get_contents中加入bindto函數。

自 PHP 5.1.0 起支援 bindto,可用來指定 IP 位址(可以是 IPv4 或 IPv6)和/或 PHP 將用來訪問網路的埠號。語法是 ip:port(若果想讓系統自動選取可以將 IP 或埠號設為 0)。

注: 因 FTP 在標準運行時建立兩個套接字連線,此時不能在 bindto 選項中指定埠號。因此對於 FTP wrapper 只支援一種語法 ip:0。

只使用ipv4讀取

file_get_contents($url, false, stream_context_create(['socket' => ['bindto' => '0:0']]));

只使用ipv6讀取

file_get_contents($url, false, stream_context_create(['socket' => ['bindto' => '[0]:0']]));