php 利用socket上传文件

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");  
    }  
    ?>  


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

 

原文链接:http://blog.51yip.com/php/686.html/comment-page-1#comment-17502

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值