fsockopen php操作失敗是因為伺服器設定問題,沒有監聽localhost,其解決方案就是重新設定伺服器網路環境即可。
本文操作環境:Windows7系統、PHP7.1版,DELL G3電腦
特定問題:
php fsockopen 本機出錯?如何解決fsockopen php操作失敗問題?
使用fsockopen進行非同步呼叫時出現錯誤,相同的程式碼在阿里雲centos、騰訊雲win2008下沒有出現問題。
host位址寫入127.0.0.1或localhost出現:
Warning: fsockopen(): 由於目標機器積極拒絕,無法連線。 (10061)
host寫入目前伺服器網域出現:
Warning: fsockopen():由於連線方在一段時間後沒有正確答覆或連線的主機沒有反應,連線嘗試失敗。 (10060)
host位址目前伺服器內網IP如 192.168.3.3 對應正常,沒有錯誤。
並且,在該伺服器向其他伺服器fsockopen或其他伺服器想該伺服器fsockopen都沒有問題,可以正常傳送。
程式碼如下:
function async_post($host,$path,$data){ $post = http_build_query($data); $len = strlen($post); $fp = fsockopen( $host , 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)\n"; } else { $out = "POST $path HTTP/1.1\r\n"; $out .= "Host: $host\r\n"; $out .= "Content-type: application/x-www-form-urlencoded\r\n"; $out .= "Connection: Close\r\n"; $out .= "Content-Length: $len\r\n"; $out .= "\r\n"; $out .= $post."\r\n"; fwrite($fp, $out); fclose($fp); } }
最終是透過內網ip呼叫的,但是為什麼會這樣呢?
解決方法:
已經找到問題根源:
伺服器設定問題,沒有監聽localhost
伺服器網路環境,不知道哪個網管搞的,伺服器不能透過外網IP存取自己。
這就導致,fsockopen只能透過192那啥來存取。
推薦學習:《PHP影片教學》
以上是如何解決fsockopen php操作失敗問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!