php 利用socket上传文件
http://blog.51yip.com/php/686.html一,利用fsockopen来上传文件
以前我写过一篇关于socket通信原理的博文http://blog.51yip.com/php/673.html有兴趣的朋友可以看看,前面讲的那篇博文,socket的服务器和客户端都是要用php命令来运行的。平常我们上传文件是浏览本地文件,通过一个php程序将文件上传一个地方,这个时候我们用php命令来运行php程序就不方便了。这个时候我们可以用fsockopen来打开一个socket通道,并且可以通过浏览器来访问页面。下面有一个例子,大家可以试一下。
二,upload.html
查看复制打印?
[*]<html>
[*]<body>
[*]<form action='image.php' method='post' name='form' enctype='multipart/form-data'>
[*]<input type='file' name='photo'>
[*]<input type=submit value='submit'>
[*]</form>
[*]</body>
[*]</html>
浏览本地文件上传到中间文件image.php
三,image.php来向socket传送数据
查看复制打印?
[*]<?php
[*]$fp = fsockopen("127.0.0.1", 10008, $errno, $errstr, 10);
[*]
[*]$array = $_FILES['photo'];
[*]
[*]if(!$fp){
[*] echo "open fail";
[*]}else{
[*]
[*] if(!emptyempty($array)){
[*]
[*] $str= 'filename:'.$array['name'];
[*] fwrite($fp,$str);
[*] $filename = $array['tmp_name'];
[*] $handle = fopen($filename, "r");
[*]
[*] $contents = fread($handle, filesize($filename));
[*]
[*] fwrite($fp,$contents);
[*] }
[*] echo $fp;
[*]}
[*]fclose($fp);
[*]?>
他的作用是和SOCKET服务器,建立通信,将数据输送到socket通道中
四,server.php接收到数据
查看复制打印?
[*]<?php
[*]// 建立server端socket
[*]$tcp = getprotobyname("tcp");
[*]$socket = socket_create(AF_INET, SOCK_STREAM, $tcp);
[*]socket_bind($socket, '127.0.0.1', 10008); //绑定要监听的端口
[*]socket_listen($socket); //监听端口
[*]
[*]//初始化一个数据,和客户端通信
[*]$buffer = "connect";
[*]$path = "/home/zhangy/www/test/";
[*]while (true) {
[*] // 接受一个socket连接
[*] $connection = socket_accept($socket);
[*] if(!$connection){
[*] echo "connect fail";
[*] }else{
[*] echo "Socket connected\n";
[*] // 向客户端传递一个信息数据
[*] if ($buffer != "") {
[*] echo "send data to client\n";
[*] socket_write($connection, $buffer . "\n");
[*] echo "Wrote to socket\n";
[*] } else {
[*] echo "no data in the buffer\n" ;
[*] }
[*]
[*] //从客户端取得数据
[*] while($flag = @socket_recv($connection, $data, 2048, 0)){
[*] if (false !== strpos($data,'filename:')){
[*] $filename = substr($data,9);
[*]
[*] $filename = $path.$filename;
[*] //根据传过来的名子打开一个文件
[*] $fp = fopen($filename,"wb");
[*] continue;
[*] }
[*] fwrite($fp,$data);
[*] }
[*] fclose($fp);
[*] }
[*]
[*] socket_close($connection);
[*] //关闭 socket
[*] printf("Closed the socket\n");
[*]}
[*]?>
他的作用是接收数据,并将数据存储存起来
页:
[1]