私は再びここに来て、PHP についてますます学んでいますが、私のシナリオにはまだいくつかの問題があります。私のシナリオのほとんどは問題なくプログラムされ、解決されていますが、問題を見つけましたが、それを理解するには、それを説明する必要があります最初:
任意のクライアントから呼び出すことができる PHP スクリプトがあり、その作業は、リクエストを受信し、手動で定義したリストからプロキシに ping を送信し、プロキシが使用可能かどうかを確認し、使用可能であれば取得に進みます。 POST メソッドで「curl」を使用した応答。ロジックは次のようになります。
$proxyList = array('192.168.3.41:8013'=> 0, '192.168.3.41:8023'=>0, '192.168.3.41:8033'=>0);
$errorCounter = 0;
foreach ($proxyList as $key => $value){
if(!isUrlAvailable($key){ //It means it is NOT available so I count errors
$errorCounter++;
} else { //It means it is AVAILABLE
$result = callThisProxy($key);
}
}
この関数"isUrlAvailable"
は、$fsockopen を使用して、プロキシが使用可能かどうかを確認します。そうでない場合は、前述のようにPOST
withを作成します。関数には次のようなものがあります。CURL
callThisProxy()
$ch = curl_init($proxyUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,'xmlQuery='.$rawXml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$info = curl_exec ($ch);
if($isDebug){echo 'Info in the moment: '.$info.'<br/>';}
curl_close ($ch);
しかし、いくつかのシナリオをテストしています。プロキシの可用性の検証と呼び出しの間にプロキシをオフにするとどうなりますか? つまり:
foreach ($proxyList as $key => $value){
if(!isUrlAvailable($key){ //It means it is NOT available so I count errors
$errorCounter++;
} else { //It means it is AVAILABLE
$result = callThisProxy($key);//What happen if I kill the proxy when the result is being processed?
}
}
私はそれをテストしましたが、それを行うと、 $result は空の文字列になります''
。しかし問題は、そのリクエストを失ったことです。私の目標は、次$key
のプロキシで再試行することです。"do, while"
だから、私は結果を呼び出すときに考えてきました。しかし、それで問題ないのか、それとももっと良い方法があるのか わからないので、この問題について助けを求めてください. お時間をいただきありがとうございます。どんな回答でも大歓迎です。ありがとう。