290112011 发表于 2017-3-22 09:45:47

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
查看复制打印?


[*]<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(!emptyempty($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");  
[*]}  
[*]?>  

  他的作用是接收数据,并将数据存储存起来
页: [1]
查看完整版本: php 利用socket上传文件