FastDFS分布式文件系统研究

FastDFS分布式文件系统php

这个主要是针对应用型的,很使用,特别是对于电商等linux

一。编译安装nginx

ubuntu平台:数据库

apt-get install libevent(这个默认就有,没有就装下) libevent-devapache

后面一个必定要记着装,不然会出现event.h找不到文件的错误ubuntu

下载fastdfsvim

wget http://fastdfs.googlecode.com/files/FastDFS_v4.06.tar.gz多线程

cd tar zxf FastDFS_v4.06.tar.gzapp

而后须要修改如下文件分布式

make.sh   这个根据实际状况来修改 ,由于若是不应默认会报找不到pthread类的错误

if [ -f /usr/lib/x86_64-linux-gnu/libpthread.so ] || [ -f /usr/local/lib/libpthread.so ] || [ -f /lib64/libpthread.so ] || [ -f /usr/lib64/libpthread.so ] || [ -f /usr/lib/x86_64-linux-gnu/libpthread.a ] || [ -f /usr/local/lib/libpthread.a ] || [ -f /lib64/libpthread.a ] || [ -f /usr/lib64/libpthread.a ]; then
 

client/fdfs_link_library.sh.in 也是修改成相应路径

if [ "`id -u`" = "0" ]; then
  ln -fs $TARGET_LIB/libfastcommon.so.1 /usr/lib/x86_64-linux-gnu/libfastcommon.so
  ln -fs $TARGET_LIB/libfdfsclient.so.1 /usr/lib/x86_64-linux-gnu/libfdfsclient.so

  if [ "$OS_BITS" = "8" ]; then
     ln -fs $TARGET_LIB/libfastcommon.so.1 /usr/lib/x86_64-linux-gnu/libfastcommon.so
     ln -fs $TARGET_LIB/libfdfsclient.so.1 /usr/lib/x86_64-linux-gnu/libfdfsclient.so
  fi
fi

而后sh make.sh   sh make.sh install完成安装

二,编译安装apache模块

下载

wget http://fastdfs.googlecode.com/files/fastdfs-apache-module_v1.15.tar.gz

tar zxf fastdfs-apache-module_v1.15.tar.gz

cd fastdfs-apache-module/src

修改Makefile

这里whereis查询相应的可执行文件路径,若是没有,cp一份过去都行,主要是会找不到build下面的special.mk,由于个人apache2是直接apt-get的

因此这里须要apt-get install apache2-dev

而后make && make install 就能够了

apache配置

vim /etc/fdfs/mod_fastdfs.conf

这里只须要tracker_server改成对应的ip

url_have_group_name 这个必定要注意,若是这里为false,则下面的apache配置里面也不能出现group_name,我这里该为了true

vim /etc/apache2/fastdfs.conf ,这个是在apache2.conf文件里面include进来的,因此实际上只需写在主体里面便可

<Location /group1/M00>
    sethandler fastdfs
</Location>

这里使用了组名,若是上面配置为false的话,这里就只能M00了

这样只要全部指向storeip的域名都能访问返回的url了,不光能用ip访问,域名也能访问,只要指向是正确的,这样就能够有file1.test.com file2.test.com了

三。编译php扩展

这个更加简单phpize ./configure make make install

而后把对应的.so文件载入便可

这里文章最后会把全部配置文件打包提供下载的,竟然没法上传附件

四,用php实战

 1 <?php
 2 $ret = fastdfs_storage_upload_by_filename('url.txt'); 
 3 $ret1 = fastdfs_storage_upload_by_filename1('url.txt'); 
 4 $file_info = fastdfs_get_file_info($ret['group_name'],$ret['filename']);
 5 $file_info1 = fastdfs_get_file_info1($ret1);
 6 header("Content-Disposition: attachment; filename= 重命名文件名.txt");
 7 header("Content-Type: application/octet-stream");
 8 header("X-Accel-Redirect: $file_info1"); //fdfs文件路径
 9 header("X-Accel-Buffering: yes");
10 header("X-Accel-Limit-Rate :102400"); //速度限制 Byte/s
11 //header("Accept-Ranges: none");//单线程 限制多线程 
12 var_dump($ret,$ret1,$file_info,$file_info1);
View Code

把原始文件名存入数据库,而后存入该文件的下载地址,也就是file_id,这个是惟一的,上面的代码就能够实现下载重命名,改成你想要的中文名

而后其它的使用函数能够看源码下面的php-client/README

 

CentOS平台比较简单,基本上均可以直接编译经过,nginx明白原理配置也同样。

相关文章
相关标签/搜索