<?php
/**
* FastDFS封装
* @author fengyuty@126.com
*/
class fdfs {
private $status = false;
private $tracker = null;
private $connect = null;
private $storage = null;
/**
* 构造函数
*/
public function __construct($config = null) {
if(!extension_loaded('fastdfs_client')) {
exit('Error fastdfs: No fastdfs client');
}
$this->tracker = fastdfs_tracker_get_connection();
if(!$this->tracker) {
exit("Error FastDFS: #" . fastdfs_get_last_error_no() . " " . fastdfs_get_last_error_info());
}
$this->connect = fastdfs_connect_server($this->tracker['ip_addr'], $this->tracker['port']);
$this->storage = fastdfs_tracker_query_storage_store();
if(!$this->storage || !$this->connect) {
exit("Error Fastdfs: #" . fastdfs_get_last_error_no() . " " . fastdfs_get_last_error_info());
}
$this->status = true;
}
/**
* 销毁函数
*/
public function __destruct() {
$this->close();
}
/**
* 上传文件
* @param string $file_name
*/
public function upload($file_name) {
if(!$this->status) {
return false;
}
if(!file_exists($file_name)) {
return false;
}
$file_info = fastdfs_storage_upload_by_filename($file_name, null, array(), null, $this->tracker, $this->storage);
if(!$file_info) {
return false;
}
$result = fastdfs_get_file_info($file_info['group_name'], $file_info['filename']);
$result['group_name'] = $file_info['group_name'];
$result['file_name'] = $file_info['filename'];
return $result;
}
/**
* 替换文件
* @param string $group_name
* @param string $file_name
*/
public function replace($group_name, $file_name) {
return false;
}
/**
* 删除文件
* @param string $group_name
* @param string $file_name
*/
public function remove($group_name, $file_name) {
if(!$this->status) {
return false;
}
return fastdfs_storage_delete_file($group_name, $file_name);
}
/**
* 下载文件流
* @param string $group_name
* @param string $file_name
*/
public function download_buff($group_name, $file_name) {
if(!$this->status) {
return false;
}
return fastdfs_storage_download_file_to_buff($group_name, $file_name);
}
/**
* 下载文件
* @param string $group_name
* @param string $file_name
* @param string $save_path_file
*/
public function download_file($group_name, $file_name, $save_path_file) {
if(!$this->status) {
return false;
}
$bool = fastdfs_storage_download_file_to_file($group_name, $file_name, $save_path_file);
return $bool;
}
/**
* 生成完整路径(举例,细节参考实际配置)
* @param string $group_name
* @param string $file_name
*/
public function make_url($group_name, $file_name) {
if(empty($group_name) || empty($file_name)) {
return '';
}
$group = intval(substr($group_name, strlen('group')));
if($group < 3) {
$group_id = $group + 1;
} else {
$group_id = '1' . $group;
}
$full_path = 'http://img' . $group_id . '.ipmay.com/group' . $group . '/' . $file_name;
return $full_path;
}
/**
* 当前状态
*/
public function valid() {
return $this->status;
}
/**
* 关闭连接
*/
public function close() {
if($this->status) {
fastdfs_disconnect_server($this->connect);
$this->tracker = null;
$this->connect = null;
$this->storage = null;
$this->status = false;
}
}
}
?>
FastDFS的PHP客户端封装类
FastDFS 是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件上传和下载等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。下面是FastDFS的PHP客户端封装类。
3