socket_read

(PHP 4 >= 4.1.0, PHP 5)

socket_read -- Reads a maximum of length bytes from a socket

Description

string socket_read ( resource socket, int length [, int type] )

The function socket_read() reads from the socket resource socket created by the socket_create() or socket_accept() functions. The maximum number of bytes read is specified by the length parameter. Otherwise you can use \r, \n, or \0 to end reading (depending on the type parameter, see below).

socket_read() returns the data as a string on success, or FALSE on error (including if the remote host has closed the connection). The error code can be retrieved with socket_last_error(). This code may be passed to socket_strerror() to get a textual representation of the error.

注: socket_read() returns a zero length string ("") when there is no more data to read.

Optional type parameter is a named constant:

  • PHP_BINARY_READ - use the system recv() function. Safe for reading binary data. (Default in PHP >= 4.1.0)

  • PHP_NORMAL_READ - reading stops at \n or \r. (Default in PHP <= 4.0.6)

See also socket_accept(), socket_bind(), socket_connect(), socket_listen(), socket_last_error(), socket_strerror() and socket_write().


add a note add a note User Contributed Notes
Ronin-php at onabout dot net
03-May-2006 03:06
Just a helper for those trying to use sockets to transfer large ammounts of info.

I was pulling my hair out forever trying to figure out why different strings sent by different socket_writes were getting concatenated by socket_read.

If you have a problem with this, try a sleep(), the delay allows the server to see the difference (it is able to do one before the next arrives)
Bill Kuker
18-Mar-2005 11:31
Just a note that on my system the length seems to have an undocumented upper bound of 65536. I was being lazy and not read()ing in a while loop until I pointed it at real data ;)
michi at tr51 dot org
27-May-2004 03:48
if you'd like to make a "socket_read" on a linux-system connected with a flash-client (v. 6.0 r81) you have to send a string to the connected port:

<?php

  
...  //initialising communication

  
$string = "ready to get/send data\0";
  
socket_write($socket, $string);

  
//now you can read from...
  
$line = trim(socket_read($socket, MAXLINE));

   ... 
// do some stuff, finaly close connection
?>
magicking89 at hotmail dot com
31-Aug-2003 07:01
if you want to use a non block socket you must to use socket_last_error

if(!socket_last_error($sc)){
   if($buffer=socket_read($sc,512,PHP_NORMAL_READ)){
     echo $buffer;
   }
}

if you use it your script wont take all your memory
schst at php-tools dot de
05-Jul-2003 09:19
You may download a generic server class at http://www.php-tools.de
This class will accept the sockets read data from it and hands it to a callback function. Furthermore there are methods for connection handling included.
25-Sep-2002 02:48
Windows telnet sends/recieves one character at a time. Try adding PHP_NORMAL_READ to the end of socket_read, that might help.