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
- 在表單頁面上傳一張圖片進行測試即可