私はfsockopenとfwriteを使ってデータを送受信しています。私のアプリケーションは適切な応答を受け取りますが、何らかの種類のタイムアウトまで待ってから続行します。私は、応答を受信し終えた後、接続が正常に終了していないと思われます。誰かが私のコードを見てもらえますか?データ受信後にHTTP接続を閉じる
private static function Send($URL, $Data) {
$server = parse_url($URL, PHP_URL_HOST);
$port = parse_url($URL, PHP_URL_PORT);
// If the parsing the port information fails, we will assume it's on a default port.
// As such, we'll set the port in the switch below.
if($port == null) {
switch(parse_url($URL, PHP_URL_SCHEME)) {
case "HTTP":
$port = 80;
break;
case "HTTPS":
$port = 443;
break;
}
}
// Check if we are using a proxy (debug configuration typically).
if(\HTTP\HTTPRequests::ProxyEnabled) {
$server = \HTTP\HTTPRequests::ProxyServer;
$port = \HTTP\HTTPRequests::ProxyPort;
}
// Open a connection to the server.
$connection = fsockopen($server, $port, $errno, $errstr);
if (!$connection) {
die("OMG Ponies!");
}
fwrite($connection, $Data);
$response = "";
while (!feof($connection)) {
$response .= fgets($connection);
}
fclose($connection);
return $response;
}
あなたは 'timeout'の値で動かしてみましたか? http://us2.php.net/manual/en/function.fsockopen.php –
これが役立つかどうかは不明ですが、http://php.net/manual/en/function.feofの上部にあるメモをご覧ください。 "警告:サーバーによってfsockopen()によって開かれた接続が閉じられなかった場合、feof()はハングします。これを回避するには、下記の例" –
@BenLeeHmmを参照してください。変更は機能していないようです。 30秒間もタイムアウトしています。 – user978122