Ich sende und empfange Daten mit fsockopen und fwrite. Meine Anwendung erhält die richtige Antwort, scheint jedoch bis zu einer gewissen Zeit abzuwarten, bevor sie fortfährt. Ich vermute, dass ich die Verbindung nicht richtig schließe, nachdem sie die Antwort erhalten hat, was das Warten erklärt. Könnte sich jemand meinen Code ansehen?Schließen einer HTTP-Verbindung, nachdem Daten empfangen wurden
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;
}
Haben Sie versucht, mit dem 'Timeout'-Wert zu spielen? http://us2.php.net/manual/en/function.fsockopen.php –
Nicht sicher, ob dies hilft, aber schauen Sie sich die Notiz an der Spitze von http://php.net/manual/en/function.feof .php unter der Überschrift "Warnung: Wenn eine Verbindung, die von fsockopen() geöffnet wurde, nicht vom Server geschlossen wurde, wird feof() hängen bleiben. Um dies zu umgehen, siehe unten" –
@BenLee Hmm. Die Änderung scheint nicht zu funktionieren. Dauert immer noch 30 Sekunden bis zum Timeout. – user978122