Socket Problem
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ausgabe
datei
fehler
fehlermeldung
glauben
gleiche fehlermeldung
helfen
hilfe
host
http
information
jemand
lust
maximum
mode
variablen vergessen
verbesserten funktion
zeile
-
Hallo
Errorcode:
Fatal error: Maximum execution time of 30 seconds exceeded in E:\Apache2\htdocs\socket_class.php on line 104
socket.php:
[Begin]
<?php
include('socket_class.php');
$ns= new socket;
$ns->set_host('www.aol.com', 1);
$ns->connect();
$ns->send("HEAD");
$responde= $ns->read();
$responde= explode("\r\n", $responde);
echo $responde[12];
socket_close ($ns->socket);
?>
[End]
socket_class.php:
[Begin]
<?php
class socket
{
var $service_port;
var $host= '';
var $socket= '';
var $out= '';
var $in= '';
function set_host($address, $mode = 0)
{
$this->service_port= getservbyname('www', 'tcp');
if($mode == 0)
{
$this->host= $address;
}
elseif($mode == 1)
{
$this->host= gethostbyname ($address);
}
}
function connect()
{
$this->socket= socket_create (AF_INET, SOCK_STREAM, 0);
$result= socket_connect ($this->socket, $this->host, $this->service_port);
return $result;
}
function send($method, $path = '/', $http_version = '1.1')
{
$this->in= $method." ".$path." HTTP/".$http_version."\r\n";
return socket_write ($this->socket, $this->in, strlen ($this->in));
}
function read()
{
//Das ist Line 104
while($this->out= socket_read($this->socket, 2048))
{
$return .= $this->out;
return $return;
}
}
}
?>
[End]
$ns->connect() gibt True(1) aus.
$ns->send("HEAD") gibt 17(17 Bytes gesendet aus, des ist richtig) aus.
Kann mir jemand helfen?
Wenn ihr weitere Informationen braucht schreibt es. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
//Das ist Line 104
while($this->out= socket_read($this->socket, 2048))
sry vielleicht etw<as schelcht gemacht
edit: es sind keine 104 zeilen habe die gesamten kommentare entfernt -
Du sendest einen unvollst?ndigen HTTP 1.1 Header. Der Server wartet dann weiter auf die fehlenden Daten und daher bekommst du irgendwann den Fehler gemeldet, weil das PHP-Skript wegen zu langer Ausf?hrungszeit beendet wird. Ein vollst?ndiger (Mindestanforderung) HTTP 1.1 Header sieht so aus:
--------------
GET / HTTP/1.1\r\n
Host: www.lima-city.de\r\n
\r\n
--------------
Dies gilt f?r alle Methoden, also auch HEAD, POST und den anderen, die es noch gibt.
Du musst die Funktion send() also wie folgt ab?ndern (habe mal zus?tzlich noch paar andere Verbesserungen eingef?gt):
function send($method, $path = '/', $http_version = '1.1')
{
if ($http_version != "1.1")
$http_version = "1.0";
$this->in= $method." ".$path." HTTP/".$http_version."\r\n";
if ($http_version == "1.1")
$this->in .= "Host: " . this->host . "\r\n";
$this->in .= "\r\n";
return socket_write ($this->socket, $this->in, strlen ($this->in));
}
-
@o-checka: Das geht ebenfalls leider nicht bringt die gleiche Fehlermeldung.
-
Stimmt doch gar nicht...
Bei mir kommt dann einmal eine Fehlermeldung, weil ich in der von mir verbesserten Funktion ein $ vor einer Variablen vergessen habe. Wenn ich das korrigiere, dann funktioniert es. Man bekommt zwar ?berhaupt keine Ausgabe (kA, was du versuchst mit echo $responde[12] auszugeben, mit echo $responde bekommt man zumindest die Serverantwort zu sehen), aber auch keine Fehlermeldung mehr. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage