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
- 在表单页面上传一张图片进行测试即可