php 利用socket上传文件

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

 

  1. < html >   
  2. < body >   
  3. < form   action = 'image.php'   method = 'post'   name = 'form'   enctype = 'multipart/form-data' >   
  4. < input   type = 'file'   name = 'photo' >   
  5. < input   type = submit   value = 'submit' >   
  6. </ form >   
  7. </ body >   
  8. </ html >   

浏览本地文件上传到中间文件image.php

三,image.php来向socket传送数据

  1. <?php  
  2. $fp  =  fsockopen ( "127.0.0.1" , 10008,  $errno$errstr , 10);  
  3.   
  4. $array  =  $_FILES [ 'photo' ];  
  5.   
  6. if (! $fp ){  
  7.     echo   "open fail" ;  
  8. }else {  
  9.   
  10.     if (! empty empty ( $array )){  
  11.   
  12.     $str'filename:' . $array [ 'name' ];  
  13.     fwrite($fp , $str );  
  14.     $filename  =  $array [ 'tmp_name' ];  
  15.     $handle  =  fopen ( $filename"r" );  
  16.   
  17.     $contents  =  fread ( $handlefilesize ( $filename ));  
  18.   
  19.     fwrite($fp , $contents );  
  20.     }  
  21.     echo   $fp ;  
  22. }  
  23. fclose($fp );  
  24. ?>  

他的作用是和SOCKET服务器,建立通信,将数据输送到socket通道中

四,server.php接收到数据

  1. <?php  
  2. // 建立server端socket   
  3. $tcp  =  getprotobyname ( "tcp" );  
  4. $socket  = socket_create(AF_INET, SOCK_STREAM,  $tcp );  
  5. socket_bind($socket'127.0.0.1' , 10008);        //绑定要监听的端口   
  6. socket_listen($socket );        //监听端口   
  7.   
  8. //初始化一个数据,和客户端通信   
  9. $buffer  =  "connect" ;  
  10. $path  =  "/home/zhangy/www/test/" ;  
  11. while  (true) {  
  12.     // 接受一个socket连接   
  13.     $connection  = socket_accept( $socket );  
  14.     if (! $connection ){  
  15.         echo   "connect fail" ;  
  16.     }else {  
  17.             echo   "Socket connected\n" ;  
  18.             // 向客户端传递一个信息数据   
  19.             if  ( $buffer  !=  "" ) {  
  20.                 echo   "send data to client\n" ;  
  21.                 socket_write($connection$buffer  .  "\n" );  
  22.                 echo   "Wrote to socket\n" ;  
  23.             } else  {  
  24.                 echo   "no data in the buffer\n"  ;  
  25.             }  
  26.   
  27.             //从客户端取得数据   
  28.      while ( $flag  = @socket_recv( $connection$data , 2048, 0)){  
  29.           if  (false !==  strpos ( $data , 'filename:' )){  
  30.              $filename  =  substr ( $data ,9);  
  31.   
  32.              $filename  =  $path . $filename ;  
  33.                           //根据传过来的名子打开一个文件   
  34.              $fp  =  fopen ( $filename , "wb" );  
  35.              continue ;  
  36.           }  
  37.         fwrite($fp , $data );  
  38.      }  
  39.             fclose($fp );  
  40.     }  
  41.   
  42.     socket_close($connection );  
  43.     //关闭 socket   
  44.     printf("Closed the socket\n" );  
  45. }  
  46. ?>  

他的作用是接收数据,并将数据存储存起来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值