免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 15883 | 回复: 0
打印 上一主题 下一主题

[FastDFS] fafs 的一个php class [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-08 17:46 |只看该作者 |倒序浏览
FDFD class for php

  1. <?php
  2. /*
  3. copyright by vyouzhi
  4. 2011 12 08
  5. vyouzhi#163#com
  6. QQ: 84437129
  7. */


  8. class FDFS{

  9.     function FDFS(){
  10.         $this->tracker = fastdfs_tracker_get_connection();
  11.         $this->server = fastdfs_connect_server($this->tracker['ip_addr'], $this->tracker['port']);
  12.         $this->storage = fastdfs_tracker_query_storage_store();

  13.         $this->server = fastdfs_connect_server($this->storage['ip_addr'], $this->storage['port']);
  14.         if (!$this->server){
  15.             error_log("errno1: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info());
  16.             exit(1);
  17.         }

  18.         $this->storage['sock'] = $this->server['sock'];

  19.     }
  20.    
  21.    
  22.     function fdfs_upload($input_name){
  23.         $file_tmp = $_FILES[$input_name]['tmp_name'];
  24.         $real_name = $_FILES[$input_name]['name'];
  25.         $file_name = dirname($file_tmp)."/".$real_name;
  26.         //@copy($file_tmp, $file_name);
  27.         @rename($file_tmp, $file_name);

  28.         $file_info = fastdfs_storage_upload_by_filename($file_name, null, array(), null, $this->tracker, $this->storage);
  29.    
  30.         if($file_info){
  31.             $group_name = $file_info['group_name'];
  32.             $remote_filename = $file_info['filename'];

  33.             $i = fastdfs_get_file_info($group_name, $remote_filename);
  34.             $storage_ip = $i['source_ip_addr'];
  35.             //var_dump($file_info);
  36.             return array($remote_filename, $group_name, $storage_ip, $real_name);
  37.         }
  38.         return false;
  39.     }

  40.     function fdfs_down($group_name, $file_id){
  41.         $file_content = fastdfs_storage_download_file_to_buff($group_name, $file_id);
  42.         return $file_content;
  43.     }

  44.     function fdfs_del($group_name, $file_id){
  45.         fastdfs_storage_delete_file($group_name, $file_id);
  46.     }
  47. }

  48. ?>

复制代码
mysql 的记录表

  1. CREATE TABLE `fdfs` (
  2. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  3.   `file_id` char(100) NOT NULL DEFAULT '' COMMENT '文件ID',
  4. `group_id` varchar(10) NOT NULL DEFAULT '' COMMENT '组名',
  5. `real_name` varchar(100) NOT NULL COMMENT '真名',
  6. `storage_ip` varchar(15) NOT NULL COMMENT 'ip',
  7. PRIMARY KEY (`id`),
  8. KEY `i_file_id` (`file_id`)
  9. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8
复制代码
使用样例

  1. <?php
  2. require_once("./bootstrap.php");
  3. require_once("./fdfs.php");


  4. if(!empty($_FILES['upload1'])){
  5.     $fdfs_obj = new FDFS();
  6.     $res = $fdfs_obj->fdfs_upload("upload1");
  7.     $format = "INSERT INTO `%s`.`fdfs` (`file_id`, `group_id`, `storage_ip`, `real_name`) VALUES ('%s', '%s', '%s', '%s')";
  8.     $sql = sprintf($format, "test", $res[0], $res[1], $res[2], $res[3]);
  9.     MySQL::Insert($sql, GetPB("w"));

  10. }else{
  11.     $format = "SELECT * FROM `%s`.`fdfs` where id=4";
  12.     $sql = sprintf($format, "test");
  13.     $res = MySQL::FetchArray($sql, GetPB());
  14.     if(is_array($res)){
  15.         $fdfs_obj = new FDFS();
  16.         /*
  17.         $fdfs_obj->fdfs_del($res[0]['group_id'], $res[0]['file_id']);
  18.         die();
  19.         */
  20.         $f = $fdfs_obj->fdfs_down($res[0]['group_id'], $res[0]['file_id']);
  21.         file_put_contents("/tmp/".$res[0]['real_name'], $f);

  22.         header('Content-Description: File Transfer');
  23.         header('Content-Type: application/octet-stream');
  24.         header('Content-Disposition: attachment; filename='.$res[0]['real_name']);
  25.         header('Content-Transfer-Encoding: binary');
  26.         header('Expires: 0');
  27.         header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  28.         header('Pragma: public');
  29.         header('Content-Length: ' . filesize("/tmp/".$res[0]['real_name']));
  30.         ob_clean();
  31.         flush();
  32.         readfile("/tmp/".$res[0]['real_name']);
  33.     }
  34. }

  35. ?>

  36. <html>
  37. <body>
  38. <form action="./fdfs_class.php" method="post" enctype="multipart/form-data">
  39.     <input type="text" name="myText" /><br />
  40.     <input type="file" name="upload1" /><br />
  41.     <input type="submit" />
  42. </form>
  43. </body>
  44. </html>
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP