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