zoukankan      html  css  js  c++  java
  • php 利用socket上传文件

    php 利用socket上传文件

    张映 发表于 2010-06-02

    分类目录: php

    一,利用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(!emptyempty($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($handle, filesize($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 ";  
    18.             // 向客户端传递一个信息数据  
    19.             if ($buffer != "") {  
    20.                 echo "send data to client ";  
    21.                 socket_write($connection, $buffer . " ");  
    22.                 echo "Wrote to socket ";  
    23.             } else {  
    24.                 echo "no data in the buffer " ;  
    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 ");  
    45. }  
    46. ?>  

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

  • 相关阅读:
    词频统计
    第二周每周例行报告
    事务管理(ACID)
    Redis
    jar包和war包的区别
    CSS实现Loading加载动画
    如何实现“返回顶部”的页面效果
    PHP页面跳转-常见方法
    局域网络调试方式
    Thinkphp 统计数据库字段总值
  • 原文地址:https://www.cnblogs.com/guolanzhu/p/3999759.html
Copyright © 2011-2022 走看看