|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2002-03-01 11:21 UTC] karl at crantorland dot com
PHP is unrelyable in telling when data has arrived on a socket. socket_get_status() once the feof has resulted in true will never reset even when data has arrived. I have done extensive testing. I connect to an smtp server so i know the server side is working. this is what is suppose to happen: 1)client connects 2)server accepts and sends 220 ready reponse 3)client recieves 220 and sends EHLO to server 4)server recives EHLO and sends back 250 reponse along with supported options 5)client recives 250 reponse(smtp goes on with more stuff but this is the point where my script would disconnect) i use a while(!feof($socket)) loop to get all the data off the port. the first one works and then after that no matter what data arrives feof($socket) is always true. socket_get_status($socket) confirms that php thinks no more has arrived but when i look at the server i can see that data has been sent. This was all done under 4.1.0. i upgraded to 4.1.1 and now nothing works at all. testing code is here. feel free to connect to the server and port specified for testing. http://dcl.nvps.net/socket.phps http://dcl.nvps.net/socket.php If i am wrong about this and someone has a script that proves me wrong please email it to me and disregard this post. PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Nov 19 00:00:01 2025 UTC |
Here's your problem and this works for me. Took me a few days to figure this one out. Right now I'm working on serial communications in php. It seems it can be done but only with some effort. (under windows nt, xp, 95, etc) well here's the telnet code.. ------------------ function telnet_get_til_input($socket=0) { $response = ''; if ($socket === 0) { return 0; } $line = fgets($socket, 1024); $response = $line; while ((!feof($socket)) and (!($line === false))) { $line = fgets($socket, 1024); if ($debugging) { echo $line; } $response .= $line; } return $response; }; // end function telnet_get_til_input ------------------ you might also want to make sure you put this code to connect ------------------ function telnet_connect($server='127.0.0.1',$port='23') { $socket = 0; $socket = fsockopen($server, $port); socket_set_timeout($socket,2,0); $response = telnet_get_til_input($socket); return $socket; }; // end function telnet_connect ------------------ and here's the disconnect code ------------------ function telnet_quit($socket) { return fclose($socket); }; // end function telnet_quit ------------------ you might want to edit those a lot to have extra commands in them.. but they work good. let's get some posts on com ports under windows and linux for php.. talk about limited..