PHP上传文件结合socket完成

利用fsockopen来上传文件

以前我写过一篇关于socket通信原理的博文http://blog.51yip.com/php/673.html有兴趣的朋友可以看看,前面讲的那篇博文,socket的服务器和客户端都是要用php命令来运行的。平常我们上传文件是浏览本地文件,通过一个php程序将文件上传一个地方,这个时候我们用php命令来运行php程序就不方便了。这个时候我们可以用fsockopen来打开一个socket通道,并且可以通过浏览器来访问页面。下面有一个例子,大家可以试一下。

二,upload.html

 

查看 复制 打印 ?
  1.   
  2.   
  3.   
  4.   
  5.   
  6.   
  7.   
  8.   

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

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

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

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

四,server.php接收到数据

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

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

你可能感兴趣的:(PHP,socket上传文件,php)