php socket上传文件

1.脚本代码如下:

表单页面form.html:

<html>  
<body>  
<form action='form.php' method='post' name='form' enctype='multipart/form-data'>  
	<input type='file' name='photo'>  
	<input type=submit value='submit'>  
</form>  
</body>  
</html>

表单提交处理脚本form.php

<?php   
$fp = fsockopen("192.168.1.123", 10008, $errno, $errstr, 10);
if(!$fp){
	echo "open fail";   
}else{
	$array = $_FILES['photo'];
    if($array){   
		$str= 'filename:'.$array['name'];//上传文件名
		$filename = $array['tmp_name'];//临时文件名
		$handle = fopen($filename, "r");//打开文件
		$contents = fread($handle, filesize($filename));//读取文件
		fwrite($fp,$array['name'].'|'.$contents);//以二进制发送
    }    
}   
fclose($fp);

socket服务端脚本server.php:

<?php
$tcp = getprotobyname("tcp");
$socket = socket_create(AF_INET, SOCK_STREAM, $tcp);// 建立server端socket    
socket_bind($socket, '192.168.1.123', 10008);//绑定要监听的端口   
socket_listen($socket);//监听端口
$path = dirname(__FILE__);
while (true) {
	$connection = socket_accept($socket);// 接受一个socket连接
	if(!$connection){
		echo "connect fail\n";
	}else{
		echo "Socket connected\n";
		$data='';
		while(($flag=socket_recv($connection, $buf, 1024,0))>0){
			$data.=$buf;
		}
		$filename=substr($data, 0, strpos($data, '|'));
		$data=substr($data, strpos($data, '|')+1);
		$fp = fopen($path.'/'.$filename,"wb");
		fwrite($fp,$data);
		fclose($fp);
	}
	socket_close($connection);//关闭 socket
	echo "Closed the socket\n";
}

2.测试步骤

  • 启动socket服务端脚本server.php
  • 打开表单页面form.html
  • 在表单页面上传一张图片进行测试即可

发布了30 篇原创文章 · 获赞 3 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章