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);
把原始文件名存入數據庫,而後存入該文件的下載地址,也就是file_id,這個是惟一的,上面的代碼就能夠實現下載重命名,改成你想要的中文名
而後其它的使用函數能夠看源碼下面的php-client/README
CentOS平臺比較簡單,基本上均可以直接編譯經過,nginx明白原理配置也同樣。