Only variables can be passed by reference

gery

New member
hallo

ich habe folgenden code in einem meiner scripte:
PHP:
$iBytes = socket_recvfrom ($iSocket, $strBuffer, $iBytesToReceive , MSG_OOB, $strIpClient, NULL)

Das gibt mir folgende Fehlermeldung aus:
Code:
Fatal error: Only variables can be passed by reference in /var/www/localhost/htdocs/test.php on line 196

Wenn ich nun die Variable $strBuffer als Referenz übergebe:
PHP:
$iBytes = socket_recvfrom ($iSocket, & $strBuffer, $iBytesToReceive , MSG_OOB, $strIpClient, NULL)

Dann ändert sich leider gar nichts.

Habt ihr da eine Idee an was es liegt? Ich verwende php 5.2.

Gruss

gery
 
"NULL" ist keine Variable und kann auch nicht als Referenz übergeben werden siehe Doku zu Parameter 6
 
@IS-Media: finde ich eigentlich auch. also falls es eine andere funktion gibt, mit welcher ich die ip adresse des clients bekomme, bin ich offen für andere funktionen :)

@albu: habs gemacht, weil steht, dass man bei TCP verbindungen diese angabe nicht brauche... --> Ich verwernde TCP

danke und gruss
 
Code:
Heißt das jetzt, das Problem ist erledigt, oder dass Du es gar nicht erst versucht hast?

ich habe jetzt "NULL" als letzter Parameter als Port weggelassen und nichts angegeben. Nun funktioniert es auch damit:
PHP:
$iBytes = socket_recvfrom ($iSocket, & $strBuffer, $iBytesToReceive , MSG_OOB, $strIpClient)

jedoch wenn ich mit telnet nun connecte, dann wird wohl irgend etwas gesendet und der socket_recvfrom() wird verlassen mit dem String "" im $strBuffer.

socket_read funktioniert einwandfrei. Jedoch, wie bekomme ich da die ip des clients?
 
Zuletzt bearbeitet:
jedoch wenn ich mit telnet nun connecte, dann wird wohl irgend etwas gesendet und der socket_recvfrom() wird verlassen mit dem String "" im $strBuffer.

socket_read funktioniert einwandfrei. Jedoch, wie bekomme ich da die ip des clients?
Ich vermute, Du hast die falschen Parameter gesetzt. Vielleicht nochmal in die Doku schauen, da gibts auch ein Beispiel.
 
hab in meiner verzweiflung alle parameter durchprobiert (WAITALL etc) ging trotzdem nicht...

also wegen der client ip habt ihr auch keine ahnung?
das darf nicht sein -.- man kommuniziert ja mit einer ip, weshalb kann man bei einer tcp verbindung diese nicht rauskriegen bei socket_accept oder so!? oder dem socket der da draus entsteht...
 
hab in meiner verzweiflung alle parameter durchprobiert (WAITALL etc) ging trotzdem nicht...

also wegen der client ip habt ihr auch keine ahnung?
das darf nicht sein -.- man kommuniziert ja mit einer ip, weshalb kann man bei einer tcp verbindung diese nicht rauskriegen bei socket_accept oder so!? oder dem socket der da draus entsteht...
Wenn Du meinem Rat gefolgt wärest und die Doku gelesen hättest, dann hättest Du vielleicht diese Stelle gefunden:
phpmanual schrieb:
If the socket is of the type AF_UNIX type, name is the path to the file. Else, for unconnected sockets, name is the IP address of, the remote host, or NULL if the socket is connection-oriented.

Und wenn Du schon in der Doku bist, dort steht auch, wie man die Remote-Adresse rausbekommt, ich zitiere das jetzt hier mal nicht, sonst haben wir hier in einigen Wochen das komplette PHPManual auf hunderte Threads verteilt gepostet.
 
Wenn Du meinem Rat gefolgt wärest und die Doku gelesen hättest, dann hättest Du vielleicht diese Stelle gefunden:

na diese stelle habe ich ja auch schon lange gefunden!

und das hier ebenfalls:
Code:
socket_recvfrom($socket, $buf, 12, 0, $from, $port);

echo "Received $buf from remote address $from and remote port $port" . PHP_EOL;

aber ich habe gefragt, wie ich die client ip bekomme, wenn ich nicht mit socket_recvfrom arbeite...
 
Zuletzt bearbeitet:
Zurück
Oben