PHP socket文件上传 --转

1、PHP socket文件上传

 

 

利用socket来实现文件上传,可以解决传统文件上传的诸多问题,并且是高效的。

 

服务器端代码:

<?php
set_time_limit(10);

$commonProtocol = getprotobyname("tcp");
$socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);
if ($socket) {
$result = socket_bind($socket, '192.168.0.128', 1337);
if ($result) {
   $result = socket_listen($socket, 5);
   if ($result) {
    echo "监听成功";
   }
}
}else{
echo "监听失败";
}

$path = "e://";

while (true)   {  
$connection = socket_accept($socket);
if($connection){  
   $msg = "telnet succeed!/r/n";
   socket_write($connection, $msg, strlen($msg));
  
     $BufferPond = array();  
     $buffer = '';
     $fp=NULL;
     while($flag = socket_recv($connection, $buffer, 1024, 0)){   
          if (false !== strpos($buffer,'filename:')){  
             $filename = substr($buffer,9);
             $filename = $path.$filename;
             $fp = fopen($filename,"wb");
    continue;   
          }   
        fwrite($fp,$buffer);
     }
     if($fp != NULL)
        fclose($fp);
     socket_close($connection);   
}   
}   
socket_close($socket);  
?>

客服端代码:

<?php
$errno='001';
$errstr="socket file error";

$fp = fsockopen("192.168.0.128", 1337, $errno, $errstr, 10);
if (!$fp) {   
    echo "$errstr ($errno)<br />/n";   
} else {   
    $str = "filename:socket_file.doc";   
    fwrite($fp, $str);    $out = file_get_contents('C://Documents and Settings//Administrator//桌面//6月活动.doc');   
   if($out){
    fwrite($fp, $out);   
    fwrite($fp,'over');
     echo "上传成功";
   }
   
}
fclose($fp);
?>

注意:一定要把extension=php_sockets.dll前的;去掉。服务器端文件不可以用web浏览器打开,要用php.exe 文件名.php 命令。

或者加入如下代码(如果你没有修改php.ini的权限,当然这也不是每次都可行的):

if (!extension_loaded('sockets')) {
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
dl('php_sockets.dll');
} else {
dl('sockets.so');
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值