我試圖做一個貝寶IPN系統,這是一個貝寶系統自動檢查匯款。他們提供了一個基本的系統腳本來完成它。php腳本可以停止?
系統很簡單,你在腳本上得到$ _POST [],然後打開一個套接字與貝寶,然後他們迴應你在套接字中有效或無效的單詞。
我的問題是,打開套接字,我失去了50%的連接時間。腳本連接時,我沒有任何問題。所以,我把它改成20名改掉,而不是1:
<?
//...
mail("[email protected]", "subject", "executing", "some headers"); //mailme when this is execute
$try = 20;
do{
$fp = @fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 15);
$try--;
}while($try>0 && !$fp);
if (!$fp) { // HTTP ERROR
mail("[email protected]", "subject", "error_message_not_connecting", "some headers");
} else {
mail("[email protected]", "subject", "connected_reading_socket", "some headers");
//fputs(..); and the loop reading working.
}
?>
在我的測試,現在的工作severals改掉的100%。但是在實際轉賬中,這個數字不能達到20-30%的時間。我收到第一封郵件,但沒有收到第二封郵件。
我在想..如果貝寶只打開連接到我的服務器1秒,php腳本可以停止一些trys後,停止繼續?或任何想法這裏有什麼問題?
您可以添加一個延遲計數器充當增加了失敗和'sleep'但你'while'循環內部的時間量的計時器。通過這種方式,您將獲得更少嘗試獲得成功連接的機會 – pankar
使用curl - php函數可能更好地處理連接。所以,你可以檢查從連接中獲得的錯誤信息。 – scalopus
@pankar假設你最大的執行時間也增加了。否則,它只會增加你的機會,PHP會阻止你。 – eis