[英]“Could not open socket”
可能是我的服務器在執行fsocketopen命令時遇到了麻煩嗎?
確切地說 - 雖然它並不一定意味着你的服務器出了問題。 它只是意味着在服務器和recaptcha服務器之間的某處,存在阻止打開套接字連接的網絡通信問題。
這可能是很多事情。 它可能是您的代碼或服務器上的配置問題(特別是如果您的服務器上的配置的某些方面是動態的),它可能是您的服務器具有的連接級別的問題,它可能是網絡配置托管您的服務器的問題,它可能是您的服務器和recaptcha服務器之間的任何地方的網絡配置問題,它可能是托管的帶寬問題,它可能是他們一方的配置問題。 您可能希望使用fsockopen
的額外錯誤報告參數來查看是否可以獲取任何有意義的消息。 您也可以嘗試在完全不同的網絡上至少2-3個不同的服務器上進行設置 - 這也可以為您提供有關問題所在位置的具體指示。
另一個問題是,你將如何管理這類事情。 fsockopen
有時候無法獲得連接,因為即使是配置最好的網絡環境,也沒有通信保證。 硬件失敗,事故發生,網絡管理員有胖手指的時刻,遠程服務器混淆,全球熱核戰爭可以取出數據中心 - 你永遠不會知道。 因此,您必須編寫代碼(並管理您的設置),這樣您就可以獲得故障發生時的后備情況,並顯示最終用戶可接受的錯誤消息。
您可能希望查看PHP的set_error_handler
函數並設置一個函數,以便在fsockopen
失敗的情況下調用。 在某些情況下,我喜歡用它來觸發異常,如下所示:
function throw_error_exception($number = 0, $str = '',$file = null,$line = null) {
throw new ErrorException($str, 0, $number, $file, $line);
}
set_error_handler('throw_error_exception',E_ALL);
使用該設置,您可以管理fsockopen
連接,如下所示:
try {
fsockopen('remote.host.com',8080,$fso_errnum,$fso_errstr,30);
} catch(Exception $e) {
// here you can look at properties/methods of $e, and $fso_* values, and
// figure out what nice error messages you want to display for your users
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.