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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章