http://blog.51yip.com/php/686.html
一,利用fsockopen来上传文件
以前我写过一篇关于socket通信原理的博文http://blog.51yip.com/php/673.html 有 兴趣的朋友可以看看,前面讲的那篇博文,socket的服务器和客户端都是要用php命令来运行的。平常我们上传文件是浏览本地文件,通过一个php程序 将文件上传一个地方,这个时候我们用php命令来运行php程序就不方便了。这个时候我们可以用fsockopen来打开一个socket通道,并且可以 通过浏览器来访问页面。下面有一个例子,大家可以试一下。
二,upload.html
- < html >
- < body >
- < form action = 'image.php' method = 'post' name = 'form' enctype = 'multipart/form-data' >
- < input type = 'file' name = 'photo' >
- < input type = submit value = 'submit' >
- </ form >
- </ body >
- </ html >
浏览本地文件上传到中间文件image.php
三,image.php来向socket传送数据
- <?php
- $fp = fsockopen ( "127.0.0.1" , 10008, $errno , $errstr , 10);
- $array = $_FILES [ 'photo' ];
- if (! $fp ){
- echo "open fail" ;
- }else {
- if (! empty empty ( $array )){
- $str = 'filename:' . $array [ 'name' ];
- fwrite($fp , $str );
- $filename = $array [ 'tmp_name' ];
- $handle = fopen ( $filename , "r" );
- $contents = fread ( $handle , filesize ( $filename ));
- fwrite($fp , $contents );
- }
- echo $fp ;
- }
- fclose($fp );
- ?>
他的作用是和SOCKET服务器,建立通信,将数据输送到socket通道中
四,server.php接收到数据
- <?php
- // 建立server端socket
- $tcp = getprotobyname ( "tcp" );
- $socket = socket_create(AF_INET, SOCK_STREAM, $tcp );
- socket_bind($socket , '127.0.0.1' , 10008); //绑定要监听的端口
- socket_listen($socket ); //监听端口
- //初始化一个数据,和客户端通信
- $buffer = "connect" ;
- $path = "/home/zhangy/www/test/" ;
- while (true) {
- // 接受一个socket连接
- $connection = socket_accept( $socket );
- if (! $connection ){
- echo "connect fail" ;
- }else {
- echo "Socket connected\n" ;
- // 向客户端传递一个信息数据
- if ( $buffer != "" ) {
- echo "send data to client\n" ;
- socket_write($connection , $buffer . "\n" );
- echo "Wrote to socket\n" ;
- } else {
- echo "no data in the buffer\n" ;
- }
- //从客户端取得数据
- while ( $flag = @socket_recv( $connection , $data , 2048, 0)){
- if (false !== strpos ( $data , 'filename:' )){
- $filename = substr ( $data ,9);
- $filename = $path . $filename ;
- //根据传过来的名子打开一个文件
- $fp = fopen ( $filename , "wb" );
- continue ;
- }
- fwrite($fp , $data );
- }
- fclose($fp );
- }
- socket_close($connection );
- //关闭 socket
- printf("Closed the socket\n" );
- }
- ?>
他的作用是接收数据,并将数据存储存起来