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明白原理配置也同樣。

相關文章
相關標籤/搜索