`

php 利用socket上传文件

    博客分类:
  • php
阅读更多

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 ( $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\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. ?>  

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

分享到:
评论

相关推荐

    PHP利用APC模块实现大文件上传进度条的方法

    php 大文件带进度的上传,一直是一个令php程序员很苦恼的问题。查询baidu 、Google ,大体做带进度的上传方式为:flash+php,socket,apc+php等,下面我介绍了apc +php+ajax制作的带进度的上传,并贴出源码,希望对...

    php利用fsockopen GET/POST提交表单及上传文件

    php利用fsockopen GET/POST提交表单及上传文件,具体内容如下 1.GET get.php &lt;?php $host = 'demo.fdipzone.com'; $port = 80; $errno = ''; $errstr = ''; $timeout = 30; $url = '/socket/getapi.php'; $...

    PHP程序开发范例宝典III

    实例013 Linux下实现PHP支持Socket 20 实例014 Linux下实现PHP支持mysqli扩展技术 21 实例015 开机自动启动Apache服务 21 实例016 开机自动启动MySQL服务 22 实例017 Linux下发布“读者之家”网站 22 1.3...

    先锋无组件上传类(无惧2.0杜绝上传漏洞修改版) v2004

    ***这个上传漏洞利用的原理只是针对form格式上传的asp和php脚本*** NC(Netcat)  用于提交数据包  DOS界面下运行:  NC -vv www.***.com 80&lt;1.txt  -vv: 回显  80: www端口  1.txt: 就是你要发送的...

    PHP手册2007整合中文版

    39. 文件上传处理 40. 使用远程文件 41. 连接处理 42. 数据库永久连接 43. 安全模式 44. PHP 的命令行模式 VI. 函数参考 I. .NET 函数 II. Apache 特有函数 III. APC 可选 PHP 缓存 IV. APD 高级 PHP 调试器 V. ...

    JAVA上百实例源码以及开源项目

    一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java...

    JAVA上百实例源码以及开源项目源代码

    一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java...

    Google Android SDK开发范例大全(第3版) 1/5

    8.11 将手机文件上传至网站服务器 8.12 移动博客发布器 8.13 移动RSS阅读器 8.14 远程下载安装Android程序 8.15 手机下载看3gp影片 8.16 访问网站Login API 8.17 地震速报 8.18 通过Web API动态更改手机Spinner控件 ...

    Google Android SDK开发范例大全(第3版) 4/5

    8.11 将手机文件上传至网站服务器 8.12 移动博客发布器 8.13 移动RSS阅读器 8.14 远程下载安装Android程序 8.15 手机下载看3gp影片 8.16 访问网站Login API 8.17 地震速报 8.18 通过Web API动态更改手机Spinner控件 ...

    Google Android SDK开发范例大全(第3版) 3/5

    8.11 将手机文件上传至网站服务器 8.12 移动博客发布器 8.13 移动RSS阅读器 8.14 远程下载安装Android程序 8.15 手机下载看3gp影片 8.16 访问网站Login API 8.17 地震速报 8.18 通过Web API动态更改手机Spinner控件 ...

    Google Android SDK开发范例大全(第3版) 5/5

    8.11 将手机文件上传至网站服务器 8.12 移动博客发布器 8.13 移动RSS阅读器 8.14 远程下载安装Android程序 8.15 手机下载看3gp影片 8.16 访问网站Login API 8.17 地震速报 8.18 通过Web API动态更改手机Spinner控件 ...

Global site tag (gtag.js) - Google Analytics