├── .gitattributes ├── .gitignore ├── README.md ├── docker └── Dockerfile ├── images └── cut.png ├── lua ├── resize_pic.sh ├── thumbnail.lua ├── thumbnailauto.lua ├── urlrewrite.lua └── water.lua ├── nginx ├── nginx.conf └── nginxauto.conf ├── php_client ├── README ├── config.m4 ├── fastdfs_appender_test.php ├── fastdfs_appender_test1.php ├── fastdfs_callback_test.php ├── fastdfs_client.c ├── fastdfs_client.h ├── fastdfs_client.ini ├── fastdfs_client.spec.in ├── fastdfs_test.php ├── fastdfs_test1.php └── fastdfs_test_slave.php └── test ├── fastdfs.php └── test.sh /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows image file caches 2 | Thumbs.db 3 | ehthumbs.db 4 | 5 | # Folder config file 6 | Desktop.ini 7 | 8 | # Recycle Bin used on file shares 9 | $RECYCLE.BIN/ 10 | 11 | # Windows Installer files 12 | *.cab 13 | *.msi 14 | *.msm 15 | *.msp 16 | 17 | # Windows shortcuts 18 | *.lnk 19 | 20 | # ========================= 21 | # Operating System Files 22 | # ========================= 23 | 24 | # OSX 25 | # ========================= 26 | 27 | .DS_Store 28 | .AppleDouble 29 | .LSOverride 30 | 31 | # Thumbnails 32 | ._* 33 | 34 | # Files that might appear on external disk 35 | .Spotlight-V100 36 | .Trashes 37 | 38 | # Directories potentially created on remote AFP share 39 | .AppleDB 40 | .AppleDesktop 41 | Network Trash Folder 42 | Temporary Items 43 | .apdisk 44 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### install 2 | 进入docker目录 3 | docker build -t fastdfs:dev . 4 | 如果比较慢可以换一下网易的源 5 | docker pull hub.c.163.com/qieangel2013/ngx-fastdfs:latest 6 | ### 使用 7 | docker run --net=host -idt -p 80:80 fastdfs:dev '/etc/rc.local' 8 | ### 测试 9 | 进入容器执行test目录下的./test.sh或者直接执行下面脚本 10 | fdfs_test /etc/fdfs/client.conf upload /home/steven/01.jpg 11 | ... 12 | group_name=group1, ip_addr=192.168.1.181, port=23000 13 | storage_upload_by_filename 14 | group_name=group1, remote_filename=M00/00/00/wKgdhFTV0ZmAP3AZAPk-Io7D4w8580.jpg 15 | ... 16 | example file url: http://192.168.1.181/group1/M00/00/00/wKgdhFTV0ZmAP3AZAPk-Io7D4w8580.jpg 17 | storage_upload_slave_by_filename 18 | group_name=group1, remote_filename=M00/00/00/wKgdhFTV0ZmAP3AZAPk-Io7D4w8580_big.jpg 19 | ... 20 | example file url: http://192.168.1.181/group1/M00/00/00/wKgdhFTV0ZmAP3AZAPk-Io7D4w8580_big.jpg 21 | ### php调用 22 | 首先进入php_client 23 | ./configure --with-php-config=/usr/local/php/bin/php-config 24 | make&&make install 25 | 在php.ini里添加 26 | extension=fastdfs_client.so 27 | [fastdfs_client] 28 | fastdfs_client.base_path = /home/fastdfs/fastdfs 29 | fastdfs_client.connect_timeout = 2 30 | fastdfs_client.network_timeout = 60 31 | fastdfs_client.log_level = info 32 | fastdfs_client.log_filename = 33 | fastdfs_client.tracker_group_count = 1 34 | fastdfs_client.tracker_group0 = /etc/fdfs/client.conf 35 | fastdfs_client.use_connection_pool = true 36 | fastdfs_client.connection_pool_max_idle_time = 3600 37 | 根据自己的情况做相应的修改 38 | 重启php-fpm 39 | 执行test目录下的fastdfs.php就可以看到效果了 40 | ### 使用效果 41 | ![](https://github.com/qieangel2013/ngx-fastdfs/blob/master/images/cut.png) 42 | ### 自动压缩 43 | 自动压缩采用减少图片质量来达到减小图片体积的效果 44 | 使用方法是把nginx里的nginxauto.conf替换原有的或者自己按着该文件修改 45 | 把lua里的thumbnailauto.lua文件替换原有的或者自己按着该文件修改 46 | 注意:fastdfs的storage的配置/etc/fdfs/storage.conf中run_by_group和run_by_user,最好跟nginx的用户组配置一样 47 | ### liveim是一款直播平台,内置im聊天功能 48 | 由于未开源,需要授权可以获取源代码 49 | http://www.weivq.com:88/ (演示地址)
50 | http://www.weivq.com:88/public/uploads/LiveIm.apk (安卓演示)
51 | http://www.weivq.com:88/public/uploads/LiveImInstall.exe (pc端演示) 52 | ![](https://github.com/qieangel2013/yaf/blob/master/public/images/windowspc.png) 53 | ![](https://github.com/qieangel2013/yaf/blob/master/public/images/jt.png) 54 | ![](https://github.com/qieangel2013/yaf/blob/master/public/images/jtmobilet.png) 55 | ### 交流使用 56 | 交流群:337937322 57 | ### 如果你对我的辛勤劳动给予肯定,请给我捐赠,你的捐赠是我最大的动力 58 | ![](https://github.com/qieangel2013/zys/blob/master/public/images/pw.jpg) 59 | ![](https://github.com/qieangel2013/zys/blob/master/public/images/pay.png) 60 | [项目捐赠列表](https://github.com/qieangel2013/zys/wiki/%E9%A1%B9%E7%9B%AE%E6%8D%90%E8%B5%A0) 61 | -------------------------------------------------------------------------------- /docker/Dockerfile: -------------------------------------------------------------------------------- 1 | #ngx-fastdfs 2 | # Version 0.1 3 | 4 | FROM qieangel2013d/ngx-fastdfs:latest 5 | 6 | MAINTAINER 904208360@qq.com 7 | 8 | CMD ["/etc/rc.local", "-D", "FOREGROUND"] 9 | -------------------------------------------------------------------------------- /images/cut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qieangel2013/ngx-fastdfs/7f9aec290314645d4c64c002a7744f42c8a7aeff/images/cut.png -------------------------------------------------------------------------------- /lua/resize_pic.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #du -sk `find /usr/local/fastDFS/storage/data/ |grep "$1"`| sort -n -k 1 -r |awk '{if ($1>1000) print $2}' >/tmp/resize_pic.log 4 | cp /tmp/resize_pic_new.log /tmp/resize_pic_old.log 5 | find /usr/local/fastDFS/storage/data/ |grep "\." |grep -v "\_bak" |grep -v "\_water">/tmp/resize_pic_new.log 6 | 7 | comm -23 <(sort /tmp/resize_pic_new.log|uniq ) <(sort /tmp/resize_pic_old.log|uniq ) > /tmp/resize_pic.log 8 | 9 | for v_file in `grep -v 'original' /tmp/resize_pic.log` 10 | do 11 | v_file_short=${v_file%%.*} 12 | v_file_type=${v_file#*.} 13 | v_count=`grep $v_file_short\_original /tmp/resize_pic.log|wc -l` 14 | # echo $v_file_short\_original >>/tmp/resize.log 15 | # echo 'v_file_short='$v_file_short>>/tmp/resize.log 16 | # echo 'v_file='$v_file>>/tmp/resize.log 17 | # echo 'v_count='$v_count>>/tmp/resize.log 18 | if [ $v_count -lt 1 ];then 19 | # echo 'this is 0' >> /tmp/resize.log 20 | # cp $v_file $v_file_short\_original\.$v_file_type 21 | 22 | if [ $v_file_type == "png" ];then 23 | cp $v_file $v_file_short\_original\.$v_file_type 24 | convert $v_file -resize '70%' PNG8:$v_file 25 | echo "/usr/local/bin/gm convert $v_file -resize '70%' PNG8:$v_file" >> /tmp/resize.log 26 | fi 27 | 28 | if [ $v_file_type == "JPEG" ];then 29 | cp $v_file $v_file_short\_original\.$v_file_type 30 | /usr/local/bin/gm convert -quality 30 $v_file $v_file 31 | echo "/usr/local/bin/gm convert -quality 30 $v_file $v_file" >> /tmp/resize.log 32 | fi 33 | 34 | if [ $v_file_type == "jpeg" ];then 35 | cp $v_file $v_file_short\_original\.$v_file_type 36 | /usr/local/bin/gm convert -quality 30 $v_file $v_file 37 | echo "/usr/local/bin/gm convert -quality 30 $v_file $v_file" >> /tmp/resize.log 38 | fi 39 | 40 | 41 | if [ $v_file_type == "jpg" ];then 42 | cp $v_file $v_file_short\_original\.$v_file_type 43 | /usr/local/bin/gm convert -quality 30 $v_file $v_file 44 | echo "/usr/local/bin/gm convert -quality 30 $v_file $v_file" >> /tmp/resize.log 45 | fi 46 | 47 | if [ $v_file_type == "JPG" ];then 48 | cp $v_file $v_file_short\_original\.$v_file_type 49 | /usr/local/bin/gm convert -quality 30 $v_file $v_file 50 | echo "/usr/local/bin/gm convert -quality 30 $v_file $v_file" >> /tmp/resize.log 51 | fi 52 | 53 | 54 | 55 | 56 | if [ $v_file_type == "gif" ];then 57 | cp $v_file $v_file_short\_original\.$v_file_type 58 | /usr/bin/convert $v_file -fuzz 8% -layers optimize $v_file 59 | echo "convert $v_file -fuzz 8% -layers optimize $v_file" >> /tmp/resize.log 60 | fi 61 | 62 | wide=`gm identify -format " %w %h" $v_file |awk '{print $1}'` 63 | high=`gm identify -format " %w %h" $v_file |awk '{print $2}'` 64 | 65 | if [ $wide -gt 1080 ];then 66 | newhigh=$(((($high * 1080))/$wide)) 67 | gm convert $v_file -thumbnail "1080x$newhigh" $v_file 68 | fi 69 | 70 | 71 | 72 | else 73 | echo 'this is not 0' >> /tmp/resize.log 74 | fi 75 | done 76 | 77 | rq=`date "+%Y%m%d"` 78 | cat /tmp/resize_pic.log >> /tmp/resize_pic_$rq\.log 79 | 80 | 81 | -------------------------------------------------------------------------------- /lua/thumbnail.lua: -------------------------------------------------------------------------------- 1 | local preName = ngx.var.a 2 | local whParam = ngx.var.b 3 | local qParams = ngx.var.c 4 | local qParam = string.sub(qParams,2) 5 | local suffix = ngx.var.d 6 | 7 | local command = "gm convert " .. ngx.var.image_dir .. preName .. "." .. suffix 8 | 9 | if (whParam=="") 10 | then 11 | else 12 | command = command .. " -thumbnail " .. whParam 13 | end 14 | 15 | if (qParams=="") 16 | then 17 | else 18 | command = command .. " -quality " .. qParam 19 | end 20 | 21 | command = command .. " " .. ngx.var.file 22 | 23 | os.execute("echo preName=" .. preName .. " > /usr/local/nginx/lua/luaLog.txt") 24 | os.execute("echo whParam=" .. whParam .. " > /usr/local/nginx/lua/luaLog.txt") 25 | os.execute("echo qParams=" .. qParams .. " > /usr/local/nginx/lua/luaLog.txt") 26 | os.execute("echo qParam=" .. qParam .. " > /usr/local/nginx/lua/luaLog.txt") 27 | os.execute("echo suffix=" .. suffix .. " > /usr/local/nginx/lua/luaLog.txt") 28 | os.execute("echo command=" .. command .. " > /usr/local/nginx/lua/luaLog.txt") 29 | 30 | os.execute(command) 31 | ngx.redirect(ngx.var.uri) 32 | -------------------------------------------------------------------------------- /lua/thumbnailauto.lua: -------------------------------------------------------------------------------- 1 | local preName = ngx.var.a 2 | local suffix = ngx.var.e 3 | local command = "gm convert " 4 | local cpcommand="cp " .. ngx.var.image_dir .. preName .. "." .. suffix .. " " .. ngx.var.image_dir .. preName .. "." .. suffix .. ".bak" 5 | os.execute(cpcommand) 6 | if(string.lower(suffix)=="jpg" or string.lower(suffix)=="jpeg") then 7 | command = command .. " -quality 30 " .. ngx.var.image_dir .. preName .. "." .. suffix .. " " .. ngx.var.image_dir .. preName .. "." .. suffix 8 | else if(string.lower(suffix)=="png") then 9 | command = command .. ngx.var.image_dir .. preName .. "." .. suffix .. " -resize '80%' PNG8:" .. ngx.var.image_dir .. preName .. "." .. suffix 10 | else if(string.lower(suffix)=="gif") then 11 | command = "convert " 12 | command = command .. ngx.var.image_dir .. preName .. "." .. suffix .. " -fuzz 8% -layers optimize " .. ngx.var.image_dir .. preName .. "." .. suffix 13 | end 14 | end 15 | end 16 | os.execute(command) 17 | os.execute("echo command=" .. command .. " > /usr/local/nginx/lua/luaLog.txt") 18 | ngx.redirect(ngx.var.uri) -------------------------------------------------------------------------------- /lua/urlrewrite.lua: -------------------------------------------------------------------------------- 1 | location ~ \.(js|css)$ 2 | { 3 | root html/h5; 4 | if ($request_uri !~ "^(.*)/(.*)\.(js|css)\?ran=") { 5 | content_by_lua ' 6 | local randomnum =ngx.now(); 7 | local uri=ngx.var.uri; 8 | ngx.redirect(uri.."?ran=" .. randomnum); 9 | '; 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /lua/water.lua: -------------------------------------------------------------------------------- 1 | local preName = ngx.var.a 2 | local whParam = ngx.var.b 3 | local qParams = ngx.var.c 4 | local qParam = string.sub(qParams,2) 5 | local suffix = ngx.var.d 6 | 7 | local command = "gm convert " .. ngx.var.image_dir .. preName .. "." .. suffix 8 | 9 | if (whParam=="") 10 | then 11 | else 12 | if(whParam=='water') 13 | then 14 | command = "identify -format '%[EXIF:*]' " .. ngx.var.image_dir .. preName .. "." .. suffix .. "|(grep Orientation || echo 1)|awk -F \"\" '{for(i=1;i<=NF;i++){if ($i ~ /[[:digit:]]/){str=$i;str1=(str1 str)}}print str1}'|awk '{if($NF==6) cmd= \"cp " .. ngx.var.image_dir .. preName .. "." .. suffix .. " " .. ngx.var.image_dir .. preName .. "_bak." .. suffix .. ";mogrify -strip -rotate 90 " .. ngx.var.image_dir .. preName .. "_bak." .. suffix .. ";convert " .. ngx.var.image_dir .. preName .. "_bak." .. suffix .. " /usr/local/nginx/lua/water.png -gravity southeast -geometry +5+10 -composite " .. ngx.var.file .. "\";else if($NF==8)cmd= \"cp ".. ngx.var.image_dir .. preName .. "." .. suffix .. " " .. ngx.var.image_dir .. preName .. "_bak." .. suffix .. ";mogrify -strip -rotate 270 ".. ngx.var.image_dir .. preName .. "_bak." .. suffix .. ";convert ".. ngx.var.image_dir .. preName .. "_bak." .. suffix .. " /usr/local/nginx/lua/water.png -gravity southeast -geometry +5+10 -composite " .. ngx.var.file .. "\";else if($NF==3)cmd=\"cp ".. ngx.var.image_dir .. preName .. "." .. suffix .. " " .. ngx.var.image_dir .. preName .. "_bak." .. suffix ..";mogrify -strip -rotate 180 " .. ngx.var.image_dir .. preName .. "_bak." .. suffix .. ";convert ".. ngx.var.image_dir .. preName .. "_bak." .. suffix .. " /usr/local/nginx/lua/water.png -gravity southeast -geometry +5+10 -composite " .. ngx.var.file .. "\";else cmd=\"convert ".. ngx.var.image_dir .. preName .. "." .. suffix .. " /usr/local/nginx/lua/water.png -gravity southeast -geometry +5+10 -composite " .. ngx.var.file .. "\";system(cmd);}' " 15 | else 16 | command = command .. " -thumbnail " .. whParam 17 | end 18 | end 19 | 20 | if (qParams=="") 21 | then 22 | else 23 | if(whParam =='water') 24 | then 25 | else 26 | command = command .. " -quality " .. qParam 27 | end 28 | end 29 | 30 | if(whParam=='water') 31 | then 32 | else 33 | command = command .. " " .. ngx.var.file 34 | end 35 | -- os.execute(whParam .. "echo command=" .. command .. whParam" > /usr/local/nginx/lua/luaLog.txt") 36 | 37 | if (whParam=="") 38 | then 39 | else 40 | -- os.execute("echo preName=" .. preName .. " > /usr/local/nginx/lua/luaLog.txt") 41 | -- os.execute("echo whParam=" .. whParam .. " > /usr/local/nginx/lua/luaLog.txt") 42 | -- os.execute("echo qParams=" .. qParams .. " > /usr/local/nginx/lua/luaLog.txt") 43 | -- os.execute("echo qParam=" .. qParam .. " > /usr/local/nginx/lua/luaLog.txt") 44 | -- os.execute("echo suffix=" .. suffix .. " > /usr/local/nginx/lua/luaLog.txt") 45 | os.execute("echo command=" .. command .. " > /usr/local/nginx/lua/luaLog.txt") 46 | 47 | os.execute(command) 48 | ngx.redirect(ngx.var.uri) 49 | end 50 | -------------------------------------------------------------------------------- /nginx/nginx.conf: -------------------------------------------------------------------------------- 1 | 2 | user www www; 3 | worker_processes 1; 4 | 5 | #error_log logs/error.log; 6 | #error_log logs/error.log notice; 7 | #error_log logs/error.log info; 8 | 9 | #pid logs/nginx.pid; 10 | 11 | 12 | events { 13 | worker_connections 1024; 14 | } 15 | 16 | 17 | http { 18 | include mime.types; 19 | default_type application/octet-stream; 20 | 21 | #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 22 | # '$status $body_bytes_sent "$http_referer" ' 23 | # '"$http_user_agent" "$http_x_forwarded_for"'; 24 | 25 | #access_log logs/access.log main; 26 | 27 | sendfile on; 28 | #tcp_nopush on; 29 | client_max_body_size 64M; 30 | #keepalive_timeout 0; 31 | keepalive_timeout 65; 32 | 33 | #gzip on; 34 | 35 | #access_log logs/host.access.log main; 36 | lua_shared_dict config 1m; 37 | lua_package_path "/usr/local/lib/lua/5.1/?.lua;/usr/local/share/lua/5.1/?.lua;;"; 38 | lua_package_cpath '/usr/local/lib/lua/5.1/?.so;/usr/local/share/lua/5.1/?.so;;'; 39 | server { 40 | listen 80; 41 | server_name localhost; 42 | 43 | #charset koi8-r; 44 | 45 | #access_log logs/host.access.log main; 46 | location / { 47 | root /usr/local/nginx/html/youxiu/; 48 | index index.php index.html index.htm; 49 | #if (!-e $request_filename) { 50 | # rewrite ^/(.*) /index.php?$1 last; 51 | # } 52 | 53 | } 54 | location /favicon.ico { 55 | log_not_found off; 56 | access_log off; 57 | } 58 | 59 | location ^~ /data/upload/group1/ { 60 | rewrite ^/data/upload/group1/(.*)$ /group1/$1; 61 | } 62 | location ~ /data/user/[^\/]+/[^\/]+/upload/group1/ { 63 | rewrite ^/data/user/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/upload(/|//)group1/(.*)$ /group1/$4; 64 | } 65 | location /group1/M00 { 66 | alias /home/fastdfs/fastdfs/storage/data; 67 | 68 | set $image_root "/home/fastdfs/fastdfs/storage/data"; 69 | #if ($uri ~ "/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/(.*)") { 70 | if ($uri ~ "/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/(.*)") { 71 | set $image_dir "$image_root/$3/$4/"; 72 | set $image_name "$5"; 73 | set $file "$image_dir$image_name"; 74 | } 75 | if ($image_name ~ "([a-zA-Z0-9_\-]+)_([0-9]+x[0-9]+)?(q[0-9]{1,2})?.([a-zA-Z0-9]+)") { 76 | #if ($image_name ~ "([a-zA-Z0-9_\-]+)(_([0-9]+x[0-9]+)?(q[0-9]{1,2})?)?.([a-zA-Z0-9]+)") { 77 | set $a "$1"; 78 | set $b "$2"; 79 | set $c "$3"; 80 | set $d "$4"; 81 | set $e "$5"; 82 | set $f "$6"; 83 | #set $zqtmp ".bak"; 84 | #set $file "$file$zqtmp"; 85 | set $file "$file"; 86 | } 87 | 88 | # default_type "text/plain"; 89 | #if (!-e $request_filename) { 90 | if (!-f $file) { 91 | # 关闭lua代码缓存,方便调试lua脚本 92 | #lua_code_cache off; 93 | content_by_lua_file "/usr/local/nginx/lua/thumbnail.lua"; 94 | #content_by_lua ' 95 | # --ngx.say(ngx.var.a) 96 | # --ngx.say(ngx.var.b) 97 | # --ngx.say(ngx.var.c) 98 | #'; 99 | } 100 | # if (-f $file) { 101 | # rewrite ^(.*) http://www.jd.com break; 102 | # } 103 | 104 | ngx_fastdfs_module; 105 | } 106 | #error_page 404 /404.html; 107 | 108 | # redirect server error pages to the static page /50x.html 109 | # 110 | error_page 500 502 503 504 /50x.html; 111 | #location = /50x.html { 112 | # root /usr/local/nginx/html/api/; 113 | #} 114 | 115 | # proxy the PHP scripts to Apache listening on 127.0.0.1:80 116 | # 117 | #location ~ \.php$ { 118 | # proxy_pass http://127.0.0.1; 119 | #} 120 | 121 | # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 122 | # 123 | #location ~ \.php$ { 124 | # root /usr/local/nginx/html/api/; 125 | # fastcgi_pass 127.0.0.1:9000; 126 | # fastcgi_index index.php; 127 | # fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 128 | # include fastcgi_params; 129 | #} 130 | 131 | # deny access to .htaccess files, if Apache's document root 132 | # concurs with nginx's one 133 | # 134 | #location ~ /\.ht { 135 | # deny all; 136 | #} 137 | location ~ \.php$ { 138 | root /usr/local/nginx/html/youxiu/; 139 | fastcgi_pass 127.0.0.1:9000; 140 | fastcgi_index index.php; 141 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 142 | include fastcgi_params; 143 | } 144 | 145 | } 146 | # another virtual host using mix of IP-, name-, and port-based configuration 147 | # 148 | server { 149 | listen 8899; 150 | # listen somename:8080; 151 | server_name localhost; 152 | 153 | location / { 154 | root html/youxiu/web; 155 | index index.php index.html index.htm; 156 | } 157 | location ~ \.php$ { 158 | root /usr/local/nginx/html/youxiu/web; 159 | fastcgi_pass 127.0.0.1:9000; 160 | fastcgi_index index.php; 161 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 162 | include fastcgi_params; 163 | } 164 | 165 | } 166 | 167 | 168 | # HTTPS server 169 | # 170 | #server { 171 | # listen 443; 172 | # server_name localhost; 173 | 174 | # ssl on; 175 | # ssl_certificate cert.pem; 176 | # ssl_certificate_key cert.key; 177 | 178 | # ssl_session_timeout 5m; 179 | 180 | # ssl_protocols SSLv2 SSLv3 TLSv1; 181 | # ssl_ciphers HIGH:!aNULL:!MD5; 182 | # ssl_prefer_server_ciphers on; 183 | 184 | # location / { 185 | # root html; 186 | # index index.html index.htm; 187 | # } 188 | #} 189 | include vhosts.conf; 190 | 191 | server { 192 | listen 443 default_server ssl; 193 | server_name xcx.tianlian.cn; 194 | 195 | #charset koi8-r; 196 | #access_log logs/host.access.log main; 197 | location / { 198 | root /usr/local/nginx/html/youxiu; 199 | index index.php index.html index.htm; 200 | if (!-e $request_filename) { 201 | rewrite ^/(.*) /index.php?$1 last; 202 | } 203 | } 204 | location ~ \.php$ { 205 | root /usr/local/nginx/html/youxiu; 206 | fastcgi_pass 127.0.0.1:9000; 207 | fastcgi_index index.php; 208 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 209 | include fastcgi_params; 210 | } 211 | 212 | #ssl on; 213 | ssl_certificate /usr/local/nginx/ssl/xcx.tianlian.cn.crt; 214 | ssl_certificate_key /usr/local/nginx/ssl/xcx.tianlian.cn.key; 215 | #ssl_session_timeout 5m; 216 | #ssl_protocols SSLv3 TLSv1; 217 | #ssl_ciphers HIGH:!ADH:!EXPORT56:RC4+RSA:+MEDIUM; 218 | #ssl_prefer_server_ciphers on; 219 | 220 | 221 | error_page 500 502 503 504 /50x.html; 222 | location = /50x.html { 223 | root html; 224 | } 225 | } 226 | 227 | } 228 | -------------------------------------------------------------------------------- /nginx/nginxauto.conf: -------------------------------------------------------------------------------- 1 | 2 | user www www; 3 | worker_processes 1; 4 | 5 | #error_log logs/error.log; 6 | #error_log logs/error.log notice; 7 | #error_log logs/error.log info; 8 | 9 | #pid logs/nginx.pid; 10 | 11 | 12 | events { 13 | worker_connections 1024; 14 | } 15 | 16 | 17 | http { 18 | include mime.types; 19 | default_type application/octet-stream; 20 | 21 | #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 22 | # '$status $body_bytes_sent "$http_referer" ' 23 | # '"$http_user_agent" "$http_x_forwarded_for"'; 24 | 25 | #access_log logs/access.log main; 26 | 27 | sendfile on; 28 | #tcp_nopush on; 29 | client_max_body_size 64M; 30 | #keepalive_timeout 0; 31 | keepalive_timeout 65; 32 | 33 | #gzip on; 34 | 35 | #access_log logs/host.access.log main; 36 | lua_shared_dict config 1m; 37 | lua_package_path "/usr/local/lib/lua/5.1/?.lua;/usr/local/share/lua/5.1/?.lua;;"; 38 | lua_package_cpath '/usr/local/lib/lua/5.1/?.so;/usr/local/share/lua/5.1/?.so;;'; 39 | server { 40 | listen 80; 41 | server_name localhost; 42 | 43 | #charset koi8-r; 44 | 45 | #access_log logs/host.access.log main; 46 | location / { 47 | root /usr/local/nginx/html/youxiu/; 48 | index index.php index.html index.htm; 49 | #if (!-e $request_filename) { 50 | # rewrite ^/(.*) /index.php?$1 last; 51 | # } 52 | 53 | } 54 | location /favicon.ico { 55 | log_not_found off; 56 | access_log off; 57 | } 58 | 59 | location ^~ /data/upload/group1/ { 60 | rewrite ^/data/upload/group1/(.*)$ /group1/$1; 61 | } 62 | location ~ /data/user/[^\/]+/[^\/]+/upload/group1/ { 63 | rewrite ^/data/user/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/upload(/|//)group1/(.*)$ /group1/$4; 64 | } 65 | location /group1/M00 { 66 | alias /home/fastdfs/fastdfs/storage/data; 67 | 68 | set $image_root "/home/fastdfs/fastdfs/storage/data"; 69 | #if ($uri ~ "/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/(.*)") { 70 | if ($uri ~ "/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/(.*)") { 71 | set $image_dir "$image_root/$3/$4/"; 72 | set $image_name "$5"; 73 | set $file "$image_dir$image_name"; 74 | } 75 | #if ($image_name ~ "([a-zA-Z0-9_\-]+)_([0-9]+x[0-9]+)?(q[0-9]{1,2})?.([a-zA-Z0-9]+)") { 76 | if ($image_name ~ "([a-zA-Z0-9_\-]+)(_([0-9]+x[0-9]+)?(q[0-9]{1,2})?)?.([a-zA-Z0-9]+)") { 77 | set $a "$1"; 78 | set $b "$2"; 79 | set $c "$3"; 80 | set $d "$4"; 81 | set $e "$5"; 82 | set $f "$6"; 83 | set $zqtmp ".bak"; 84 | set $file "$file$zqtmp"; 85 | } 86 | 87 | # default_type "text/plain"; 88 | #if (!-e $request_filename) { 89 | if (!-f $file) { 90 | # 关闭lua代码缓存,方便调试lua脚本 91 | #lua_code_cache off; 92 | content_by_lua_file "/usr/local/nginx/lua/thumbnail.lua"; 93 | #content_by_lua ' 94 | # --ngx.say(ngx.var.a) 95 | # --ngx.say(ngx.var.b) 96 | # --ngx.say(ngx.var.c) 97 | #'; 98 | } 99 | # if (-f $file) { 100 | # rewrite ^(.*) http://www.jd.com break; 101 | # } 102 | 103 | ngx_fastdfs_module; 104 | } 105 | #error_page 404 /404.html; 106 | 107 | # redirect server error pages to the static page /50x.html 108 | # 109 | error_page 500 502 503 504 /50x.html; 110 | #location = /50x.html { 111 | # root /usr/local/nginx/html/api/; 112 | #} 113 | 114 | # proxy the PHP scripts to Apache listening on 127.0.0.1:80 115 | # 116 | #location ~ \.php$ { 117 | # proxy_pass http://127.0.0.1; 118 | #} 119 | 120 | # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 121 | # 122 | #location ~ \.php$ { 123 | # root /usr/local/nginx/html/api/; 124 | # fastcgi_pass 127.0.0.1:9000; 125 | # fastcgi_index index.php; 126 | # fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 127 | # include fastcgi_params; 128 | #} 129 | 130 | # deny access to .htaccess files, if Apache's document root 131 | # concurs with nginx's one 132 | # 133 | #location ~ /\.ht { 134 | # deny all; 135 | #} 136 | location ~ \.php$ { 137 | root /usr/local/nginx/html/youxiu/; 138 | fastcgi_pass 127.0.0.1:9000; 139 | fastcgi_index index.php; 140 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 141 | include fastcgi_params; 142 | } 143 | 144 | } 145 | # another virtual host using mix of IP-, name-, and port-based configuration 146 | # 147 | server { 148 | listen 8899; 149 | # listen somename:8080; 150 | server_name localhost; 151 | 152 | location / { 153 | root html/youxiu/web; 154 | index index.php index.html index.htm; 155 | } 156 | location ~ \.php$ { 157 | root /usr/local/nginx/html/youxiu/web; 158 | fastcgi_pass 127.0.0.1:9000; 159 | fastcgi_index index.php; 160 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 161 | include fastcgi_params; 162 | } 163 | 164 | } 165 | 166 | 167 | # HTTPS server 168 | # 169 | #server { 170 | # listen 443; 171 | # server_name localhost; 172 | 173 | # ssl on; 174 | # ssl_certificate cert.pem; 175 | # ssl_certificate_key cert.key; 176 | 177 | # ssl_session_timeout 5m; 178 | 179 | # ssl_protocols SSLv2 SSLv3 TLSv1; 180 | # ssl_ciphers HIGH:!aNULL:!MD5; 181 | # ssl_prefer_server_ciphers on; 182 | 183 | # location / { 184 | # root html; 185 | # index index.html index.htm; 186 | # } 187 | #} 188 | include vhosts.conf; 189 | 190 | server { 191 | listen 443 default_server ssl; 192 | server_name xcx.tianlian.cn; 193 | 194 | #charset koi8-r; 195 | #access_log logs/host.access.log main; 196 | location / { 197 | root /usr/local/nginx/html/youxiu; 198 | index index.php index.html index.htm; 199 | if (!-e $request_filename) { 200 | rewrite ^/(.*) /index.php?$1 last; 201 | } 202 | } 203 | location ~ \.php$ { 204 | root /usr/local/nginx/html/youxiu; 205 | fastcgi_pass 127.0.0.1:9000; 206 | fastcgi_index index.php; 207 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 208 | include fastcgi_params; 209 | } 210 | 211 | #ssl on; 212 | ssl_certificate /usr/local/nginx/ssl/xcx.tianlian.cn.crt; 213 | ssl_certificate_key /usr/local/nginx/ssl/xcx.tianlian.cn.key; 214 | #ssl_session_timeout 5m; 215 | #ssl_protocols SSLv3 TLSv1; 216 | #ssl_ciphers HIGH:!ADH:!EXPORT56:RC4+RSA:+MEDIUM; 217 | #ssl_prefer_server_ciphers on; 218 | 219 | 220 | error_page 500 502 503 504 /50x.html; 221 | location = /50x.html { 222 | root html; 223 | } 224 | } 225 | 226 | } 227 | -------------------------------------------------------------------------------- /php_client/README: -------------------------------------------------------------------------------- 1 | 2 | Copyright (C) 2008 Happy Fish / YuQing 3 | 4 | FastDFS client php extension may be copied only under the terms of 5 | the Less GNU General Public License (LGPL). 6 | 7 | Please visit the FastDFS Home Page for more detail. 8 | Google code (English language): http://code.google.com/p/fastdfs/ 9 | Chinese language: http://www.csource.com/ 10 | 11 | In file fastdfs_client.ini, item fastdfs_client.tracker_group# point to 12 | the FastDFS client config filename. Please read ../INSTALL file to know 13 | about how to config FastDFS client. 14 | 15 | FastDFS client php extension compiled under PHP 5.2.x, Steps: 16 | phpize 17 | ./configure 18 | make 19 | make install 20 | 21 | #copy lib file to php extension directory, eg. /usr/lib/php/20060613/ 22 | cp modules/fastdfs_client.so /usr/lib/php/20060613/ 23 | 24 | #copy fastdfs_client.ini to PHP etc directory, eg. /etc/php/ 25 | cp fastdfs_client.ini /etc/php/ 26 | 27 | #modify config file fastdfs_client.ini, such as: 28 | vi /etc/php/fastdfs_client.ini 29 | 30 | #run fastdfs_test.php 31 | php fastdfs_test.php 32 | 33 | 34 | FastDFS PHP functions: 35 | 36 | string fastdfs_client_version() 37 | return client library version 38 | 39 | 40 | long fastdfs_get_last_error_no() 41 | return last error no 42 | 43 | 44 | string fastdfs_get_last_error_info() 45 | return last error info 46 | 47 | 48 | string fastdfs_http_gen_token(string remote_filename, int timestamp) 49 | generate anti-steal token for HTTP download 50 | parameters: 51 | remote_filename: the remote filename (do NOT including group name) 52 | timestamp: the timestamp (unix timestamp) 53 | return token string for success, false for error 54 | 55 | 56 | array fastdfs_get_file_info(string group_name, string filename) 57 | get file info from the filename 58 | parameters: 59 | group_name: the group name of the file 60 | remote_filename: the filename on the storage server 61 | return assoc array for success, false for error. 62 | the assoc array including following elements: 63 | create_timestamp: the file create timestamp (unix timestamp) 64 | file_size: the file size (bytes) 65 | source_ip_addr: the source storage server ip address 66 | 67 | 68 | array fastdfs_get_file_info1(string file_id) 69 | get file info from the file id 70 | parameters: 71 | file_id: the file id (including group name and filename) or remote filename 72 | return assoc array for success, false for error. 73 | the assoc array including following elements: 74 | create_timestamp: the file create timestamp (unix timestamp) 75 | file_size: the file size (bytes) 76 | source_ip_addr: the source storage server ip address 77 | 78 | 79 | bool fastdfs_send_data(int sock, string buff) 80 | parameters: 81 | sock: the unix socket description 82 | buff: the buff to send 83 | return true for success, false for error 84 | 85 | 86 | string fastdfs_gen_slave_filename(string master_filename, string prefix_name 87 | [, string file_ext_name]) 88 | generate slave filename by master filename, prefix name and file extension name 89 | parameters: 90 | master_filename: the master filename / file id to generate 91 | the slave filename 92 | prefix_name: the prefix name to generate the slave filename 93 | file_ext_name: slave file extension name, can be null or emtpy 94 | (do not including dot) 95 | return slave filename string for success, false for error 96 | 97 | 98 | boolean fastdfs_storage_file_exist(string group_name, string remote_filename 99 | [, array tracker_server, array storage_server]) 100 | check file exist 101 | parameters: 102 | group_name: the group name of the file 103 | remote_filename: the filename on the storage server 104 | tracker_server: the tracker server assoc array including elements: 105 | ip_addr, port and sock 106 | storage_server: the storage server assoc array including elements: 107 | ip_addr, port and sock 108 | return true for exist, false for not exist 109 | 110 | 111 | boolean fastdfs_storage_file_exist1(string file_id 112 | [, array tracker_server, array storage_server]) 113 | parameters: 114 | file_id: the file id of the file 115 | tracker_server: the tracker server assoc array including elements: 116 | ip_addr, port and sock 117 | storage_server: the storage server assoc array including elements: 118 | ip_addr, port and sock 119 | return true for exist, false for not exist 120 | 121 | 122 | array fastdfs_storage_upload_by_filename(string local_filename 123 | [, string file_ext_name, array meta_list, string group_name, 124 | array tracker_server, array storage_server]) 125 | upload local file to storage server 126 | parameters: 127 | local_filename: the local filename 128 | file_ext_name: the file extension name, do not include dot(.) 129 | meta_list: meta data assoc array, such as 130 | array('width'=>1024, 'height'=>768) 131 | group_name: specify the group name to store the file 132 | tracker_server: the tracker server assoc array including elements: 133 | ip_addr, port and sock 134 | storage_server: the storage server assoc array including elements: 135 | ip_addr, port and sock 136 | return assoc array for success, false for error. 137 | the returned array includes elements: group_name and filename 138 | 139 | 140 | string fastdfs_storage_upload_by_filename1(string local_filename 141 | [, string file_ext_name, array meta_list, string group_name, 142 | array tracker_server, array storage_server]) 143 | upload local file to storage server 144 | parameters: 145 | local_filename: the local filename 146 | file_ext_name: the file extension name, do not include dot(.) 147 | meta_list: meta data assoc array, such as 148 | array('width'=>1024, 'height'=>768) 149 | group_name: specify the group name to store the file 150 | tracker_server: the tracker server assoc array including elements: 151 | ip_addr, port and sock 152 | storage_server: the storage server assoc array including elements: 153 | ip_addr, port and sock 154 | return file_id for success, false for error. 155 | 156 | 157 | array fastdfs_storage_upload_by_filebuff(string file_buff 158 | [, string file_ext_name, array meta_list, string group_name, 159 | array tracker_server, array storage_server]) 160 | upload file buff to storage server 161 | parameters: 162 | file_buff: the file content 163 | file_ext_name: the file extension name, do not include dot(.) 164 | meta_list: meta data assoc array, such as 165 | array('width'=>1024, 'height'=>768) 166 | group_name: specify the group name to store the file 167 | tracker_server: the tracker server assoc array including elements: 168 | ip_addr, port and sock 169 | storage_server: the storage server assoc array including elements: 170 | ip_addr, port and sock 171 | return assoc array for success, false for error. 172 | the returned array includes elements: group_name and filename 173 | 174 | 175 | string fastdfs_storage_upload_by_filebuff1(string file_buff 176 | [, string file_ext_name, array meta_list, string group_name, 177 | array tracker_server, array storage_server]) 178 | upload file buff to storage server 179 | parameters: 180 | file_buff: the file content 181 | file_ext_name: the file extension name, do not include dot(.) 182 | meta_list: meta data assoc array, such as 183 | array('width'=>1024, 'height'=>768) 184 | group_name: specify the group name to store the file 185 | tracker_server: the tracker server assoc array including elements: 186 | ip_addr, port and sock 187 | storage_server: the storage server assoc array including elements: 188 | ip_addr, port and sock 189 | return file_id for success, false for error 190 | 191 | 192 | array fastdfs_storage_upload_by_callback(array callback_array 193 | [, string file_ext_name, array meta_list, string group_name, 194 | array tracker_server, array storage_server]) 195 | upload file to storage server by callback 196 | parameters: 197 | callback_array: the callback assoc array, must have keys: 198 | callback - the php callback function name 199 | callback function prototype as: 200 | function upload_file_callback($sock, $args) 201 | file_size - the file size 202 | args - use argument for callback function 203 | file_ext_name: the file extension name, do not include dot(.) 204 | meta_list: meta data assoc array, such as 205 | array('width'=>1024, 'height'=>768) 206 | group_name: specify the group name to store the file 207 | tracker_server: the tracker server assoc array including elements: 208 | ip_addr, port and sock 209 | storage_server: the storage server assoc array including elements: 210 | ip_addr, port and sock 211 | return assoc array for success, false for error. 212 | the returned array includes elements: group_name and filename 213 | 214 | 215 | array fastdfs_storage_upload_by_callback1(array callback_array 216 | [, string file_ext_name, array meta_list, string group_name, 217 | array tracker_server, array storage_server]) 218 | upload file to storage server by callback 219 | parameters: 220 | callback_array: the callback assoc array, must have keys: 221 | callback - the php callback function name 222 | callback function prototype as: 223 | function upload_file_callback($sock, $args) 224 | file_size - the file size 225 | args - use argument for callback function 226 | file_ext_name: the file extension name, do not include dot(.) 227 | meta_list: meta data assoc array, such as 228 | array('width'=>1024, 'height'=>768) 229 | group_name: specify the group name to store the file 230 | tracker_server: the tracker server assoc array including elements: 231 | ip_addr, port and sock 232 | storage_server: the storage server assoc array including elements: 233 | ip_addr, port and sock 234 | return file_id for success, false for error 235 | 236 | 237 | array fastdfs_storage_upload_appender_by_filename(string local_filename 238 | [, string file_ext_name, array meta_list, string group_name, 239 | array tracker_server, array storage_server]) 240 | upload local file to storage server as appender file 241 | parameters: 242 | local_filename: the local filename 243 | file_ext_name: the file extension name, do not include dot(.) 244 | meta_list: meta data assoc array, such as 245 | array('width'=>1024, 'height'=>768) 246 | group_name: specify the group name to store the file 247 | tracker_server: the tracker server assoc array including elements: 248 | ip_addr, port and sock 249 | storage_server: the storage server assoc array including elements: 250 | ip_addr, port and sock 251 | return assoc array for success, false for error. 252 | the returned array includes elements: group_name and filename 253 | 254 | 255 | string fastdfs_storage_upload_appender_by_filename1(string local_filename 256 | [, string file_ext_name, array meta_list, string group_name, 257 | array tracker_server, array storage_server]) 258 | upload local file to storage server as appender file 259 | parameters: 260 | local_filename: the local filename 261 | file_ext_name: the file extension name, do not include dot(.) 262 | meta_list: meta data assoc array, such as 263 | array('width'=>1024, 'height'=>768) 264 | group_name: specify the group name to store the file 265 | tracker_server: the tracker server assoc array including elements: 266 | ip_addr, port and sock 267 | storage_server: the storage server assoc array including elements: 268 | ip_addr, port and sock 269 | return file_id for success, false for error. 270 | 271 | 272 | array fastdfs_storage_upload_appender_by_filebuff(string file_buff 273 | [, string file_ext_name, array meta_list, string group_name, 274 | array tracker_server, array storage_server]) 275 | upload file buff to storage server as appender file 276 | parameters: 277 | file_buff: the file content 278 | file_ext_name: the file extension name, do not include dot(.) 279 | meta_list: meta data assoc array, such as 280 | array('width'=>1024, 'height'=>768) 281 | group_name: specify the group name to store the file 282 | tracker_server: the tracker server assoc array including elements: 283 | ip_addr, port and sock 284 | storage_server: the storage server assoc array including elements: 285 | ip_addr, port and sock 286 | return assoc array for success, false for error. 287 | the returned array includes elements: group_name and filename 288 | 289 | 290 | string fastdfs_storage_upload_appender_by_filebuff1(string file_buff 291 | [, string file_ext_name, array meta_list, string group_name, 292 | array tracker_server, array storage_server]) 293 | upload file buff to storage server as appender file 294 | parameters: 295 | file_buff: the file content 296 | file_ext_name: the file extension name, do not include dot(.) 297 | meta_list: meta data assoc array, such as 298 | array('width'=>1024, 'height'=>768) 299 | group_name: specify the group name to store the file 300 | tracker_server: the tracker server assoc array including elements: 301 | ip_addr, port and sock 302 | storage_server: the storage server assoc array including elements: 303 | ip_addr, port and sock 304 | return file_id for success, false for error 305 | 306 | 307 | array fastdfs_storage_upload_appender_by_callback(array callback_array 308 | [, string file_ext_name, array meta_list, string group_name, 309 | array tracker_server, array storage_server]) 310 | upload file to storage server by callback as appender file 311 | parameters: 312 | callback_array: the callback assoc array, must have keys: 313 | callback - the php callback function name 314 | callback function prototype as: 315 | function upload_file_callback($sock, $args) 316 | file_size - the file size 317 | args - use argument for callback function 318 | file_ext_name: the file extension name, do not include dot(.) 319 | meta_list: meta data assoc array, such as 320 | array('width'=>1024, 'height'=>768) 321 | group_name: specify the group name to store the file 322 | tracker_server: the tracker server assoc array including elements: 323 | ip_addr, port and sock 324 | storage_server: the storage server assoc array including elements: 325 | ip_addr, port and sock 326 | return assoc array for success, false for error. 327 | the returned array includes elements: group_name and filename 328 | 329 | 330 | string fastdfs_storage_upload_appender_by_callback1(array callback_array 331 | [, string file_ext_name, array meta_list, string group_name, 332 | array tracker_server, array storage_server]) 333 | upload file to storage server by callback as appender file 334 | parameters: 335 | callback_array: the callback assoc array, must have keys: 336 | callback - the php callback function name 337 | callback function prototype as: 338 | function upload_file_callback($sock, $args) 339 | file_size - the file size 340 | args - use argument for callback function 341 | file_ext_name: the file extension name, do not include dot(.) 342 | meta_list: meta data assoc array, such as 343 | array('width'=>1024, 'height'=>768) 344 | group_name: specify the group name to store the file 345 | tracker_server: the tracker server assoc array including elements: 346 | ip_addr, port and sock 347 | storage_server: the storage server assoc array including elements: 348 | ip_addr, port and sock 349 | return file_id for success, false for error 350 | 351 | 352 | boolean fastdfs_storage_append_by_filename(string local_filename, 353 | string group_name, appender_filename 354 | [, array tracker_server, array storage_server]) 355 | append local file to the appender file of storage server 356 | parameters: 357 | local_filename: the local filename 358 | group_name: the the group name of appender file 359 | appender_filename: the appender filename 360 | tracker_server: the tracker server assoc array including elements: 361 | ip_addr, port and sock 362 | storage_server: the storage server assoc array including elements: 363 | ip_addr, port and sock 364 | return true for success, false for error 365 | 366 | 367 | 368 | string fastdfs_storage_append_by_filename1(string local_filename, 369 | string appender_file_id [, array tracker_server, array storage_server]) 370 | append local file to the appender file of storage server 371 | parameters: 372 | local_filename: the local filename 373 | appender_file_id: the appender file id 374 | tracker_server: the tracker server assoc array including elements: 375 | ip_addr, port and sock 376 | storage_server: the storage server assoc array including elements: 377 | ip_addr, port and sock 378 | return true for success, false for error 379 | 380 | 381 | 382 | boolean fastdfs_storage_append_by_filebuff(string file_buff, 383 | string group_name, string appender_filename 384 | [, array tracker_server, array storage_server]) 385 | append file buff to the appender file of storage server 386 | parameters: 387 | file_buff: the file content 388 | group_name: the the group name of appender file 389 | appender_filename: the appender filename 390 | tracker_server: the tracker server assoc array including elements: 391 | ip_addr, port and sock 392 | storage_server: the storage server assoc array including elements: 393 | ip_addr, port and sock 394 | return true for success, false for error 395 | 396 | 397 | 398 | boolean fastdfs_storage_append_by_filebuff1(string file_buff, 399 | string appender_file_id [, array tracker_server, array storage_server]) 400 | append file buff to the appender file of storage server 401 | parameters: 402 | file_buff: the file content 403 | appender_file_id: the appender file id 404 | tracker_server: the tracker server assoc array including elements: 405 | ip_addr, port and sock 406 | storage_server: the storage server assoc array including elements: 407 | ip_addr, port and sock 408 | return true for success, false for error 409 | 410 | 411 | 412 | boolean fastdfs_storage_append_by_callback(array callback_array, 413 | string group_name, string appender_filename 414 | [, array tracker_server, array storage_server]) 415 | append file to the appender file of storage server by callback 416 | parameters: 417 | callback_array: the callback assoc array, must have keys: 418 | callback - the php callback function name 419 | callback function prototype as: 420 | function upload_file_callback($sock, $args) 421 | file_size - the file size 422 | args - use argument for callback function 423 | group_name: the the group name of appender file 424 | appender_filename: the appender filename 425 | tracker_server: the tracker server assoc array including elements: 426 | ip_addr, port and sock 427 | storage_server: the storage server assoc array including elements: 428 | ip_addr, port and sock 429 | return true for success, false for error 430 | 431 | 432 | 433 | boolean fastdfs_storage_append_by_callback1(array callback_array, 434 | string appender_file_id [, array tracker_server, array storage_server]) 435 | append file buff to the appender file of storage server 436 | parameters: 437 | callback_array: the callback assoc array, must have keys: 438 | callback - the php callback function name 439 | callback function prototype as: 440 | function upload_file_callback($sock, $args) 441 | file_size - the file size 442 | args - use argument for callback function 443 | appender_file_id: the appender file id 444 | tracker_server: the tracker server assoc array including elements: 445 | ip_addr, port and sock 446 | storage_server: the storage server assoc array including elements: 447 | ip_addr, port and sock 448 | return true for success, false for error 449 | 450 | 451 | 452 | boolean fastdfs_storage_modify_by_filename(string local_filename, 453 | long file_offset, string group_name, appender_filename, 454 | [array tracker_server, array storage_server]) 455 | modify appender file by local file 456 | parameters: 457 | local_filename: the local filename 458 | file_offset: offset of appender file 459 | group_name: the the group name of appender file 460 | appender_filename: the appender filename 461 | tracker_server: the tracker server assoc array including elements: 462 | ip_addr, port and sock 463 | storage_server: the storage server assoc array including elements: 464 | ip_addr, port and sock 465 | return true for success, false for error 466 | 467 | 468 | 469 | boolean fastdfs_storage_modify_by_filename1(string local_filename, 470 | long file_offset, string appender_file_id 471 | [, array tracker_server, array storage_server]) 472 | modify appender file by local file 473 | parameters: 474 | local_filename: the local filename 475 | file_offset: offset of appender file 476 | appender_file_id: the appender file id 477 | tracker_server: the tracker server assoc array including elements: 478 | ip_addr, port and sock 479 | storage_server: the storage server assoc array including elements: 480 | ip_addr, port and sock 481 | return true for success, false for error 482 | 483 | 484 | 485 | boolean fastdfs_storage_modify_by_filebuff(string file_buff, 486 | long file_offset, string group_name, string appender_filename 487 | [, array tracker_server, array storage_server]) 488 | modify appender file by file buff 489 | parameters: 490 | file_buff: the file content 491 | file_offset: offset of appender file 492 | group_name: the the group name of appender file 493 | appender_filename: the appender filename 494 | tracker_server: the tracker server assoc array including elements: 495 | ip_addr, port and sock 496 | storage_server: the storage server assoc array including elements: 497 | ip_addr, port and sock 498 | return true for success, false for error 499 | 500 | 501 | 502 | boolean fastdfs_storage_modify_by_filebuff1(string file_buff, 503 | long file_offset, string appender_file_id 504 | [, array tracker_server, array storage_server]) 505 | modify appender file by file buff 506 | parameters: 507 | file_buff: the file content 508 | file_offset: offset of appender file 509 | appender_file_id: the appender file id 510 | tracker_server: the tracker server assoc array including elements: 511 | ip_addr, port and sock 512 | storage_server: the storage server assoc array including elements: 513 | ip_addr, port and sock 514 | return true for success, false for error 515 | 516 | 517 | 518 | boolean fastdfs_storage_modify_by_callback(array callback_array, 519 | long file_offset, string group_name, string appender_filename 520 | [, array tracker_server, array storage_server]) 521 | modify appender file by callback 522 | parameters: 523 | callback_array: the callback assoc array, must have keys: 524 | callback - the php callback function name 525 | callback function prototype as: 526 | function upload_file_callback($sock, $args) 527 | file_size - the file size 528 | args - use argument for callback function 529 | file_offset: offset of appender file 530 | group_name: the the group name of appender file 531 | appender_filename: the appender filename 532 | tracker_server: the tracker server assoc array including elements: 533 | ip_addr, port and sock 534 | storage_server: the storage server assoc array including elements: 535 | ip_addr, port and sock 536 | return true for success, false for error 537 | 538 | 539 | 540 | boolean fastdfs_storage_modify_by_callback1(array callback_array, 541 | long file_offset, string group_name, string appender_filename 542 | [, array tracker_server, array storage_server]) 543 | modify appender file by callback 544 | parameters: 545 | callback_array: the callback assoc array, must have keys: 546 | callback - the php callback function name 547 | callback function prototype as: 548 | function upload_file_callback($sock, $args) 549 | file_size - the file size 550 | args - use argument for callback function 551 | file_offset: offset of appender file 552 | appender_file_id: the appender file id 553 | tracker_server: the tracker server assoc array including elements: 554 | ip_addr, port and sock 555 | storage_server: the storage server assoc array including elements: 556 | ip_addr, port and sock 557 | return true for success, false for error 558 | 559 | 560 | 561 | boolean fastdfs_storage_truncate_file(string group_name, 562 | string appender_filename [, long truncated_file_size = 0, 563 | array tracker_server, array storage_server]) 564 | truncate appender file to specify size 565 | parameters: 566 | group_name: the the group name of appender file 567 | appender_filename: the appender filename 568 | truncated_file_size: truncate the file size to 569 | tracker_server: the tracker server assoc array including elements: 570 | ip_addr, port and sock 571 | storage_server: the storage server assoc array including elements: 572 | ip_addr, port and sock 573 | return true for success, false for error 574 | 575 | 576 | 577 | boolean fastdfs_storage_truncate_file1(string appender_file_id 578 | [, long truncated_file_size = 0, array tracker_server, 579 | array storage_server]) 580 | truncate appender file to specify size 581 | parameters: 582 | appender_file_id: the appender file id 583 | truncated_file_size: truncate the file size to 584 | tracker_server: the tracker server assoc array including elements: 585 | ip_addr, port and sock 586 | storage_server: the storage server assoc array including elements: 587 | ip_addr, port and sock 588 | return true for success, false for error 589 | 590 | 591 | string/array fastdfs_storage_upload_slave_by_filename(string local_filename, 592 | string group_name, string master_filename, string prefix_name 593 | [, string file_ext_name, array meta_list, 594 | array tracker_server, array storage_server]) 595 | upload local file to storage server (slave file mode) 596 | parameters: 597 | file_buff: the file content 598 | group_name: the group name of the master file 599 | master_filename: the master filename to generate the slave file id 600 | prefix_name: the prefix name to generage the slave file id 601 | file_ext_name: the file extension name, do not include dot(.) 602 | meta_list: meta data assoc array, such as 603 | array('width'=>1024, 'height'=>768) 604 | tracker_server: the tracker server assoc array including elements: 605 | ip_addr, port and sock 606 | storage_server: the storage server assoc array including elements: 607 | ip_addr, port and sock 608 | return assoc array for success, false for error. 609 | the returned array includes elements: group_name and filename 610 | 611 | 612 | string fastdfs_storage_upload_slave_by_filename1(string local_filename, 613 | string master_file_id, string prefix_name 614 | [, string file_ext_name, array meta_list, 615 | array tracker_server, array storage_server]) 616 | upload local file to storage server (slave file mode) 617 | parameters: 618 | local_filename: the local filename 619 | master_file_id: the master file id to generate the slave file id 620 | prefix_name: the prefix name to generage the slave file id 621 | file_ext_name: the file extension name, do not include dot(.) 622 | meta_list: meta data assoc array, such as 623 | array('width'=>1024, 'height'=>768) 624 | tracker_server: the tracker server assoc array including elements: 625 | ip_addr, port and sock 626 | storage_server: the storage server assoc array including elements: 627 | ip_addr, port and sock 628 | return file_id for success, false for error. 629 | 630 | 631 | array fastdfs_storage_upload_slave_by_filebuff(string file_buff, 632 | string group_name, string master_filename, string prefix_name 633 | [, string file_ext_name, array meta_list, 634 | array tracker_server, array storage_server]) 635 | upload file buff to storage server (slave file mode) 636 | parameters: 637 | file_buff: the file content 638 | group_name: the group name of the master file 639 | master_filename: the master filename to generate the slave file id 640 | prefix_name: the prefix name to generage the slave file id 641 | file_ext_name: the file extension name, do not include dot(.) 642 | meta_list: meta data assoc array, such as 643 | array('width'=>1024, 'height'=>768) 644 | tracker_server: the tracker server assoc array including elements: 645 | ip_addr, port and sock 646 | storage_server: the storage server assoc array including elements: 647 | ip_addr, port and sock 648 | return assoc array for success, false for error. 649 | the returned array includes elements: group_name and filename 650 | 651 | 652 | string fastdfs_storage_upload_slave_by_filebuff1(string file_buff, 653 | string master_file_id, string prefix_name 654 | [, string file_ext_name, array meta_list, 655 | array tracker_server, array storage_server]) 656 | upload file buff to storage server (slave file mode) 657 | parameters: 658 | file_buff: the file content 659 | master_file_id: the master file id to generate the slave file id 660 | prefix_name: the prefix name to generage the slave file id 661 | file_ext_name: the file extension name, do not include dot(.) 662 | meta_list: meta data assoc array, such as 663 | array('width'=>1024, 'height'=>768) 664 | tracker_server: the tracker server assoc array including elements: 665 | ip_addr, port and sock 666 | storage_server: the storage server assoc array including elements: 667 | ip_addr, port and sock 668 | return file_id for success, false for error 669 | 670 | 671 | array fastdfs_storage_upload_slave_by_callback(array callback_array, 672 | string group_name, string master_filename, string prefix_name 673 | [, string file_ext_name, array meta_list, 674 | array tracker_server, array storage_server]) 675 | upload file to storage server by callback (slave file mode) 676 | parameters: 677 | callback_array: the callback assoc array, must have keys: 678 | callback - the php callback function name 679 | callback function prototype as: 680 | function upload_file_callback($sock, $args) 681 | file_size - the file size 682 | args - use argument for callback function 683 | group_name: the group name of the master file 684 | master_filename: the master filename to generate the slave file id 685 | prefix_name: the prefix name to generage the slave file id 686 | file_ext_name: the file extension name, do not include dot(.) 687 | meta_list: meta data assoc array, such as 688 | array('width'=>1024, 'height'=>768) 689 | tracker_server: the tracker server assoc array including elements: 690 | ip_addr, port and sock 691 | storage_server: the storage server assoc array including elements: 692 | ip_addr, port and sock 693 | return assoc array for success, false for error. 694 | the returned array includes elements: group_name and filename 695 | 696 | 697 | string fastdfs_storage_upload_slave_by_callback1(array callback_array, 698 | string master_file_id, string prefix_name 699 | [, string file_ext_name, array meta_list, 700 | array tracker_server, array storage_server]) 701 | upload file to storage server by callback (slave file mode) 702 | parameters: 703 | callback_array: the callback assoc array, must have keys: 704 | callback - the php callback function name 705 | callback function prototype as: 706 | function upload_file_callback($sock, $args) 707 | file_size - the file size 708 | args - use argument for callback function 709 | master_file_id: the master file id to generate the slave file id 710 | prefix_name: the prefix name to generage the slave file id 711 | file_ext_name: the file extension name, do not include dot(.) 712 | meta_list: meta data assoc array, such as 713 | array('width'=>1024, 'height'=>768) 714 | tracker_server: the tracker server assoc array including elements: 715 | ip_addr, port and sock 716 | storage_server: the storage server assoc array including elements: 717 | ip_addr, port and sock 718 | return file_id for success, false for error 719 | 720 | 721 | boolean fastdfs_storage_delete_file(string group_name, string remote_filename 722 | [, array tracker_server, array storage_server]) 723 | delete file from storage server 724 | parameters: 725 | group_name: the group name of the file 726 | remote_filename: the filename on the storage server 727 | tracker_server: the tracker server assoc array including elements: 728 | ip_addr, port and sock 729 | storage_server: the storage server assoc array including elements: 730 | ip_addr, port and sock 731 | return true for success, false for error 732 | 733 | 734 | boolean fastdfs_storage_delete_file1(string file_id 735 | [, array tracker_server, array storage_server]) 736 | delete file from storage server 737 | parameters: 738 | file_id: the file id to be deleted 739 | tracker_server: the tracker server assoc array including elements: 740 | ip_addr, port and sock 741 | storage_server: the storage server assoc array including elements: 742 | ip_addr, port and sock 743 | return true for success, false for error 744 | 745 | 746 | string fastdfs_storage_download_file_to_buff(string group_name, 747 | string remote_filename [, long file_offset, long download_bytes, 748 | array tracker_server, array storage_server]) 749 | get file content from storage server 750 | parameters: 751 | group_name: the group name of the file 752 | remote_filename: the filename on the storage server 753 | file_offset: file start offset, default value is 0 754 | download_bytes: 0 (default value) means from the file offset to 755 | the file end 756 | tracker_server: the tracker server assoc array including elements: 757 | ip_addr, port and sock 758 | storage_server: the storage server assoc array including elements: 759 | ip_addr, port and sock 760 | return the file content for success, false for error 761 | 762 | 763 | string fastdfs_storage_download_file_to_buff1(string file_id 764 | [, long file_offset, long download_bytes, 765 | array tracker_server, array storage_server]) 766 | get file content from storage server 767 | parameters: 768 | file_id: the file id of the file 769 | file_offset: file start offset, default value is 0 770 | download_bytes: 0 (default value) means from the file offset to 771 | the file end 772 | tracker_server: the tracker server assoc array including elements: 773 | ip_addr, port and sock 774 | storage_server: the storage server assoc array including elements: 775 | ip_addr, port and sock 776 | return the file content for success, false for error 777 | 778 | 779 | boolean fastdfs_storage_download_file_to_file(string group_name, 780 | string remote_filename, string local_filename [, long file_offset, 781 | long download_bytes, array tracker_server, array storage_server]) 782 | download file from storage server to local file 783 | parameters: 784 | group_name: the group name of the file 785 | remote_filename: the filename on the storage server 786 | local_filename: the local filename to save the file content 787 | file_offset: file start offset, default value is 0 788 | download_bytes: 0 (default value) means from the file offset to 789 | the file end 790 | tracker_server: the tracker server assoc array including elements: 791 | ip_addr, port and sock 792 | storage_server: the storage server assoc array including elements: 793 | ip_addr, port and sock 794 | return true for success, false for error 795 | 796 | 797 | boolean fastdfs_storage_download_file_to_file1(string file_id, 798 | string local_filename [, long file_offset, long download_bytes, 799 | array tracker_server, array storage_server]) 800 | download file from storage server to local file 801 | parameters: 802 | file_id: the file id of the file 803 | local_filename: the local filename to save the file content 804 | file_offset: file start offset, default value is 0 805 | download_bytes: 0 (default value) means from the file offset to 806 | the file end 807 | tracker_server: the tracker server assoc array including elements: 808 | ip_addr, port and sock 809 | storage_server: the storage server assoc array including elements: 810 | ip_addr, port and sock 811 | return true for success, false for error 812 | 813 | 814 | boolean fastdfs_storage_download_file_to_callback(string group_name, 815 | string remote_filename, array download_callback [, long file_offset, 816 | long download_bytes, array tracker_server, array storage_server]) 817 | parameters: 818 | group_name: the group name of the file 819 | remote_filename: the filename on the storage server 820 | download_callback: the download callback array, elements as: 821 | callback - the php callback function name 822 | callback function prototype as: 823 | function my_download_file_callback($args, $file_size, $data) 824 | args - use argument for callback function 825 | file_offset: file start offset, default value is 0 826 | download_bytes: 0 (default value) means from the file offset to 827 | the file end 828 | tracker_server: the tracker server assoc array including elements: 829 | ip_addr, port and sock 830 | storage_server: the storage server assoc array including elements: 831 | ip_addr, port and sock 832 | return true for success, false for error 833 | 834 | 835 | boolean fastdfs_storage_download_file_to_callback1(string file_id, 836 | array download_callback [, long file_offset, long download_bytes, 837 | array tracker_server, array storage_server]) 838 | parameters: 839 | file_id: the file id of the file 840 | download_callback: the download callback array, elements as: 841 | callback - the php callback function name 842 | callback function prototype as: 843 | function my_download_file_callback($args, $file_size, $data) 844 | args - use argument for callback function 845 | file_offset: file start offset, default value is 0 846 | download_bytes: 0 (default value) means from the file offset to 847 | the file end 848 | tracker_server: the tracker server assoc array including elements: 849 | ip_addr, port and sock 850 | storage_server: the storage server assoc array including elements: 851 | ip_addr, port and sock 852 | return true for success, false for error 853 | 854 | 855 | boolean fastdfs_storage_set_metadata(string group_name, string remote_filename, 856 | array meta_list [, string op_type, array tracker_server, 857 | array storage_server]) 858 | set meta data of the file 859 | parameters: 860 | group_name: the group name of the file 861 | remote_filename: the filename on the storage server 862 | meta_list: meta data assoc array to be set, such as 863 | array('width'=>1024, 'height'=>768) 864 | op_type: operate flag, can be one of following flags: 865 | FDFS_STORAGE_SET_METADATA_FLAG_MERGE: combined with the old meta data 866 | FDFS_STORAGE_SET_METADATA_FLAG_OVERWRITE: overwrite the old meta data 867 | tracker_server: the tracker server assoc array including elements: 868 | ip_addr, port and sock 869 | storage_server: the storage server assoc array including elements: 870 | ip_addr, port and sock 871 | return true for success, false for error 872 | 873 | 874 | boolean fastdfs_storage_set_metadata1(string file_id, array meta_list 875 | [, string op_type, array tracker_server, array storage_server]) 876 | set meta data of the file 877 | parameters: 878 | file_id: the file id of the file 879 | meta_list: meta data assoc array to be set, such as 880 | array('width'=>1024, 'height'=>768) 881 | op_type: operate flag, can be one of following flags: 882 | FDFS_STORAGE_SET_METADATA_FLAG_MERGE: combined with the old meta data 883 | FDFS_STORAGE_SET_METADATA_FLAG_OVERWRITE: overwrite the old meta data 884 | tracker_server: the tracker server assoc array including elements: 885 | ip_addr, port and sock 886 | storage_server: the storage server assoc array including elements: 887 | ip_addr, port and sock 888 | return true for success, false for error 889 | 890 | 891 | array fastdfs_storage_get_metadata(string group_name, string remote_filename 892 | [, array tracker_server, array storage_server]) 893 | get meta data of the file 894 | parameters: 895 | group_name: the group name of the file 896 | remote_filename: the filename on the storage server 897 | tracker_server: the tracker server assoc array including elements: 898 | ip_addr, port and sock 899 | storage_server: the storage server assoc array including elements: 900 | ip_addr, port and sock 901 | return assoc array for success, false for error 902 | returned array like: array('width' => 1024, 'height' => 768) 903 | 904 | 905 | array fastdfs_storage_get_metadata1(string file_id 906 | [, array tracker_server, array storage_server]) 907 | get meta data of the file 908 | parameters: 909 | file_id: the file id of the file 910 | tracker_server: the tracker server assoc array including elements: 911 | ip_addr, port and sock 912 | storage_server: the storage server assoc array including elements: 913 | ip_addr, port and sock 914 | return assoc array for success, false for error 915 | returned array like: array('width' => 1024, 'height' => 768) 916 | 917 | 918 | array fastdfs_connect_server(string ip_addr, int port) 919 | connect to the server 920 | parameters: 921 | ip_addr: the ip address of the server 922 | port: the port of the server 923 | return assoc array for success, false for error 924 | 925 | 926 | boolean fastdfs_disconnect_server(array server_info) 927 | disconnect from the server 928 | parameters: 929 | server_info: the assoc array including elements: 930 | ip_addr, port and sock 931 | return true for success, false for error 932 | 933 | 934 | boolean fastdfs_active_test(array server_info) 935 | send ACTIVE_TEST cmd to the server 936 | parameters: 937 | server_info: the assoc array including elements: 938 | ip_addr, port and sock, sock must be connected 939 | return true for success, false for error 940 | 941 | 942 | array fastdfs_tracker_get_connection() 943 | get a connected tracker server 944 | return assoc array for success, false for error 945 | the assoc array including elements: ip_addr, port and sock 946 | 947 | 948 | boolean fastdfs_tracker_make_all_connections() 949 | connect to all tracker servers 950 | return true for success, false for error 951 | 952 | 953 | boolean fastdfs_tracker_close_all_connections() 954 | close all connections to the tracker servers 955 | return true for success, false for error 956 | 957 | 958 | array fastdfs_tracker_list_groups([string group_name, array tracker_server]) 959 | get group stat info 960 | parameters: 961 | group_name: specify the group name, null or empty string means all groups 962 | tracker_server: the tracker server assoc array including elements: 963 | ip_addr, port and sock 964 | return index array for success, false for error, each group as a array element 965 | 966 | 967 | array fastdfs_tracker_query_storage_store([string group_name, 968 | array tracker_server]) 969 | get the storage server info to upload file 970 | parameters: 971 | group_name: specify the group name 972 | tracker_server: the tracker server assoc array including elements: 973 | ip_addr, port and sock 974 | return assoc array for success, false for error. the assoc array including 975 | elements: ip_addr, port, sock and store_path_index 976 | 977 | 978 | array fastdfs_tracker_query_storage_store_list([string group_name, 979 | array tracker_server]) 980 | get the storage server list to upload file 981 | parameters: 982 | group_name: specify the group name 983 | tracker_server: the tracker server assoc array including elements: 984 | ip_addr, port and sock 985 | return indexed storage server array for success, false for error. 986 | each element is an ssoc array including elements: 987 | ip_addr, port, sock and store_path_index 988 | 989 | 990 | array fastdfs_tracker_query_storage_update(string group_name, 991 | string remote_filename [, array tracker_server]) 992 | get the storage server info to set metadata 993 | parameters: 994 | group_name: the group name of the file 995 | remote_filename: the filename on the storage server 996 | tracker_server: the tracker server assoc array including elements: 997 | ip_addr, port and sock 998 | return assoc array for success, false for error 999 | the assoc array including elements: ip_addr, port and sock 1000 | 1001 | 1002 | array fastdfs_tracker_query_storage_update1(string file_id, 1003 | [, array tracker_server]) 1004 | get the storage server info to set metadata 1005 | parameters: 1006 | file_id: the file id of the file 1007 | tracker_server: the tracker server assoc array including elements: 1008 | ip_addr, port and sock 1009 | return assoc array for success, false for error 1010 | the assoc array including elements: ip_addr, port and sock 1011 | 1012 | 1013 | array fastdfs_tracker_query_storage_fetch(string group_name, 1014 | string remote_filename [, array tracker_server]) 1015 | get the storage server info to download file (or get metadata) 1016 | parameters: 1017 | group_name: the group name of the file 1018 | remote_filename: the filename on the storage server 1019 | tracker_server: the tracker server assoc array including elements: 1020 | ip_addr, port and sock 1021 | return assoc array for success, false for error 1022 | the assoc array including elements: ip_addr, port and sock 1023 | 1024 | array fastdfs_tracker_query_storage_fetch1(string file_id 1025 | [, array tracker_server]) 1026 | get the storage server info to download file (or get metadata) 1027 | parameters: 1028 | file_id: the file id of the file 1029 | remote_filename: the filename on the storage server 1030 | tracker_server: the tracker server assoc array including elements: 1031 | ip_addr, port and sock 1032 | return assoc array for success, false for error 1033 | the assoc array including elements: ip_addr, port and sock 1034 | 1035 | 1036 | array fastdfs_tracker_query_storage_list(string group_name, 1037 | string remote_filename [, array tracker_server]) 1038 | get the storage server list which can retrieve the file content or metadata 1039 | parameters: 1040 | group_name: the group name of the file 1041 | remote_filename: the filename on the storage server 1042 | tracker_server: the tracker server assoc array including elements: 1043 | ip_addr, port and sock 1044 | return index array for success, false for error. 1045 | each server as an array element 1046 | 1047 | 1048 | array fastdfs_tracker_query_storage_list1(string file_id 1049 | [, array tracker_server]) 1050 | get the storage server list which can retrieve the file content or metadata 1051 | parameters: 1052 | file_id: the file id of the file 1053 | remote_filename: the filename on the storage server 1054 | tracker_server: the tracker server assoc array including elements: 1055 | ip_addr, port and sock 1056 | return index array for success, false for error. 1057 | each server as an array element 1058 | 1059 | 1060 | boolean fastdfs_tracker_delete_storage(string group_name, string storage_ip) 1061 | delete the storage server from the cluster 1062 | parameters: 1063 | group_name: the group name of the storage server 1064 | storage_ip: the ip address of the storage server to be deleted 1065 | return true for success, false for error 1066 | 1067 | 1068 | FastDFS Class Info: 1069 | 1070 | class FastDFS([int config_index, boolean bMultiThread]); 1071 | FastDFS class constructor 1072 | params: 1073 | config_index: use which config file, base 0. default is 0 1074 | bMultiThread: if in multi-thread, default is false 1075 | 1076 | 1077 | long FastDFS::get_last_error_no() 1078 | return last error no 1079 | 1080 | 1081 | string FastDFS::get_last_error_info() 1082 | return last error info 1083 | 1084 | bool FastDFS::send_data(int sock, string buff) 1085 | parameters: 1086 | sock: the unix socket description 1087 | buff: the buff to send 1088 | return true for success, false for error 1089 | 1090 | 1091 | string FastDFS::http_gen_token(string remote_filename, int timestamp) 1092 | generate anti-steal token for HTTP download 1093 | parameters: 1094 | remote_filename: the remote filename (do NOT including group name) 1095 | timestamp: the timestamp (unix timestamp) 1096 | return token string for success, false for error 1097 | 1098 | 1099 | array FastDFS::get_file_info(string group_name, string filename) 1100 | get file info from the filename 1101 | parameters: 1102 | group_name: the group name of the file 1103 | remote_filename: the filename on the storage server 1104 | return assoc array for success, false for error. 1105 | the assoc array including following elements: 1106 | create_timestamp: the file create timestamp (unix timestamp) 1107 | file_size: the file size (bytes) 1108 | source_ip_addr: the source storage server ip address 1109 | crc32: the crc32 signature of the file 1110 | 1111 | 1112 | array FastDFS::get_file_info1(string file_id) 1113 | get file info from the file id 1114 | parameters: 1115 | file_id: the file id (including group name and filename) or remote filename 1116 | return assoc array for success, false for error. 1117 | the assoc array including following elements: 1118 | create_timestamp: the file create timestamp (unix timestamp) 1119 | file_size: the file size (bytes) 1120 | source_ip_addr: the source storage server ip address 1121 | 1122 | 1123 | string FastDFS::gen_slave_filename(string master_filename, string prefix_name 1124 | [, string file_ext_name]) 1125 | generate slave filename by master filename, prefix name and file extension name 1126 | parameters: 1127 | master_filename: the master filename / file id to generate 1128 | the slave filename 1129 | prefix_name: the prefix name to generate the slave filename 1130 | file_ext_name: slave file extension name, can be null or emtpy 1131 | (do not including dot) 1132 | return slave filename string for success, false for error 1133 | 1134 | 1135 | boolean FastDFS::storage_file_exist(string group_name, string remote_filename 1136 | [, array tracker_server, array storage_server]) 1137 | check file exist 1138 | parameters: 1139 | group_name: the group name of the file 1140 | remote_filename: the filename on the storage server 1141 | tracker_server: the tracker server assoc array including elements: 1142 | ip_addr, port and sock 1143 | storage_server: the storage server assoc array including elements: 1144 | ip_addr, port and sock 1145 | return true for exist, false for not exist 1146 | 1147 | 1148 | boolean FastDFS::storage_file_exist1(string file_id 1149 | [, array tracker_server, array storage_server]) 1150 | parameters: 1151 | file_id: the file id of the file 1152 | tracker_server: the tracker server assoc array including elements: 1153 | ip_addr, port and sock 1154 | storage_server: the storage server assoc array including elements: 1155 | ip_addr, port and sock 1156 | return true for exist, false for not exist 1157 | 1158 | 1159 | array FastDFS::storage_upload_by_filename(string local_filename 1160 | [, string file_ext_name, array meta_list, string group_name, 1161 | array tracker_server, array storage_server]) 1162 | upload local file to storage server 1163 | parameters: 1164 | local_filename: the local filename 1165 | file_ext_name: the file extension name, do not include dot(.) 1166 | meta_list: meta data assoc array, such as 1167 | array('width'=>1024, 'height'=>768) 1168 | group_name: specify the group name to store the file 1169 | tracker_server: the tracker server assoc array including elements: 1170 | ip_addr, port and sock 1171 | storage_server: the storage server assoc array including elements: 1172 | ip_addr, port and sock 1173 | return assoc array for success, false for error. 1174 | the returned array includes elements: group_name and filename 1175 | 1176 | 1177 | string FastDFS::storage_upload_by_filename1(string local_filename 1178 | [, string file_ext_name, array meta_list, string group_name, 1179 | array tracker_server, array storage_server]) 1180 | upload local file to storage server 1181 | parameters: 1182 | local_filename: the local filename 1183 | file_ext_name: the file extension name, do not include dot(.) 1184 | meta_list: meta data assoc array, such as 1185 | array('width'=>1024, 'height'=>768) 1186 | group_name: specify the group name to store the file 1187 | tracker_server: the tracker server assoc array including elements: 1188 | ip_addr, port and sock 1189 | storage_server: the storage server assoc array including elements: 1190 | ip_addr, port and sock 1191 | return file_id for success, false for error. 1192 | 1193 | 1194 | array FastDFS::storage_upload_by_filebuff(string file_buff 1195 | [, string file_ext_name, array meta_list, string group_name, 1196 | array tracker_server, array storage_server]) 1197 | upload file buff to storage server 1198 | parameters: 1199 | file_buff: the file content 1200 | file_ext_name: the file extension name, do not include dot(.) 1201 | meta_list: meta data assoc array, such as 1202 | array('width'=>1024, 'height'=>768) 1203 | group_name: specify the group name to store the file 1204 | tracker_server: the tracker server assoc array including elements: 1205 | ip_addr, port and sock 1206 | storage_server: the storage server assoc array including elements: 1207 | ip_addr, port and sock 1208 | return assoc array for success, false for error. 1209 | the returned array includes elements: group_name and filename 1210 | 1211 | 1212 | string FastDFS::storage_upload_by_filebuff1(string file_buff 1213 | [, string file_ext_name, array meta_list, string group_name, 1214 | array tracker_server, array storage_server]) 1215 | upload file buff to storage server 1216 | parameters: 1217 | file_buff: the file content 1218 | file_ext_name: the file extension name, do not include dot(.) 1219 | meta_list: meta data assoc array, such as 1220 | array('width'=>1024, 'height'=>768) 1221 | group_name: specify the group name to store the file 1222 | tracker_server: the tracker server assoc array including elements: 1223 | ip_addr, port and sock 1224 | storage_server: the storage server assoc array including elements: 1225 | ip_addr, port and sock 1226 | return file_id for success, false for error 1227 | 1228 | 1229 | array FastDFS::storage_upload_by_callback(array callback_array 1230 | [, string file_ext_name, array meta_list, string group_name, 1231 | array tracker_server, array storage_server]) 1232 | upload file to storage server by callback 1233 | parameters: 1234 | callback_array: the callback assoc array, must have keys: 1235 | callback - the php callback function name 1236 | callback function prototype as: 1237 | function upload_file_callback($sock, $args) 1238 | file_size - the file size 1239 | args - use argument for callback function 1240 | file_ext_name: the file extension name, do not include dot(.) 1241 | meta_list: meta data assoc array, such as 1242 | array('width'=>1024, 'height'=>768) 1243 | group_name: specify the group name to store the file 1244 | tracker_server: the tracker server assoc array including elements: 1245 | ip_addr, port and sock 1246 | storage_server: the storage server assoc array including elements: 1247 | ip_addr, port and sock 1248 | return assoc array for success, false for error. 1249 | the returned array includes elements: group_name and filename 1250 | 1251 | 1252 | array FastDFS::storage_upload_by_callback1(array callback_array 1253 | [, string file_ext_name, array meta_list, string group_name, 1254 | array tracker_server, array storage_server]) 1255 | upload file to storage server by callback 1256 | parameters: 1257 | callback_array: the callback assoc array, must have keys: 1258 | callback - the php callback function name 1259 | callback function prototype as: 1260 | function upload_file_callback($sock, $args) 1261 | file_size - the file size 1262 | args - use argument for callback function 1263 | file_ext_name: the file extension name, do not include dot(.) 1264 | meta_list: meta data assoc array, such as 1265 | array('width'=>1024, 'height'=>768) 1266 | group_name: specify the group name to store the file 1267 | tracker_server: the tracker server assoc array including elements: 1268 | ip_addr, port and sock 1269 | storage_server: the storage server assoc array including elements: 1270 | ip_addr, port and sock 1271 | return file_id for success, false for error 1272 | 1273 | 1274 | array FastDFS::storage_upload_appender_by_filename(string local_filename 1275 | [, string file_ext_name, array meta_list, string group_name, 1276 | array tracker_server, array storage_server]) 1277 | upload local file to storage server as appender file 1278 | parameters: 1279 | local_filename: the local filename 1280 | file_ext_name: the file extension name, do not include dot(.) 1281 | meta_list: meta data assoc array, such as 1282 | array('width'=>1024, 'height'=>768) 1283 | group_name: specify the group name to store the file 1284 | tracker_server: the tracker server assoc array including elements: 1285 | ip_addr, port and sock 1286 | storage_server: the storage server assoc array including elements: 1287 | ip_addr, port and sock 1288 | return assoc array for success, false for error. 1289 | the returned array includes elements: group_name and filename 1290 | 1291 | 1292 | string FastDFS::storage_upload_appender_by_filename1(string local_filename 1293 | [, string file_ext_name, array meta_list, string group_name, 1294 | array tracker_server, array storage_server]) 1295 | upload local file to storage server as appender file 1296 | parameters: 1297 | local_filename: the local filename 1298 | file_ext_name: the file extension name, do not include dot(.) 1299 | meta_list: meta data assoc array, such as 1300 | array('width'=>1024, 'height'=>768) 1301 | group_name: specify the group name to store the file 1302 | tracker_server: the tracker server assoc array including elements: 1303 | ip_addr, port and sock 1304 | storage_server: the storage server assoc array including elements: 1305 | ip_addr, port and sock 1306 | return file_id for success, false for error. 1307 | 1308 | 1309 | array FastDFS::storage_upload_appender_by_filebuff(string file_buff 1310 | [, string file_ext_name, array meta_list, string group_name, 1311 | array tracker_server, array storage_server]) 1312 | upload file buff to storage server as appender file 1313 | parameters: 1314 | file_buff: the file content 1315 | file_ext_name: the file extension name, do not include dot(.) 1316 | meta_list: meta data assoc array, such as 1317 | array('width'=>1024, 'height'=>768) 1318 | group_name: specify the group name to store the file 1319 | tracker_server: the tracker server assoc array including elements: 1320 | ip_addr, port and sock 1321 | storage_server: the storage server assoc array including elements: 1322 | ip_addr, port and sock 1323 | return assoc array for success, false for error. 1324 | the returned array includes elements: group_name and filename 1325 | 1326 | 1327 | string FastDFS::storage_upload_appender_by_filebuff1(string file_buff 1328 | [, string file_ext_name, array meta_list, string group_name, 1329 | array tracker_server, array storage_server]) 1330 | upload file buff to storage server as appender file 1331 | parameters: 1332 | file_buff: the file content 1333 | file_ext_name: the file extension name, do not include dot(.) 1334 | meta_list: meta data assoc array, such as 1335 | array('width'=>1024, 'height'=>768) 1336 | group_name: specify the group name to store the file 1337 | tracker_server: the tracker server assoc array including elements: 1338 | ip_addr, port and sock 1339 | storage_server: the storage server assoc array including elements: 1340 | ip_addr, port and sock 1341 | return file_id for success, false for error 1342 | 1343 | 1344 | array FastDFS::storage_upload_appender_by_callback(array callback_array 1345 | [, string file_ext_name, array meta_list, string group_name, 1346 | array tracker_server, array storage_server]) 1347 | upload file to storage server by callback as appender file 1348 | parameters: 1349 | callback_array: the callback assoc array, must have keys: 1350 | callback - the php callback function name 1351 | callback function prototype as: 1352 | function upload_file_callback($sock, $args) 1353 | file_size - the file size 1354 | args - use argument for callback function 1355 | file_ext_name: the file extension name, do not include dot(.) 1356 | meta_list: meta data assoc array, such as 1357 | array('width'=>1024, 'height'=>768) 1358 | group_name: specify the group name to store the file 1359 | tracker_server: the tracker server assoc array including elements: 1360 | ip_addr, port and sock 1361 | storage_server: the storage server assoc array including elements: 1362 | ip_addr, port and sock 1363 | return assoc array for success, false for error. 1364 | the returned array includes elements: group_name and filename 1365 | 1366 | 1367 | string FastDFS::storage_upload_appender_by_callback1(array callback_array 1368 | [, string file_ext_name, array meta_list, string group_name, 1369 | array tracker_server, array storage_server]) 1370 | upload file to storage server by callback as appender file 1371 | parameters: 1372 | callback_array: the callback assoc array, must have keys: 1373 | callback - the php callback function name 1374 | callback function prototype as: 1375 | function upload_file_callback($sock, $args) 1376 | file_size - the file size 1377 | args - use argument for callback function 1378 | file_ext_name: the file extension name, do not include dot(.) 1379 | meta_list: meta data assoc array, such as 1380 | array('width'=>1024, 'height'=>768) 1381 | group_name: specify the group name to store the file 1382 | tracker_server: the tracker server assoc array including elements: 1383 | ip_addr, port and sock 1384 | storage_server: the storage server assoc array including elements: 1385 | ip_addr, port and sock 1386 | return file_id for success, false for error 1387 | 1388 | 1389 | boolean FastDFS::storage_append_by_filename(string local_filename, 1390 | string group_name, appender_filename 1391 | [, array tracker_server, array storage_server]) 1392 | append local file to the appender file of storage server 1393 | parameters: 1394 | local_filename: the local filename 1395 | group_name: the the group name of appender file 1396 | appender_filename: the appender filename 1397 | tracker_server: the tracker server assoc array including elements: 1398 | ip_addr, port and sock 1399 | storage_server: the storage server assoc array including elements: 1400 | ip_addr, port and sock 1401 | return true for success, false for error 1402 | 1403 | 1404 | 1405 | string FastDFS::storage_upload_by_filename1(string local_filename, 1406 | [string appender_file_id, array tracker_server, array storage_server]) 1407 | append local file to the appender file of storage server 1408 | parameters: 1409 | local_filename: the local filename 1410 | appender_file_id: the appender file id 1411 | tracker_server: the tracker server assoc array including elements: 1412 | ip_addr, port and sock 1413 | storage_server: the storage server assoc array including elements: 1414 | ip_addr, port and sock 1415 | return true for success, false for error 1416 | 1417 | 1418 | 1419 | boolean FastDFS::storage_append_by_filebuff(string file_buff, 1420 | string group_name, string appender_filename 1421 | [, array tracker_server, array storage_server]) 1422 | append file buff to the appender file of storage server 1423 | parameters: 1424 | file_buff: the file content 1425 | group_name: the the group name of appender file 1426 | appender_filename: the appender filename 1427 | tracker_server: the tracker server assoc array including elements: 1428 | ip_addr, port and sock 1429 | storage_server: the storage server assoc array including elements: 1430 | ip_addr, port and sock 1431 | return true for success, false for error 1432 | 1433 | 1434 | 1435 | boolean FastDFS::storage_append_by_filebuff1(string file_buff, 1436 | string appender_file_id [, array tracker_server, array storage_server]) 1437 | append file buff to the appender file of storage server 1438 | parameters: 1439 | file_buff: the file content 1440 | appender_file_id: the appender file id 1441 | tracker_server: the tracker server assoc array including elements: 1442 | ip_addr, port and sock 1443 | storage_server: the storage server assoc array including elements: 1444 | ip_addr, port and sock 1445 | return true for success, false for error 1446 | 1447 | 1448 | 1449 | boolean FastDFS::storage_append_by_callback(array callback_array, 1450 | string group_name, string appender_filename 1451 | [, array tracker_server, array storage_server]) 1452 | append file to the appender file of storage server by callback 1453 | parameters: 1454 | callback_array: the callback assoc array, must have keys: 1455 | callback - the php callback function name 1456 | callback function prototype as: 1457 | function upload_file_callback($sock, $args) 1458 | file_size - the file size 1459 | args - use argument for callback function 1460 | group_name: the the group name of appender file 1461 | appender_filename: the appender filename 1462 | tracker_server: the tracker server assoc array including elements: 1463 | ip_addr, port and sock 1464 | storage_server: the storage server assoc array including elements: 1465 | ip_addr, port and sock 1466 | return true for success, false for error 1467 | 1468 | 1469 | 1470 | boolean FastDFS::storage_append_by_callback1(array callback_array, 1471 | string appender_file_id [, array tracker_server, array storage_server]) 1472 | append file buff to the appender file of storage server 1473 | parameters: 1474 | callback_array: the callback assoc array, must have keys: 1475 | callback - the php callback function name 1476 | callback function prototype as: 1477 | function upload_file_callback($sock, $args) 1478 | file_size - the file size 1479 | args - use argument for callback function 1480 | appender_file_id: the appender file id 1481 | tracker_server: the tracker server assoc array including elements: 1482 | ip_addr, port and sock 1483 | storage_server: the storage server assoc array including elements: 1484 | ip_addr, port and sock 1485 | return true for success, false for error 1486 | 1487 | 1488 | 1489 | boolean FastDFS::storage_modify_by_filename(string local_filename, 1490 | long file_offset, string group_name, appender_filename, 1491 | [array tracker_server, array storage_server]) 1492 | modify appender file by local file 1493 | parameters: 1494 | local_filename: the local filename 1495 | file_offset: offset of appender file 1496 | group_name: the the group name of appender file 1497 | appender_filename: the appender filename 1498 | tracker_server: the tracker server assoc array including elements: 1499 | ip_addr, port and sock 1500 | storage_server: the storage server assoc array including elements: 1501 | ip_addr, port and sock 1502 | return true for success, false for error 1503 | 1504 | 1505 | 1506 | boolean FastDFS::storage_modify_by_filename1(string local_filename, 1507 | long file_offset, string appender_file_id 1508 | [, array tracker_server, array storage_server]) 1509 | modify appender file by local file 1510 | parameters: 1511 | local_filename: the local filename 1512 | file_offset: offset of appender file 1513 | appender_file_id: the appender file id 1514 | tracker_server: the tracker server assoc array including elements: 1515 | ip_addr, port and sock 1516 | storage_server: the storage server assoc array including elements: 1517 | ip_addr, port and sock 1518 | return true for success, false for error 1519 | 1520 | 1521 | 1522 | boolean FastDFS::storage_modify_by_filebuff(string file_buff, 1523 | long file_offset, string group_name, string appender_filename 1524 | [, array tracker_server, array storage_server]) 1525 | modify appender file by file buff 1526 | parameters: 1527 | file_buff: the file content 1528 | file_offset: offset of appender file 1529 | group_name: the the group name of appender file 1530 | appender_filename: the appender filename 1531 | tracker_server: the tracker server assoc array including elements: 1532 | ip_addr, port and sock 1533 | storage_server: the storage server assoc array including elements: 1534 | ip_addr, port and sock 1535 | return true for success, false for error 1536 | 1537 | 1538 | 1539 | boolean FastDFS::storage_modify_by_filebuff1(string file_buff, 1540 | long file_offset, string appender_file_id 1541 | [, array tracker_server, array storage_server]) 1542 | modify appender file by file buff 1543 | parameters: 1544 | file_buff: the file content 1545 | file_offset: offset of appender file 1546 | appender_file_id: the appender file id 1547 | tracker_server: the tracker server assoc array including elements: 1548 | ip_addr, port and sock 1549 | storage_server: the storage server assoc array including elements: 1550 | ip_addr, port and sock 1551 | return true for success, false for error 1552 | 1553 | 1554 | 1555 | boolean FastDFS::storage_modify_by_callback(array callback_array, 1556 | long file_offset, string group_name, string appender_filename 1557 | [, array tracker_server, array storage_server]) 1558 | modify appender file by callback 1559 | parameters: 1560 | callback_array: the callback assoc array, must have keys: 1561 | callback - the php callback function name 1562 | callback function prototype as: 1563 | function upload_file_callback($sock, $args) 1564 | file_size - the file size 1565 | args - use argument for callback function 1566 | file_offset: offset of appender file 1567 | group_name: the the group name of appender file 1568 | appender_filename: the appender filename 1569 | tracker_server: the tracker server assoc array including elements: 1570 | ip_addr, port and sock 1571 | storage_server: the storage server assoc array including elements: 1572 | ip_addr, port and sock 1573 | return true for success, false for error 1574 | 1575 | 1576 | 1577 | boolean FastDFS::storage_modify_by_callback1(array callback_array, 1578 | long file_offset, string group_name, string appender_filename 1579 | [, array tracker_server, array storage_server]) 1580 | modify appender file by callback 1581 | parameters: 1582 | callback_array: the callback assoc array, must have keys: 1583 | callback - the php callback function name 1584 | callback function prototype as: 1585 | function upload_file_callback($sock, $args) 1586 | file_size - the file size 1587 | args - use argument for callback function 1588 | file_offset: offset of appender file 1589 | appender_file_id: the appender file id 1590 | tracker_server: the tracker server assoc array including elements: 1591 | ip_addr, port and sock 1592 | storage_server: the storage server assoc array including elements: 1593 | ip_addr, port and sock 1594 | return true for success, false for error 1595 | 1596 | 1597 | 1598 | boolean FastDFS::storage_truncate_file(string group_name, 1599 | string appender_filename [, long truncated_file_size = 0, 1600 | array tracker_server, array storage_server]) 1601 | truncate appender file to specify size 1602 | parameters: 1603 | group_name: the the group name of appender file 1604 | appender_filename: the appender filename 1605 | truncated_file_size: truncate the file size to 1606 | tracker_server: the tracker server assoc array including elements: 1607 | ip_addr, port and sock 1608 | storage_server: the storage server assoc array including elements: 1609 | ip_addr, port and sock 1610 | return true for success, false for error 1611 | 1612 | 1613 | 1614 | boolean FastDFS::storage_truncate_file1(string appender_file_id 1615 | [, long truncated_file_size = 0, array tracker_server, 1616 | array storage_server]) 1617 | truncate appender file to specify size 1618 | parameters: 1619 | appender_file_id: the appender file id 1620 | truncated_file_size: truncate the file size to 1621 | tracker_server: the tracker server assoc array including elements: 1622 | ip_addr, port and sock 1623 | storage_server: the storage server assoc array including elements: 1624 | ip_addr, port and sock 1625 | return true for success, false for error 1626 | 1627 | 1628 | 1629 | array FastDFS::storage_upload_slave_by_filename(string local_filename, 1630 | string group_name, string master_filename, string prefix_name 1631 | [, string file_ext_name, array meta_list, 1632 | array tracker_server, array storage_server]) 1633 | upload local file to storage server (slave file mode) 1634 | parameters: 1635 | file_buff: the file content 1636 | group_name: the group name of the master file 1637 | master_filename: the master filename to generate the slave file id 1638 | prefix_name: the prefix name to generage the slave file id 1639 | file_ext_name: the file extension name, do not include dot(.) 1640 | meta_list: meta data assoc array, such as 1641 | array('width'=>1024, 'height'=>768) 1642 | tracker_server: the tracker server assoc array including elements: 1643 | ip_addr, port and sock 1644 | storage_server: the storage server assoc array including elements: 1645 | ip_addr, port and sock 1646 | return assoc array for success, false for error. 1647 | the returned array includes elements: group_name and filename 1648 | 1649 | 1650 | string FastDFS::storage_upload_slave_by_filename1(string local_filename, 1651 | string master_file_id, string prefix_name 1652 | [, string file_ext_name, array meta_list, 1653 | array tracker_server, array storage_server]) 1654 | upload local file to storage server (slave file mode) 1655 | parameters: 1656 | local_filename: the local filename 1657 | master_file_id: the master file id to generate the slave file id 1658 | prefix_name: the prefix name to generage the slave file id 1659 | file_ext_name: the file extension name, do not include dot(.) 1660 | meta_list: meta data assoc array, such as 1661 | array('width'=>1024, 'height'=>768) 1662 | tracker_server: the tracker server assoc array including elements: 1663 | ip_addr, port and sock 1664 | storage_server: the storage server assoc array including elements: 1665 | ip_addr, port and sock 1666 | return file_id for success, false for error. 1667 | 1668 | 1669 | array FastDFS::storage_upload_slave_by_filebuff(string file_buff, 1670 | string group_name, string master_filename, string prefix_name 1671 | [, file_ext_name, array meta_list, 1672 | array tracker_server, array storage_server]) 1673 | upload file buff to storage server (slave file mode) 1674 | parameters: 1675 | file_buff: the file content 1676 | group_name: the group name of the master file 1677 | master_filename: the master filename to generate the slave file id 1678 | prefix_name: the prefix name to generage the slave file id 1679 | file_ext_name: the file extension name, do not include dot(.) 1680 | meta_list: meta data assoc array, such as 1681 | array('width'=>1024, 'height'=>768) 1682 | tracker_server: the tracker server assoc array including elements: 1683 | ip_addr, port and sock 1684 | storage_server: the storage server assoc array including elements: 1685 | ip_addr, port and sock 1686 | return assoc array for success, false for error. 1687 | the returned array includes elements: group_name and filename 1688 | 1689 | 1690 | string FastDFS::storage_upload_slave_by_filebuff1(string file_buff, 1691 | string master_file_id, string prefix_name 1692 | [, string file_ext_name, array meta_list, 1693 | array tracker_server, array storage_server]) 1694 | upload file buff to storage server (slave file mode) 1695 | parameters: 1696 | file_buff: the file content 1697 | master_file_id: the master file id to generate the slave file id 1698 | prefix_name: the prefix name to generage the slave file id 1699 | file_ext_name: the file extension name, do not include dot(.) 1700 | meta_list: meta data assoc array, such as 1701 | array('width'=>1024, 'height'=>768) 1702 | tracker_server: the tracker server assoc array including elements: 1703 | ip_addr, port and sock 1704 | storage_server: the storage server assoc array including elements: 1705 | ip_addr, port and sock 1706 | return file_id for success, false for error 1707 | 1708 | 1709 | array FastDFS::storage_upload_slave_by_callback(array callback_array, 1710 | string group_name, string master_filename, string prefix_name 1711 | [, string file_ext_name, array meta_list, 1712 | array tracker_server, array storage_server]) 1713 | upload file to storage server by callback (slave file mode) 1714 | parameters: 1715 | callback_array: the callback assoc array, must have keys: 1716 | callback - the php callback function name 1717 | callback function prototype as: 1718 | function upload_file_callback($sock, $args) 1719 | file_size - the file size 1720 | args - use argument for callback function 1721 | group_name: the group name of the master file 1722 | master_filename: the master filename to generate the slave file id 1723 | prefix_name: the prefix name to generage the slave file id 1724 | file_ext_name: the file extension name, do not include dot(.) 1725 | meta_list: meta data assoc array, such as 1726 | array('width'=>1024, 'height'=>768) 1727 | tracker_server: the tracker server assoc array including elements: 1728 | ip_addr, port and sock 1729 | storage_server: the storage server assoc array including elements: 1730 | ip_addr, port and sock 1731 | return assoc array for success, false for error. 1732 | the returned array includes elements: group_name and filename 1733 | 1734 | 1735 | string FastDFS::storage_upload_slave_by_callback1(array callback_array, 1736 | string master_file_id, string prefix_name 1737 | [, string file_ext_name, array meta_list, 1738 | array tracker_server, array storage_server]) 1739 | upload file to storage server by callback (slave file mode) 1740 | parameters: 1741 | callback_array: the callback assoc array, must have keys: 1742 | callback - the php callback function name 1743 | callback function prototype as: 1744 | function upload_file_callback($sock, $args) 1745 | file_size - the file size 1746 | args - use argument for callback function 1747 | master_file_id: the master file id to generate the slave file id 1748 | prefix_name: the prefix name to generage the slave file id 1749 | file_ext_name: the file extension name, do not include dot(.) 1750 | meta_list: meta data assoc array, such as 1751 | array('width'=>1024, 'height'=>768) 1752 | tracker_server: the tracker server assoc array including elements: 1753 | ip_addr, port and sock 1754 | storage_server: the storage server assoc array including elements: 1755 | ip_addr, port and sock 1756 | return file_id for success, false for error 1757 | 1758 | 1759 | boolean FastDFS::storage_delete_file(string group_name, string remote_filename 1760 | [, array tracker_server, array storage_server]) 1761 | delete file from storage server 1762 | parameters: 1763 | group_name: the group name of the file 1764 | remote_filename: the filename on the storage server 1765 | tracker_server: the tracker server assoc array including elements: 1766 | ip_addr, port and sock 1767 | storage_server: the storage server assoc array including elements: 1768 | ip_addr, port and sock 1769 | return true for success, false for error 1770 | 1771 | 1772 | boolean FastDFS::storage_delete_file1(string file_id 1773 | [, array tracker_server, array storage_server]) 1774 | delete file from storage server 1775 | parameters: 1776 | file_id: the file id to be deleted 1777 | tracker_server: the tracker server assoc array including elements: 1778 | ip_addr, port and sock 1779 | storage_server: the storage server assoc array including elements: 1780 | ip_addr, port and sock 1781 | return true for success, false for error 1782 | 1783 | 1784 | string FastDFS::storage_download_file_to_buff(string group_name, 1785 | string remote_filename [, long file_offset, long download_bytes, 1786 | array tracker_server, array storage_server]) 1787 | get file content from storage server 1788 | parameters: 1789 | group_name: the group name of the file 1790 | remote_filename: the filename on the storage server 1791 | file_offset: file start offset, default value is 0 1792 | download_bytes: 0 (default value) means from the file offset to 1793 | the file end 1794 | tracker_server: the tracker server assoc array including elements: 1795 | ip_addr, port and sock 1796 | storage_server: the storage server assoc array including elements: 1797 | ip_addr, port and sock 1798 | return the file content for success, false for error 1799 | 1800 | 1801 | string FastDFS::storage_download_file_to_buff1(string file_id 1802 | [, long file_offset, long download_bytes, 1803 | array tracker_server, array storage_server]) 1804 | get file content from storage server 1805 | parameters: 1806 | file_id: the file id of the file 1807 | file_offset: file start offset, default value is 0 1808 | download_bytes: 0 (default value) means from the file offset to 1809 | the file end 1810 | tracker_server: the tracker server assoc array including elements: 1811 | ip_addr, port and sock 1812 | storage_server: the storage server assoc array including elements: 1813 | ip_addr, port and sock 1814 | return the file content for success, false for error 1815 | 1816 | 1817 | boolean FastDFS::storage_download_file_to_file(string group_name, 1818 | string remote_filename, string local_filename [, long file_offset, 1819 | long download_bytes, array tracker_server, array storage_server]) 1820 | download file from storage server to local file 1821 | parameters: 1822 | group_name: the group name of the file 1823 | remote_filename: the filename on the storage server 1824 | local_filename: the local filename to save the file content 1825 | file_offset: file start offset, default value is 0 1826 | download_bytes: 0 (default value) means from the file offset to 1827 | the file end 1828 | tracker_server: the tracker server assoc array including elements: 1829 | ip_addr, port and sock 1830 | storage_server: the storage server assoc array including elements: 1831 | ip_addr, port and sock 1832 | return true for success, false for error 1833 | 1834 | 1835 | boolean FastDFS::storage_download_file_to_file1(string file_id, 1836 | string local_filename [, long file_offset, long download_bytes, 1837 | array tracker_server, array storage_server]) 1838 | download file from storage server to local file 1839 | parameters: 1840 | file_id: the file id of the file 1841 | local_filename: the local filename to save the file content 1842 | file_offset: file start offset, default value is 0 1843 | download_bytes: 0 (default value) means from the file offset to 1844 | the file end 1845 | tracker_server: the tracker server assoc array including elements: 1846 | ip_addr, port and sock 1847 | storage_server: the storage server assoc array including elements: 1848 | ip_addr, port and sock 1849 | return true for success, false for error 1850 | 1851 | 1852 | boolean FastDFS::storage_download_file_to_callback(string group_name, 1853 | string remote_filename, array download_callback [, long file_offset, 1854 | long download_bytes, array tracker_server, array storage_server]) 1855 | parameters: 1856 | group_name: the group name of the file 1857 | remote_filename: the filename on the storage server 1858 | download_callback: the download callback array, elements as: 1859 | callback - the php callback function name 1860 | callback function prototype as: 1861 | function my_download_file_callback($args, $file_size, $data) 1862 | args - use argument for callback function 1863 | file_offset: file start offset, default value is 0 1864 | download_bytes: 0 (default value) means from the file offset to 1865 | the file end 1866 | tracker_server: the tracker server assoc array including elements: 1867 | ip_addr, port and sock 1868 | storage_server: the storage server assoc array including elements: 1869 | ip_addr, port and sock 1870 | return true for success, false for error 1871 | 1872 | 1873 | boolean FastDFS::storage_download_file_to_callback1(string file_id, 1874 | array download_callback [, long file_offset, long download_bytes, 1875 | array tracker_server, array storage_server]) 1876 | parameters: 1877 | file_id: the file id of the file 1878 | download_callback: the download callback array, elements as: 1879 | callback - the php callback function name 1880 | callback function prototype as: 1881 | function my_download_file_callback($args, $file_size, $data) 1882 | args - use argument for callback function 1883 | file_offset: file start offset, default value is 0 1884 | download_bytes: 0 (default value) means from the file offset to 1885 | the file end 1886 | tracker_server: the tracker server assoc array including elements: 1887 | ip_addr, port and sock 1888 | storage_server: the storage server assoc array including elements: 1889 | ip_addr, port and sock 1890 | return true for success, false for error 1891 | 1892 | 1893 | boolean FastDFS::storage_set_metadata(string group_name, string remote_filename, 1894 | array meta_list [, string op_type, array tracker_server, 1895 | array storage_server]) 1896 | set meta data of the file 1897 | parameters: 1898 | group_name: the group name of the file 1899 | remote_filename: the filename on the storage server 1900 | meta_list: meta data assoc array to be set, such as 1901 | array('width'=>1024, 'height'=>768) 1902 | op_type: operate flag, can be one of following flags: 1903 | FDFS_STORAGE_SET_METADATA_FLAG_MERGE: combined with the old meta data 1904 | FDFS_STORAGE_SET_METADATA_FLAG_OVERWRITE: overwrite the old meta data 1905 | tracker_server: the tracker server assoc array including elements: 1906 | ip_addr, port and sock 1907 | storage_server: the storage server assoc array including elements: 1908 | ip_addr, port and sock 1909 | return true for success, false for error 1910 | 1911 | 1912 | boolean FastDFS::storage_set_metadata1(string file_id, array meta_list 1913 | [, string op_type, array tracker_server, array storage_server]) 1914 | set meta data of the file 1915 | parameters: 1916 | file_id: the file id of the file 1917 | meta_list: meta data assoc array to be set, such as 1918 | array('width'=>1024, 'height'=>768) 1919 | op_type: operate flag, can be one of following flags: 1920 | FDFS_STORAGE_SET_METADATA_FLAG_MERGE: combined with the old meta data 1921 | FDFS_STORAGE_SET_METADATA_FLAG_OVERWRITE: overwrite the old meta data 1922 | tracker_server: the tracker server assoc array including elements: 1923 | ip_addr, port and sock 1924 | storage_server: the storage server assoc array including elements: 1925 | ip_addr, port and sock 1926 | return true for success, false for error 1927 | 1928 | 1929 | array FastDFS::storage_get_metadata(string group_name, string remote_filename 1930 | [, array tracker_server, array storage_server]) 1931 | get meta data of the file 1932 | parameters: 1933 | group_name: the group name of the file 1934 | remote_filename: the filename on the storage server 1935 | tracker_server: the tracker server assoc array including elements: 1936 | ip_addr, port and sock 1937 | storage_server: the storage server assoc array including elements: 1938 | ip_addr, port and sock 1939 | return assoc array for success, false for error 1940 | returned array like: array('width' => 1024, 'height' => 768) 1941 | 1942 | 1943 | array FastDFS::storage_get_metadata1(string file_id 1944 | [, array tracker_server, array storage_server]) 1945 | get meta data of the file 1946 | parameters: 1947 | file_id: the file id of the file 1948 | tracker_server: the tracker server assoc array including elements: 1949 | ip_addr, port and sock 1950 | storage_server: the storage server assoc array including elements: 1951 | ip_addr, port and sock 1952 | return assoc array for success, false for error 1953 | returned array like: array('width' => 1024, 'height' => 768) 1954 | 1955 | 1956 | array FastDFS::connect_server(string ip_addr, int port) 1957 | connect to the server 1958 | parameters: 1959 | ip_addr: the ip address of the server 1960 | port: the port of the server 1961 | return assoc array for success, false for error 1962 | 1963 | 1964 | boolean FastDFS::disconnect_server(array server_info) 1965 | disconnect from the server 1966 | parameters: 1967 | server_info: the assoc array including elements: 1968 | ip_addr, port and sock 1969 | return true for success, false for error 1970 | 1971 | 1972 | array FastDFS::tracker_get_connection() 1973 | get a connected tracker server 1974 | return assoc array for success, false for error 1975 | the assoc array including elements: ip_addr, port and sock 1976 | 1977 | 1978 | boolean FastDFS::active_test(array server_info) 1979 | send ACTIVE_TEST cmd to the server 1980 | parameters: 1981 | server_info: the assoc array including elements: 1982 | ip_addr, port and sock, sock must be connected 1983 | return true for success, false for error 1984 | 1985 | 1986 | boolean FastDFS::tracker_make_all_connections() 1987 | connect to all tracker servers 1988 | return true for success, false for error 1989 | 1990 | 1991 | boolean FastDFS::tracker_close_all_connections() 1992 | close all connections to the tracker servers 1993 | return true for success, false for error 1994 | 1995 | 1996 | array FastDFS::tracker_list_groups([string group_name, array tracker_server]) 1997 | get group stat info 1998 | parameters: 1999 | group_name: specify the group name, null or empty string means all groups 2000 | tracker_server: the tracker server assoc array including elements: 2001 | ip_addr, port and sock 2002 | return index array for success, false for error, each group as a array element 2003 | 2004 | 2005 | array FastDFS::tracker_query_storage_store([string group_name, 2006 | array tracker_server]) 2007 | get the storage server info to upload file 2008 | parameters: 2009 | group_name: specify the group name 2010 | tracker_server: the tracker server assoc array including elements: 2011 | ip_addr, port and sock 2012 | return assoc array for success, false for error. the assoc array including 2013 | elements: ip_addr, port, sock and store_path_index 2014 | 2015 | 2016 | array FastDFS::tracker_query_storage_store_list([string group_name, 2017 | array tracker_server]) 2018 | get the storage server list to upload file 2019 | parameters: 2020 | group_name: specify the group name 2021 | tracker_server: the tracker server assoc array including elements: 2022 | ip_addr, port and sock 2023 | return indexed storage server array for success, false for error. 2024 | each element is an ssoc array including elements: 2025 | ip_addr, port, sock and store_path_index 2026 | 2027 | 2028 | array FastDFS::tracker_query_storage_update(string group_name, 2029 | string remote_filename [, array tracker_server]) 2030 | get the storage server info to set metadata 2031 | parameters: 2032 | group_name: the group name of the file 2033 | remote_filename: the filename on the storage server 2034 | tracker_server: the tracker server assoc array including elements: 2035 | ip_addr, port and sock 2036 | return assoc array for success, false for error 2037 | the assoc array including elements: ip_addr, port and sock 2038 | 2039 | 2040 | array FastDFS::tracker_query_storage_update1(string file_id, 2041 | [, array tracker_server]) 2042 | get the storage server info to set metadata 2043 | parameters: 2044 | file_id: the file id of the file 2045 | tracker_server: the tracker server assoc array including elements: 2046 | ip_addr, port and sock 2047 | return assoc array for success, false for error 2048 | the assoc array including elements: ip_addr, port and sock 2049 | 2050 | 2051 | array FastDFS::tracker_query_storage_fetch(string group_name, 2052 | string remote_filename [, array tracker_server]) 2053 | get the storage server info to download file (or get metadata) 2054 | parameters: 2055 | group_name: the group name of the file 2056 | remote_filename: the filename on the storage server 2057 | tracker_server: the tracker server assoc array including elements: 2058 | ip_addr, port and sock 2059 | return assoc array for success, false for error 2060 | the assoc array including elements: ip_addr, port and sock 2061 | 2062 | array FastDFS::tracker_query_storage_fetch1(string file_id 2063 | [, array tracker_server]) 2064 | get the storage server info to download file (or get metadata) 2065 | parameters: 2066 | file_id: the file id of the file 2067 | remote_filename: the filename on the storage server 2068 | tracker_server: the tracker server assoc array including elements: 2069 | ip_addr, port and sock 2070 | return assoc array for success, false for error 2071 | the assoc array including elements: ip_addr, port and sock 2072 | 2073 | 2074 | array FastDFS::tracker_query_storage_list(string group_name, 2075 | string remote_filename [, array tracker_server]) 2076 | get the storage server list which can retrieve the file content or metadata 2077 | parameters: 2078 | group_name: the group name of the file 2079 | remote_filename: the filename on the storage server 2080 | tracker_server: the tracker server assoc array including elements: 2081 | ip_addr, port and sock 2082 | return index array for success, false for error. 2083 | each server as an array element 2084 | 2085 | 2086 | array FastDFS::tracker_query_storage_list1(string file_id 2087 | [, array tracker_server]) 2088 | get the storage server list which can retrieve the file content or metadata 2089 | parameters: 2090 | file_id: the file id of the file 2091 | remote_filename: the filename on the storage server 2092 | tracker_server: the tracker server assoc array including elements: 2093 | ip_addr, port and sock 2094 | return index array for success, false for error. 2095 | each server as an array element 2096 | 2097 | 2098 | boolean FastDFS::tracker_delete_storage(string group_name, string storage_ip) 2099 | delete the storage server from the cluster 2100 | parameters: 2101 | group_name: the group name of the storage server 2102 | storage_ip: the ip address of the storage server to be deleted 2103 | return true for success, false for error 2104 | 2105 | void FastDFS::close() 2106 | close tracker connections 2107 | 2108 | -------------------------------------------------------------------------------- /php_client/config.m4: -------------------------------------------------------------------------------- 1 | dnl config.m4 for extension fastdfs_client 2 | 3 | PHP_ARG_WITH(fastdfs_client, for fastdfs_client support FastDFS client, 4 | [ --with-fastdfs_client Include fastdfs_client support FastDFS client]) 5 | 6 | if test "$PHP_FASTDFS_CLIENT" != "no"; then 7 | PHP_SUBST(FASTDFS_CLIENT_SHARED_LIBADD) 8 | 9 | if test -z "$ROOT"; then 10 | ROOT=/usr 11 | fi 12 | 13 | PHP_ADD_INCLUDE($ROOT/include/fastcommon) 14 | PHP_ADD_INCLUDE($ROOT/include/fastdfs) 15 | 16 | PHP_ADD_LIBRARY_WITH_PATH(fastcommon, $ROOT/lib, FASTDFS_CLIENT_SHARED_LIBADD) 17 | PHP_ADD_LIBRARY_WITH_PATH(fdfsclient, $ROOT/lib, FASTDFS_CLIENT_SHARED_LIBADD) 18 | 19 | PHP_NEW_EXTENSION(fastdfs_client, fastdfs_client.c, $ext_shared) 20 | 21 | CFLAGS="$CFLAGS -Wall" 22 | fi 23 | -------------------------------------------------------------------------------- /php_client/fastdfs_appender_test.php: -------------------------------------------------------------------------------- 1 | storage_upload_appender_by_filename("/usr/include/stdio.h"); 48 | if (!$file_info) 49 | { 50 | echo "$fdfs->storage_upload_appender_by_filename fail, errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 51 | exit; 52 | } 53 | 54 | $group_name = $file_info['group_name']; 55 | $remote_filename = $file_info['filename']; 56 | 57 | var_dump($file_info); 58 | $file_id = "$group_name/$remote_filename"; 59 | var_dump($fdfs->get_file_info($group_name, $remote_filename)); 60 | 61 | $appender_filename = $remote_filename; 62 | echo "file id: $group_name/$appender_filename\n"; 63 | if (!$fdfs->storage_append_by_filename("/usr/include/stdlib.h", $group_name, $appender_filename)) 64 | { 65 | echo "$fdfs->storage_append_by_filename fail, errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 66 | exit; 67 | } 68 | 69 | var_dump($fdfs->get_file_info($group_name, $appender_filename)); 70 | 71 | if (!$fdfs->storage_modify_by_filename("/usr/include/stdlib.h", 0, $group_name, $appender_filename)) 72 | { 73 | echo "$fdfs->storage_modify_by_filename fail, errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 74 | exit; 75 | } 76 | 77 | var_dump($fdfs->get_file_info($group_name, $appender_filename)); 78 | 79 | if (!$fdfs->storage_truncate_file($group_name, $appender_filename)) 80 | { 81 | echo "$fdfs->storage_truncate_file fail, errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 82 | exit; 83 | } 84 | 85 | var_dump($fdfs->get_file_info($group_name, $appender_filename)); 86 | 87 | echo 'tracker_close_all_connections result: ' . $fdfs->tracker_close_all_connections() . "\n"; 88 | ?> 89 | -------------------------------------------------------------------------------- /php_client/fastdfs_appender_test1.php: -------------------------------------------------------------------------------- 1 | storage_upload_appender_by_filename1("/usr/include/stdio.h"); 42 | if (!$appender_file_id) 43 | { 44 | echo "\$fdfs->storage_upload_appender_by_filename1 fail, errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 45 | exit; 46 | } 47 | 48 | var_dump($appender_file_id); 49 | var_dump($fdfs->get_file_info1($appender_file_id)); 50 | 51 | if (!$fdfs->storage_append_by_filename1("/usr/include/stdlib.h", $appender_file_id)) 52 | { 53 | echo "\$fdfs->storage_append_by_filename1 fail, errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 54 | exit; 55 | } 56 | 57 | var_dump($fdfs->get_file_info1($appender_file_id)); 58 | 59 | if (!$fdfs->storage_modify_by_filename1("/usr/include/stdlib.h", 0, $appender_file_id)) 60 | { 61 | echo "\$fdfs->storage_modify_by_filename1 fail, errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 62 | exit; 63 | } 64 | 65 | var_dump($fdfs->get_file_info1($appender_file_id)); 66 | 67 | if (!$fdfs->storage_truncate_file1($appender_file_id)) 68 | { 69 | echo "\$fdfs->torage_truncate_file1 torage_modify_by_filename1 fail, errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 70 | exit; 71 | } 72 | 73 | var_dump($fdfs->get_file_info1($appender_file_id)); 74 | 75 | echo 'tracker_close_all_connections result: ' . $fdfs->tracker_close_all_connections() . "\n"; 76 | ?> 77 | -------------------------------------------------------------------------------- /php_client/fastdfs_callback_test.php: -------------------------------------------------------------------------------- 1 | FILE_BUFF); 7 | $upload_callback_array = array( 8 | 'callback' => 'my_upload_file_callback', 9 | 'file_size' => strlen(FILE_BUFF), 10 | 'args' => $upload_callback_arg); 11 | 12 | $download_callback_arg = array ( 13 | 'filename' => '/tmp/out.txt', 14 | 'write_bytes' => 0, 15 | 'fhandle' => NULL 16 | ); 17 | $download_callback_array = array( 18 | 'callback' => 'my_download_file_callback', 19 | 'args' => &$download_callback_arg); 20 | 21 | $file_info = fastdfs_storage_upload_by_callback($upload_callback_array); 22 | if ($file_info) 23 | { 24 | $group_name = $file_info['group_name']; 25 | $remote_filename = $file_info['filename']; 26 | 27 | var_dump($file_info); 28 | var_dump(fastdfs_get_file_info($group_name, $remote_filename)); 29 | 30 | fastdfs_storage_download_file_to_callback($group_name, $remote_filename, $download_callback_array); 31 | } 32 | else 33 | { 34 | echo "upload file fail, errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info() . "\n"; 35 | } 36 | 37 | $file_id = fastdfs_storage_upload_by_callback1($upload_callback_array, 'txt'); 38 | if ($file_id) 39 | { 40 | var_dump($file_id); 41 | $download_callback_arg['filename'] = '/tmp/out1.txt'; 42 | fastdfs_storage_download_file_to_callback1($file_id, $download_callback_array); 43 | } 44 | else 45 | { 46 | echo "upload file fail, errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info() . "\n"; 47 | } 48 | 49 | $fdfs = new FastDFS(); 50 | $file_info = $fdfs->storage_upload_by_callback($upload_callback_array, 'txt'); 51 | if ($file_info) 52 | { 53 | $group_name = $file_info['group_name']; 54 | $remote_filename = $file_info['filename']; 55 | 56 | var_dump($file_info); 57 | var_dump($fdfs->get_file_info($group_name, $remote_filename)); 58 | $download_callback_arg['filename'] = '/tmp/fdfs_out.txt'; 59 | $fdfs->storage_download_file_to_callback($group_name, $remote_filename, $download_callback_array); 60 | } 61 | else 62 | { 63 | echo "upload file fail, errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 64 | } 65 | 66 | $file_id = $fdfs->storage_upload_by_callback1($upload_callback_array, 'txt'); 67 | if ($file_id) 68 | { 69 | var_dump($file_id); 70 | $download_callback_arg['filename'] = '/tmp/fdfs_out1.txt'; 71 | $fdfs->storage_download_file_to_callback1($file_id, $download_callback_array); 72 | } 73 | else 74 | { 75 | echo "upload file fail, errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 76 | } 77 | 78 | function my_upload_file_callback($sock, $args) 79 | { 80 | //var_dump($args); 81 | 82 | $ret = fastdfs_send_data($sock, $args['buff']); 83 | return $ret; 84 | } 85 | 86 | function my_download_file_callback($args, $file_size, $data) 87 | { 88 | //var_dump($args); 89 | 90 | if ($args['fhandle'] == NULL) 91 | { 92 | $args['fhandle'] = fopen ($args['filename'], 'w'); 93 | if (!$args['fhandle']) 94 | { 95 | echo 'open file: ' . $args['filename'] . " fail!\n"; 96 | return false; 97 | } 98 | } 99 | 100 | $len = strlen($data); 101 | if (fwrite($args['fhandle'], $data, $len) === false) 102 | { 103 | echo 'write to file: ' . $args['filename'] . " fail!\n"; 104 | $result = false; 105 | } 106 | else 107 | { 108 | $args['write_bytes'] += $len; 109 | $result = true; 110 | } 111 | 112 | if ((!$result) || $args['write_bytes'] >= $file_size) 113 | { 114 | fclose($args['fhandle']); 115 | $args['fhandle'] = NULL; 116 | $args['write_bytes'] = 0; 117 | } 118 | 119 | return $result; 120 | } 121 | ?> 122 | -------------------------------------------------------------------------------- /php_client/fastdfs_client.h: -------------------------------------------------------------------------------- 1 | #ifndef FASTDFS_CLIENT_H 2 | #define FASTDFS_CLIENT_H 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | 8 | #ifdef PHP_WIN32 9 | #define PHP_FASTDFS_API __declspec(dllexport) 10 | #else 11 | #define PHP_FASTDFS_API 12 | #endif 13 | 14 | PHP_MINIT_FUNCTION(fastdfs_client); 15 | PHP_RINIT_FUNCTION(fastdfs_client); 16 | PHP_MSHUTDOWN_FUNCTION(fastdfs_client); 17 | PHP_RSHUTDOWN_FUNCTION(fastdfs_client); 18 | PHP_MINFO_FUNCTION(fastdfs_client); 19 | 20 | ZEND_FUNCTION(fastdfs_client_version); 21 | ZEND_FUNCTION(fastdfs_active_test); 22 | ZEND_FUNCTION(fastdfs_connect_server); 23 | ZEND_FUNCTION(fastdfs_disconnect_server); 24 | ZEND_FUNCTION(fastdfs_get_last_error_no); 25 | ZEND_FUNCTION(fastdfs_get_last_error_info); 26 | 27 | ZEND_FUNCTION(fastdfs_tracker_get_connection); 28 | ZEND_FUNCTION(fastdfs_tracker_make_all_connections); 29 | ZEND_FUNCTION(fastdfs_tracker_close_all_connections); 30 | ZEND_FUNCTION(fastdfs_tracker_list_groups); 31 | ZEND_FUNCTION(fastdfs_tracker_query_storage_store); 32 | ZEND_FUNCTION(fastdfs_tracker_query_storage_store_list); 33 | ZEND_FUNCTION(fastdfs_tracker_query_storage_update); 34 | ZEND_FUNCTION(fastdfs_tracker_query_storage_fetch); 35 | ZEND_FUNCTION(fastdfs_tracker_query_storage_list); 36 | ZEND_FUNCTION(fastdfs_tracker_query_storage_update1); 37 | ZEND_FUNCTION(fastdfs_tracker_query_storage_fetch1); 38 | ZEND_FUNCTION(fastdfs_tracker_query_storage_list1); 39 | ZEND_FUNCTION(fastdfs_tracker_delete_storage); 40 | ZEND_FUNCTION(fastdfs_storage_upload_by_filename); 41 | ZEND_FUNCTION(fastdfs_storage_upload_by_filename1); 42 | ZEND_FUNCTION(fastdfs_storage_upload_by_filebuff); 43 | ZEND_FUNCTION(fastdfs_storage_upload_by_filebuff1); 44 | ZEND_FUNCTION(fastdfs_storage_upload_by_callback); 45 | ZEND_FUNCTION(fastdfs_storage_upload_by_callback1); 46 | ZEND_FUNCTION(fastdfs_storage_upload_appender_by_filename); 47 | ZEND_FUNCTION(fastdfs_storage_upload_appender_by_filename1); 48 | ZEND_FUNCTION(fastdfs_storage_upload_appender_by_filebuff); 49 | ZEND_FUNCTION(fastdfs_storage_upload_appender_by_filebuff1); 50 | ZEND_FUNCTION(fastdfs_storage_upload_appender_by_callback); 51 | ZEND_FUNCTION(fastdfs_storage_upload_appender_by_callback1); 52 | ZEND_FUNCTION(fastdfs_storage_delete_file); 53 | ZEND_FUNCTION(fastdfs_storage_delete_file1); 54 | ZEND_FUNCTION(fastdfs_storage_download_file_to_buff); 55 | ZEND_FUNCTION(fastdfs_storage_download_file_to_buff1); 56 | ZEND_FUNCTION(fastdfs_storage_download_file_to_file); 57 | ZEND_FUNCTION(fastdfs_storage_download_file_to_file1); 58 | ZEND_FUNCTION(fastdfs_storage_download_file_to_callback); 59 | ZEND_FUNCTION(fastdfs_storage_download_file_to_callback1); 60 | ZEND_FUNCTION(fastdfs_storage_set_metadata); 61 | ZEND_FUNCTION(fastdfs_storage_set_metadata1); 62 | ZEND_FUNCTION(fastdfs_storage_get_metadata); 63 | ZEND_FUNCTION(fastdfs_storage_get_metadata1); 64 | ZEND_FUNCTION(fastdfs_http_gen_token); 65 | ZEND_FUNCTION(fastdfs_get_file_info); 66 | ZEND_FUNCTION(fastdfs_get_file_info1); 67 | ZEND_FUNCTION(fastdfs_storage_file_exist); 68 | ZEND_FUNCTION(fastdfs_storage_file_exist1); 69 | ZEND_FUNCTION(fastdfs_gen_slave_filename); 70 | ZEND_FUNCTION(fastdfs_send_data); 71 | ZEND_FUNCTION(fastdfs_storage_upload_slave_by_filename); 72 | ZEND_FUNCTION(fastdfs_storage_upload_slave_by_filename1); 73 | ZEND_FUNCTION(fastdfs_storage_upload_slave_by_filebuff); 74 | ZEND_FUNCTION(fastdfs_storage_upload_slave_by_filebuff1); 75 | ZEND_FUNCTION(fastdfs_storage_upload_slave_by_callback); 76 | ZEND_FUNCTION(fastdfs_storage_upload_slave_by_callback1); 77 | ZEND_FUNCTION(fastdfs_storage_append_by_filename); 78 | ZEND_FUNCTION(fastdfs_storage_append_by_filename1); 79 | ZEND_FUNCTION(fastdfs_storage_append_by_filebuff); 80 | ZEND_FUNCTION(fastdfs_storage_append_by_filebuff1); 81 | ZEND_FUNCTION(fastdfs_storage_append_by_callback); 82 | ZEND_FUNCTION(fastdfs_storage_append_by_callback1); 83 | ZEND_FUNCTION(fastdfs_storage_modify_by_filename); 84 | ZEND_FUNCTION(fastdfs_storage_modify_by_filename1); 85 | ZEND_FUNCTION(fastdfs_storage_modify_by_filebuff); 86 | ZEND_FUNCTION(fastdfs_storage_modify_by_filebuff1); 87 | ZEND_FUNCTION(fastdfs_storage_modify_by_callback); 88 | ZEND_FUNCTION(fastdfs_storage_modify_by_callback1); 89 | ZEND_FUNCTION(fastdfs_storage_truncate_file); 90 | ZEND_FUNCTION(fastdfs_storage_truncate_file1); 91 | 92 | PHP_FASTDFS_API zend_class_entry *php_fdfs_get_ce(void); 93 | PHP_FASTDFS_API zend_class_entry *php_fdfs_get_exception(void); 94 | PHP_FASTDFS_API zend_class_entry *php_fdfs_get_exception_base(int root TSRMLS_DC); 95 | 96 | #ifdef __cplusplus 97 | } 98 | #endif 99 | 100 | #endif /* FASTDFS_CLIENT_H */ 101 | -------------------------------------------------------------------------------- /php_client/fastdfs_client.ini: -------------------------------------------------------------------------------- 1 | extension = fastdfs_client.so 2 | 3 | ; the base path 4 | fastdfs_client.base_path = /tmp 5 | 6 | ; connect timeout in seconds 7 | ; default value is 30s 8 | fastdfs_client.connect_timeout = 2 9 | 10 | ; network timeout in seconds 11 | ; default value is 30s 12 | fastdfs_client.network_timeout = 60 13 | 14 | ; standard log level as syslog, case insensitive, value list: 15 | ;;; emerg for emergency 16 | ;;; alert 17 | ;;; crit for critical 18 | ;;; error 19 | ;;; warn for warning 20 | ;;; notice 21 | ;;; info 22 | ;;; debug 23 | fastdfs_client.log_level = info 24 | 25 | ; set the log filename, such as /usr/local/fastdfs/logs/fastdfs_client.log 26 | ; empty for output to stderr 27 | fastdfs_client.log_filename = 28 | 29 | ; secret key to generate anti-steal token 30 | ; this parameter must be set when http.anti_steal.check_token set to true 31 | ; the length of the secret key should not exceed 128 bytes 32 | fastdfs_client.http.anti_steal_secret_key = 33 | 34 | ; FastDFS cluster count, default value is 1 35 | fastdfs_client.tracker_group_count = 1 36 | 37 | ; config file of FastDFS cluster ;, based 0 38 | ; must include absolute path, such as fastdfs_client.tracker_group0 39 | ; the config file is same as conf/client.conf 40 | fastdfs_client.tracker_group0 = /etc/fdfs/client.conf 41 | 42 | ; if use connection pool 43 | ; default value is false 44 | ; since V4.05 45 | fastdfs_client.use_connection_pool = true 46 | 47 | ; connections whose the idle time exceeds this time will be closed 48 | ; unit: second 49 | ; default value is 3600 50 | ; since V4.05 51 | fastdfs_client.connection_pool_max_idle_time = 3600 52 | 53 | -------------------------------------------------------------------------------- /php_client/fastdfs_client.spec.in: -------------------------------------------------------------------------------- 1 | %define php_inidir %(php --ini | head -n 1 | awk -F ':' '{print $2;}' | sed 's/ //g') 2 | %define php_extdir %(php-config --extension-dir 2>/dev/null) 3 | Name: fastdfs_client 4 | Version: 5.0.8 5 | Release: 1%{?dist} 6 | Summary: The php extension of fastdfs client 7 | License: GPL 8 | Group: Arch/Tech 9 | URL: http://perso.orange.fr/sebastien.godard/ 10 | Source: http://perso.orange.fr/sebastien.godard/%{name}-%{version}.tar.gz 11 | 12 | BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) 13 | 14 | #Requires: /sbin/chkconfig 15 | #Requires: sh-utils textutils grep fileutils /etc/cron.d 16 | #BuildRequires: libfdfsclient-devel 17 | #Requires: %__cp %__mv %__chmod %__grep %__mkdir %__install %__id 18 | Requires: libfdfsclient 19 | 20 | %description 21 | This package provides the php extension for fastdfs client 22 | 23 | %prep 24 | %setup -q 25 | 26 | %build 27 | # FIXME: I need to fix the upstream Makefile to use LIBDIR et al. properly and 28 | # send the upstream maintainer a patch. 29 | # add DOCDIR to the configure part 30 | phpize 31 | %configure 32 | make 33 | 34 | %install 35 | rm -rf %{buildroot} 36 | 37 | mkdir -p %{buildroot}%{php_extdir} 38 | mkdir -p %{buildroot}%{php_inidir}/php.d 39 | cp -f .libs/fastdfs_client.so %{buildroot}%{php_extdir} 40 | cp -f fastdfs_client.ini %{buildroot}%{php_inidir}/php.d/fastdfs_client.ini.sample 41 | 42 | #make install IGNORE_MAN_GROUP=y DOC_DIR=%{_docdir}/%{name}-%{version} INIT_DIR=%{_initrddir} 43 | 44 | #install -m 0644 sysstat.crond %{buildroot}/%{_sysconfdir}/cron.d/sysstat 45 | 46 | #%find_lang %{name} 47 | 48 | %post 49 | 50 | %preun 51 | 52 | %postun 53 | 54 | %clean 55 | #rm -rf %{buildroot} 56 | 57 | %files 58 | %defattr(-,root,root,-) 59 | %{php_extdir}/* 60 | %{php_inidir}/php.d/* 61 | 62 | %changelog 63 | * Mon Jun 23 2014 Zaixue Liao 64 | - first RPM release (1.0) 65 | -------------------------------------------------------------------------------- /php_client/fastdfs_test.php: -------------------------------------------------------------------------------- 1 | 1024, 'height'=>800, 'font'=>'Aris', 'Homepage' => true, 'price' => 103.75, 'status' => FDFS_STORAGE_STATUS_ACTIVE), '', $tracker, $storage); 91 | if ($file_id) 92 | { 93 | $master_file_id = $file_id; 94 | $prefix_name = '.part2'; 95 | $slave_file_id = fastdfs_storage_upload_slave_by_filename1("/usr/include/stdio.h", 96 | $master_file_id, $prefix_name); 97 | if ($slave_file_id !== false) 98 | { 99 | var_dump($slave_file_id); 100 | 101 | $generated_file_id = fastdfs_gen_slave_filename($master_file_id, $prefix_name); 102 | if ($slave_file_id != $generated_file_id) 103 | { 104 | echo "${slave_file_id}\n != \n${generated_file_id}\n"; 105 | } 106 | 107 | echo "delete file $slave_file_id return: " . fastdfs_storage_delete_file1($slave_file_id) . "\n"; 108 | } 109 | else 110 | { 111 | echo "fastdfs_storage_upload_slave_by_filename1 fail, errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info() . "\n"; 112 | } 113 | 114 | echo "delete file $file_id return: " . fastdfs_storage_delete_file1($file_id) . "\n"; 115 | } 116 | 117 | $file_info = fastdfs_storage_upload_by_filebuff("this is a test.", "txt"); 118 | if ($file_info) 119 | { 120 | $group_name = $file_info['group_name']; 121 | $remote_filename = $file_info['filename']; 122 | 123 | var_dump($file_info); 124 | var_dump(fastdfs_get_file_info($group_name, $remote_filename)); 125 | echo "file exist: " . fastdfs_storage_file_exist($group_name, $remote_filename) . "\n"; 126 | 127 | $ts = time(); 128 | $token = fastdfs_http_gen_token($remote_filename, $ts); 129 | echo "token=$token\n"; 130 | 131 | $file_content = fastdfs_storage_download_file_to_buff($file_info['group_name'], $file_info['filename']); 132 | echo "file content: " . $file_content . "(" . strlen($file_content) . ")\n"; 133 | $local_filename = 't1.txt'; 134 | echo 'storage_download_file_to_file result: ' . 135 | fastdfs_storage_download_file_to_file($file_info['group_name'], $file_info['filename'], $local_filename) . "\n"; 136 | 137 | echo "fastdfs_storage_set_metadata result: " . fastdfs_storage_set_metadata( 138 | $file_info['group_name'], $file_info['filename'], 139 | array('color'=>'', 'size'=>32, 'font'=>'MS Serif'), FDFS_STORAGE_SET_METADATA_FLAG_OVERWRITE) . "\n"; 140 | 141 | $meta_list = fastdfs_storage_get_metadata($file_info['group_name'], $file_info['filename']); 142 | var_dump($meta_list); 143 | 144 | $master_filename = $remote_filename; 145 | $prefix_name = '.part1'; 146 | $file_ext_name = 'txt'; 147 | $slave_file_info = fastdfs_storage_upload_slave_by_filebuff('this is slave file.', 148 | $group_name, $master_filename, $prefix_name, $file_ext_name); 149 | if ($slave_file_info !== false) 150 | { 151 | var_dump($slave_file_info); 152 | 153 | $generated_filename = fastdfs_gen_slave_filename($master_filename, $prefix_name, $file_ext_name); 154 | if ($slave_file_info['filename'] != $generated_filename) 155 | { 156 | echo "${slave_file_info['filename']}\n != \n${generated_filename}\n"; 157 | } 158 | 159 | echo "delete slave file return: " . fastdfs_storage_delete_file($slave_file_info['group_name'], $slave_file_info['filename']) . "\n"; 160 | } 161 | else 162 | { 163 | echo "fastdfs_storage_upload_slave_by_filebuff fail, errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info() . "\n"; 164 | } 165 | 166 | echo "delete file return: " . fastdfs_storage_delete_file($file_info['group_name'], $file_info['filename']) . "\n"; 167 | } 168 | 169 | $file_id = fastdfs_storage_upload_by_filebuff1("this\000is\000a\000test.", "bin", 170 | array('width'=>1024, 'height'=>768, 'font'=>'Aris')); 171 | if ($file_id) 172 | { 173 | $file_content = fastdfs_storage_download_file_to_buff1($file_id); 174 | echo "file content: " . $file_content . "(" . strlen($file_content) . ")\n"; 175 | $local_filename = 't2.txt'; 176 | echo 'storage_download_file_to_file1 result: ' . 177 | fastdfs_storage_download_file_to_file1($file_id, $local_filename) . "\n"; 178 | echo "fastdfs_storage_set_metadata1 result: " . fastdfs_storage_set_metadata1( 179 | $file_id, array('color'=>'yellow', 'size'=>'1234567890', 'font'=>'MS Serif'), 180 | FDFS_STORAGE_SET_METADATA_FLAG_MERGE) . "\n"; 181 | $meta_list = fastdfs_storage_get_metadata1($file_id); 182 | var_dump($meta_list); 183 | 184 | $master_file_id = $file_id; 185 | $prefix_name = '.part2'; 186 | $file_ext_name = 'txt'; 187 | $slave_file_id = fastdfs_storage_upload_slave_by_filebuff1('this is slave file1.', 188 | $master_file_id, $prefix_name, $file_ext_name); 189 | if ($slave_file_id !== false) 190 | { 191 | var_dump($slave_file_id); 192 | 193 | $generated_file_id = fastdfs_gen_slave_filename($master_file_id, $prefix_name, $file_ext_name); 194 | if ($slave_file_id != $generated_file_id) 195 | { 196 | echo "${slave_file_id}\n != \n${generated_file_id}\n"; 197 | } 198 | 199 | echo "delete file $slave_file_id return: " . fastdfs_storage_delete_file1($slave_file_id) . "\n"; 200 | } 201 | else 202 | { 203 | echo "fastdfs_storage_upload_slave_by_filebuff1 fail, errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info() . "\n"; 204 | } 205 | 206 | echo "delete file $file_id return: " . fastdfs_storage_delete_file1($file_id) . "\n"; 207 | } 208 | 209 | var_dump(fastdfs_tracker_query_storage_update($group_name, $remote_filename)); 210 | var_dump(fastdfs_tracker_query_storage_fetch($group_name, $remote_filename)); 211 | var_dump(fastdfs_tracker_query_storage_list($group_name, $remote_filename)); 212 | var_dump(fastdfs_tracker_query_storage_update1($file_id)); 213 | var_dump(fastdfs_tracker_query_storage_fetch1($file_id, $tracker)); 214 | var_dump(fastdfs_tracker_query_storage_list1($file_id, $tracker)); 215 | 216 | echo "fastdfs_tracker_close_all_connections result: " . fastdfs_tracker_close_all_connections() . "\n"; 217 | 218 | $fdfs = new FastDFS(); 219 | echo 'tracker_make_all_connections result: ' . $fdfs->tracker_make_all_connections() . "\n"; 220 | $tracker = $fdfs->tracker_get_connection(); 221 | var_dump($tracker); 222 | 223 | $server = $fdfs->connect_server($tracker['ip_addr'], $tracker['port']); 224 | var_dump($server); 225 | var_dump($fdfs->disconnect_server($server)); 226 | 227 | var_dump($fdfs->tracker_query_storage_store_list()); 228 | 229 | //var_dump($fdfs->tracker_list_groups()); 230 | //var_dump($fdfs->tracker_query_storage_store()); 231 | //var_dump($fdfs->tracker_query_storage_update($group_name, $remote_filename)); 232 | //var_dump($fdfs->tracker_query_storage_fetch($group_name, $remote_filename)); 233 | //var_dump($fdfs->tracker_query_storage_list($group_name, $remote_filename)); 234 | 235 | var_dump($fdfs->tracker_query_storage_update1($file_id)); 236 | var_dump($fdfs->tracker_query_storage_fetch1($file_id)); 237 | var_dump($fdfs->tracker_query_storage_list1($file_id)); 238 | 239 | $file_info = $fdfs->storage_upload_by_filename("/usr/include/stdio.h"); 240 | if ($file_info) 241 | { 242 | $group_name = $file_info['group_name']; 243 | $remote_filename = $file_info['filename']; 244 | 245 | var_dump($file_info); 246 | var_dump($fdfs->get_file_info($group_name, $remote_filename)); 247 | echo "file exist: " . $fdfs->storage_file_exist($group_name, $remote_filename) . "\n"; 248 | 249 | $master_filename = $remote_filename; 250 | $prefix_name = '.part1'; 251 | $slave_file_info = $fdfs->storage_upload_slave_by_filename("/usr/include/stdio.h", 252 | $group_name, $master_filename, $prefix_name); 253 | if ($slave_file_info !== false) 254 | { 255 | var_dump($slave_file_info); 256 | 257 | $generated_filename = $fdfs->gen_slave_filename($master_filename, $prefix_name); 258 | if ($slave_file_info['filename'] != $generated_filename) 259 | { 260 | echo "${slave_file_info['filename']}\n != \n${generated_filename}\n"; 261 | } 262 | 263 | echo "delete slave file return: " . $fdfs->storage_delete_file($slave_file_info['group_name'], $slave_file_info['filename']) . "\n"; 264 | } 265 | else 266 | { 267 | echo "storage_upload_slave_by_filename fail, errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 268 | } 269 | 270 | echo "delete file return: " . $fdfs->storage_delete_file($file_info['group_name'], $file_info['filename']) . "\n"; 271 | } 272 | 273 | $file_ext_name = 'c'; 274 | $file_id = $fdfs->storage_upload_by_filename1("/usr/include/stdio.h", $file_ext_name, array('width'=>1024, 'height'=>800, 'font'=>'Aris')); 275 | if ($file_id) 276 | { 277 | $master_file_id = $file_id; 278 | $prefix_name = '.part2'; 279 | $slave_file_id = $fdfs->storage_upload_slave_by_filename1("/usr/include/stdio.h", 280 | $master_file_id, $prefix_name, $file_ext_name); 281 | if ($slave_file_id !== false) 282 | { 283 | var_dump($slave_file_id); 284 | 285 | $generated_file_id = $fdfs->gen_slave_filename($master_file_id, $prefix_name, $file_ext_name); 286 | if ($slave_file_id != $generated_file_id) 287 | { 288 | echo "${slave_file_id}\n != \n${generated_file_id}\n"; 289 | } 290 | 291 | echo "delete file $slave_file_id return: " . $fdfs->storage_delete_file1($slave_file_id) . "\n"; 292 | } 293 | else 294 | { 295 | echo "fastdfs_storage_upload_slave_by_filename1 fail, errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 296 | } 297 | 298 | echo "delete file $file_id return: " . $fdfs->storage_delete_file1($file_id) . "\n"; 299 | } 300 | 301 | $file_info = $fdfs->storage_upload_by_filebuff("", "txt"); 302 | if ($file_info) 303 | { 304 | var_dump($file_info); 305 | $file_content = $fdfs->storage_download_file_to_buff($file_info['group_name'], $file_info['filename']); 306 | echo "file content: " . $file_content . "(" . strlen($file_content) . ")\n"; 307 | $local_filename = 't3.txt'; 308 | echo 'storage_download_file_to_file result: ' . 309 | $fdfs->storage_download_file_to_file($file_info['group_name'], $file_info['filename'], $local_filename) . "\n"; 310 | 311 | echo "storage_set_metadata result: " . $fdfs->storage_set_metadata( 312 | $file_info['group_name'], $file_info['filename'], 313 | array('color'=>'yellow', 'size'=>32), FDFS_STORAGE_SET_METADATA_FLAG_OVERWRITE) . "\n"; 314 | 315 | $meta_list = $fdfs->storage_get_metadata($file_info['group_name'], $file_info['filename']); 316 | var_dump($meta_list); 317 | 318 | $master_filename = $file_info['filename']; 319 | $prefix_name = '.part1'; 320 | $file_ext_name = 'txt'; 321 | $slave_file_info = $fdfs->storage_upload_slave_by_filebuff('this is slave file 1 by class.', 322 | $file_info['group_name'], $master_filename, $prefix_name, $file_ext_name); 323 | if ($slave_file_info !== false) 324 | { 325 | var_dump($slave_file_info); 326 | 327 | $generated_filename = $fdfs->gen_slave_filename($master_filename, $prefix_name, $file_ext_name); 328 | if ($slave_file_info['filename'] != $generated_filename) 329 | { 330 | echo "${slave_file_info['filename']}\n != \n${generated_filename}\n"; 331 | } 332 | 333 | echo "delete slave file return: " . $fdfs->storage_delete_file($slave_file_info['group_name'], $slave_file_info['filename']) . "\n"; 334 | } 335 | else 336 | { 337 | echo "storage_upload_slave_by_filebuff fail, errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 338 | } 339 | 340 | echo "delete file return: " . $fdfs->storage_delete_file($file_info['group_name'], $file_info['filename']) . "\n"; 341 | } 342 | 343 | $file_id = $fdfs->storage_upload_by_filebuff1("this\000is\001a\002test.", "bin", 344 | array('color'=>'none', 'size'=>0, 'font'=>'Aris')); 345 | if ($file_id) 346 | { 347 | var_dump($fdfs->get_file_info1($file_id)); 348 | echo "file exist: " . $fdfs->storage_file_exist1($file_id) . "\n"; 349 | 350 | $ts = time(); 351 | $token = $fdfs->http_gen_token($file_id, $ts); 352 | echo "token=$token\n"; 353 | 354 | $file_content = $fdfs->storage_download_file_to_buff1($file_id); 355 | echo "file content: " . $file_content . "(" . strlen($file_content) . ")\n"; 356 | $local_filename = 't4.txt'; 357 | echo 'storage_download_file_to_file1 result: ' . $fdfs->storage_download_file_to_file1($file_id, $local_filename) . "\n"; 358 | echo "storage_set_metadata1 result: " . $fdfs->storage_set_metadata1( 359 | $file_id, array('color'=>'yellow', 'size'=>32), FDFS_STORAGE_SET_METADATA_FLAG_MERGE) . "\n"; 360 | 361 | $master_file_id = $file_id; 362 | $prefix_name = '.part2'; 363 | $file_ext_name = 'txt'; 364 | $slave_file_id = $fdfs->storage_upload_slave_by_filebuff1('this is slave file 2 by class.', 365 | $master_file_id, $prefix_name, $file_ext_name); 366 | if ($slave_file_id !== false) 367 | { 368 | var_dump($slave_file_id); 369 | 370 | $generated_file_id = $fdfs->gen_slave_filename($master_file_id, $prefix_name, $file_ext_name); 371 | if ($slave_file_id != $generated_file_id) 372 | { 373 | echo "${slave_file_id}\n != \n${generated_file_id}\n"; 374 | } 375 | 376 | echo "delete file $slave_file_id return: " . $fdfs->storage_delete_file1($slave_file_id) . "\n"; 377 | } 378 | else 379 | { 380 | echo "storage_upload_slave_by_filebuff1 fail, errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 381 | } 382 | 383 | $meta_list = $fdfs->storage_get_metadata1($file_id); 384 | if ($meta_list !== false) 385 | { 386 | var_dump($meta_list); 387 | } 388 | else 389 | { 390 | echo "errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 391 | } 392 | 393 | echo "delete file $file_id return: " . $fdfs->storage_delete_file1($file_id) . "\n"; 394 | } 395 | 396 | var_dump($fdfs->active_test($tracker)); 397 | echo 'tracker_close_all_connections result: ' . $fdfs->tracker_close_all_connections() . "\n"; 398 | ?> 399 | -------------------------------------------------------------------------------- /php_client/fastdfs_test1.php: -------------------------------------------------------------------------------- 1 | 1024, 'heigth'=>768, 'color'=>'red'); 6 | $file_info = fastdfs_storage_upload_slave_by_filebuff("/usr/include/stdio.h", 'group1', 'M00/01/14/wKgAxU5n9gUIAAAAAAAD8uiojuUAAAAEgP_8YAAAAQK66492', '_100x100', 'h', $meta_list); 7 | if ($file_info) 8 | { 9 | var_dump($file_info); 10 | $group_name = $file_info['group_name']; 11 | $remote_filename = $file_info['filename']; 12 | } 13 | else 14 | { 15 | $group_name = ''; 16 | $remote_filename = ''; 17 | } 18 | 19 | //$result = fastdfs_storage_set_metadata1($group_name, $remote_filename, 20 | // $meta_list, FDFS_STORAGE_SET_METADATA_FLAG_OVERWRITE); 21 | // echo "fastdfs_storage_set_metadata result: $result\n"; 22 | 23 | var_dump(fastdfs_storage_get_metadata($group_name, $remote_filename)); 24 | error_log("errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info()); 25 | */ 26 | 27 | /* 28 | $file_id = $group_name . FDFS_FILE_ID_SEPERATOR . 'M00/00/02/wKjRbExc_qIAAAAAAABtNw6hsnM56585.part2.c'; 29 | 30 | var_dump(fastdfs_get_file_info1($file_id)); 31 | exit(1); 32 | */ 33 | 34 | echo 'fastdfs_tracker_make_all_connections result: ' . fastdfs_tracker_make_all_connections() . "\n"; 35 | var_dump(fastdfs_tracker_list_groups()); 36 | 37 | $tracker = fastdfs_tracker_get_connection(); 38 | var_dump($tracker); 39 | 40 | if (!fastdfs_active_test($tracker)) 41 | { 42 | error_log("errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info()); 43 | exit(1); 44 | } 45 | 46 | $server = fastdfs_connect_server($tracker['ip_addr'], $tracker['port']); 47 | var_dump($server); 48 | var_dump(fastdfs_disconnect_server($server)); 49 | var_dump($server); 50 | 51 | var_dump(fastdfs_tracker_query_storage_store_list()); 52 | 53 | $storage = fastdfs_tracker_query_storage_store(); 54 | if (!$storage) 55 | { 56 | error_log("errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info()); 57 | exit(1); 58 | } 59 | 60 | $server = fastdfs_connect_server($storage['ip_addr'], $storage['port']); 61 | if (!$server) 62 | { 63 | error_log("errno1: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info()); 64 | exit(1); 65 | } 66 | if (!fastdfs_active_test($server)) 67 | { 68 | error_log("errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info()); 69 | exit(1); 70 | } 71 | 72 | //var_dump(fastdfs_tracker_list_groups($tracker)); 73 | $storage['sock'] = $server['sock']; 74 | $file_info = fastdfs_storage_upload_by_filename("/usr/include/stdio.h", null, array(), null, $tracker, $storage); 75 | if (!$file_info) 76 | { 77 | echo "fastdfs_storage_upload_by_filename fail, errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info() . "\n"; 78 | } 79 | else 80 | { 81 | $group_name = $file_info['group_name']; 82 | $remote_filename = $file_info['filename']; 83 | 84 | var_dump($file_info); 85 | $finfo = fastdfs_get_file_info($group_name, $remote_filename); 86 | if (!$finfo) 87 | { 88 | echo "fastdfs_get_file_info fail, errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info() . "\n"; 89 | } 90 | else 91 | { 92 | var_dump($finfo); 93 | } 94 | 95 | $master_filename = $remote_filename; 96 | $prefix_name = '.part1'; 97 | $slave_file_info = fastdfs_storage_upload_slave_by_filename("/usr/include/stdio.h", 98 | $group_name, $master_filename, $prefix_name); 99 | if ($slave_file_info !== false) 100 | { 101 | var_dump($slave_file_info); 102 | 103 | $generated_filename = fastdfs_gen_slave_filename($master_filename, $prefix_name); 104 | if ($slave_file_info['filename'] != $generated_filename) 105 | { 106 | echo "${slave_file_info['filename']}\n != \n${generated_filename}\n"; 107 | } 108 | 109 | echo "delete slave file return: " . fastdfs_storage_delete_file($slave_file_info['group_name'], $slave_file_info['filename']) . "\n"; 110 | } 111 | else 112 | { 113 | echo "fastdfs_storage_upload_slave_by_filename fail, errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info() . "\n"; 114 | } 115 | 116 | echo "delete file return: " . fastdfs_storage_delete_file($file_info['group_name'], $file_info['filename']) . "\n"; 117 | } 118 | 119 | $file_id = fastdfs_storage_upload_by_filename1("/usr/include/stdio.h", null, array('width'=>1024, 'height'=>800, 'font'=>'Aris', 'Homepage' => true, 'price' => 103.75, 'status' => FDFS_STORAGE_STATUS_ACTIVE), '', $tracker, $storage); 120 | fastdfs_disconnect_server($storage); 121 | if (!$file_id) 122 | { 123 | echo "fastdfs_storage_upload_by_filename1 fail, errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info() . "\n"; 124 | } 125 | else 126 | { 127 | $master_file_id = $file_id; 128 | $prefix_name = '.part2'; 129 | $slave_file_id = fastdfs_storage_upload_slave_by_filename1("/usr/include/stdio.h", 130 | $master_file_id, $prefix_name); 131 | if ($slave_file_id !== false) 132 | { 133 | var_dump($slave_file_id); 134 | 135 | $generated_file_id = fastdfs_gen_slave_filename($master_file_id, $prefix_name); 136 | if ($slave_file_id != $generated_file_id) 137 | { 138 | echo "${slave_file_id}\n != \n${generated_file_id}\n"; 139 | } 140 | 141 | echo "delete file $slave_file_id return: " . fastdfs_storage_delete_file1($slave_file_id) . "\n"; 142 | } 143 | else 144 | { 145 | echo "fastdfs_storage_upload_slave_by_filename1 fail, errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info() . "\n"; 146 | } 147 | 148 | echo "delete file $file_id return: " . fastdfs_storage_delete_file1($file_id) . "\n"; 149 | } 150 | 151 | $file_info = fastdfs_storage_upload_by_filebuff("this is a test.", "txt"); 152 | if (!$file_info) 153 | { 154 | echo "fastdfs_storage_upload_by_filebuff fail, errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info() . "\n"; 155 | } 156 | else 157 | { 158 | var_dump($file_info); 159 | $group_name = $file_info['group_name']; 160 | $remote_filename = $file_info['filename']; 161 | 162 | var_dump(fastdfs_get_file_info($group_name, $remote_filename)); 163 | 164 | $ts = time(); 165 | $token = fastdfs_http_gen_token($remote_filename, $ts); 166 | echo "token=$token\n"; 167 | 168 | $file_content = fastdfs_storage_download_file_to_buff($file_info['group_name'], $file_info['filename']); 169 | echo "file content: " . $file_content . "(" . strlen($file_content) . ")\n"; 170 | $local_filename = 't1.txt'; 171 | echo 'storage_download_file_to_file result: ' . 172 | fastdfs_storage_download_file_to_file($file_info['group_name'], $file_info['filename'], $local_filename) . "\n"; 173 | 174 | echo "fastdfs_storage_set_metadata result: " . fastdfs_storage_set_metadata( 175 | $file_info['group_name'], $file_info['filename'], 176 | array('color'=>'', 'size'=>32, 'font'=>'MS Serif'), FDFS_STORAGE_SET_METADATA_FLAG_OVERWRITE) . "\n"; 177 | 178 | $meta_list = fastdfs_storage_get_metadata($file_info['group_name'], $file_info['filename']); 179 | var_dump($meta_list); 180 | 181 | $master_filename = $remote_filename; 182 | $prefix_name = '.part1'; 183 | $file_ext_name = 'txt'; 184 | $slave_file_info = fastdfs_storage_upload_slave_by_filebuff('this is slave file.', 185 | $group_name, $master_filename, $prefix_name, $file_ext_name); 186 | if ($slave_file_info !== false) 187 | { 188 | var_dump($slave_file_info); 189 | 190 | $generated_filename = fastdfs_gen_slave_filename($master_filename, $prefix_name, $file_ext_name); 191 | if ($slave_file_info['filename'] != $generated_filename) 192 | { 193 | echo "${slave_file_info['filename']}\n != \n${generated_filename}\n"; 194 | } 195 | 196 | echo "delete slave file return: " . fastdfs_storage_delete_file($slave_file_info['group_name'], $slave_file_info['filename']) . "\n"; 197 | } 198 | else 199 | { 200 | echo "fastdfs_storage_upload_slave_by_filebuff fail, errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info() . "\n"; 201 | } 202 | 203 | echo "delete file return: " . fastdfs_storage_delete_file($file_info['group_name'], $file_info['filename']) . "\n"; 204 | } 205 | 206 | $file_id = fastdfs_storage_upload_by_filebuff1("this\000is\000a\000test.", "bin", 207 | array('width'=>1024, 'height'=>768, 'font'=>'Aris')); 208 | if (!$file_id) 209 | { 210 | echo "fastdfs_storage_upload_by_filebuff1 fail, errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info() . "\n"; 211 | } 212 | else 213 | { 214 | $file_content = fastdfs_storage_download_file_to_buff1($file_id); 215 | echo "file content: " . $file_content . "(" . strlen($file_content) . ")\n"; 216 | $local_filename = 't2.txt'; 217 | echo 'storage_download_file_to_file1 result: ' . 218 | fastdfs_storage_download_file_to_file1($file_id, $local_filename) . "\n"; 219 | echo "fastdfs_storage_set_metadata1 result: " . fastdfs_storage_set_metadata1( 220 | $file_id, array('color'=>'yellow', 'size'=>'1234567890', 'font'=>'MS Serif'), 221 | FDFS_STORAGE_SET_METADATA_FLAG_MERGE) . "\n"; 222 | $meta_list = fastdfs_storage_get_metadata1($file_id); 223 | var_dump($meta_list); 224 | 225 | $master_file_id = $file_id; 226 | $prefix_name = '.part2'; 227 | $file_ext_name = 'txt'; 228 | $slave_file_id = fastdfs_storage_upload_slave_by_filebuff1('this is slave file1.', 229 | $master_file_id, $prefix_name, $file_ext_name); 230 | if ($slave_file_id !== false) 231 | { 232 | var_dump($slave_file_id); 233 | 234 | $generated_file_id = fastdfs_gen_slave_filename($master_file_id, $prefix_name, $file_ext_name); 235 | if ($slave_file_id != $generated_file_id) 236 | { 237 | echo "${slave_file_id}\n != \n${generated_file_id}\n"; 238 | } 239 | 240 | echo "delete file $slave_file_id return: " . fastdfs_storage_delete_file1($slave_file_id) . "\n"; 241 | } 242 | else 243 | { 244 | echo "fastdfs_storage_upload_slave_by_filebuff1 fail, errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info() . "\n"; 245 | } 246 | 247 | echo "delete file $file_id return: " . fastdfs_storage_delete_file1($file_id) . "\n"; 248 | } 249 | 250 | 251 | var_dump(fastdfs_tracker_query_storage_update($group_name, $remote_filename)); 252 | var_dump(fastdfs_tracker_query_storage_fetch($group_name, $remote_filename)); 253 | var_dump(fastdfs_tracker_query_storage_list($group_name, $remote_filename)); 254 | var_dump(fastdfs_tracker_query_storage_update1($file_id)); 255 | var_dump(fastdfs_tracker_query_storage_fetch1($file_id, $tracker)); 256 | var_dump(fastdfs_tracker_query_storage_list1($file_id, $tracker)); 257 | 258 | echo "fastdfs_tracker_close_all_connections result: " . fastdfs_tracker_close_all_connections() . "\n"; 259 | $fdfs = new FastDFS(); 260 | echo 'tracker_make_all_connections result: ' . $fdfs->tracker_make_all_connections() . "\n"; 261 | $tracker = $fdfs->tracker_get_connection(); 262 | var_dump($tracker); 263 | 264 | $server = $fdfs->connect_server($tracker['ip_addr'], $tracker['port']); 265 | var_dump($server); 266 | var_dump($fdfs->disconnect_server($server)); 267 | 268 | var_dump($fdfs->tracker_query_storage_store_list()); 269 | 270 | //var_dump($fdfs->tracker_list_groups()); 271 | //var_dump($fdfs->tracker_query_storage_store()); 272 | //var_dump($fdfs->tracker_query_storage_update($group_name, $remote_filename)); 273 | //var_dump($fdfs->tracker_query_storage_fetch($group_name, $remote_filename)); 274 | //var_dump($fdfs->tracker_query_storage_list($group_name, $remote_filename)); 275 | 276 | var_dump($fdfs->tracker_query_storage_update1($file_id)); 277 | var_dump($fdfs->tracker_query_storage_fetch1($file_id)); 278 | var_dump($fdfs->tracker_query_storage_list1($file_id)); 279 | 280 | $file_info = $fdfs->storage_upload_by_filename("/usr/include/stdio.h"); 281 | if (!$file_info) 282 | { 283 | echo "storage_upload_by_filename fail, errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info() . "\n"; 284 | } 285 | else 286 | { 287 | $group_name = $file_info['group_name']; 288 | $remote_filename = $file_info['filename']; 289 | 290 | var_dump($file_info); 291 | var_dump($fdfs->get_file_info($group_name, $remote_filename)); 292 | 293 | $master_filename = $remote_filename; 294 | $prefix_name = '.part1'; 295 | $slave_file_info = $fdfs->storage_upload_slave_by_filename("/usr/include/stdio.h", 296 | $group_name, $master_filename, $prefix_name); 297 | if ($slave_file_info !== false) 298 | { 299 | var_dump($slave_file_info); 300 | 301 | $generated_filename = $fdfs->gen_slave_filename($master_filename, $prefix_name); 302 | if ($slave_file_info['filename'] != $generated_filename) 303 | { 304 | echo "${slave_file_info['filename']}\n != \n${generated_filename}\n"; 305 | } 306 | 307 | echo "delete slave file return: " . $fdfs->storage_delete_file($slave_file_info['group_name'], $slave_file_info['filename']) . "\n"; 308 | } 309 | else 310 | { 311 | echo "storage_upload_slave_by_filename fail, errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 312 | } 313 | 314 | echo "delete file return: " . $fdfs->storage_delete_file($file_info['group_name'], $file_info['filename']) . "\n"; 315 | } 316 | 317 | $file_ext_name = 'c'; 318 | $file_id = $fdfs->storage_upload_by_filename1("/usr/include/stdio.h", $file_ext_name, array('width'=>1024, 'height'=>800, 'font'=>'Aris')); 319 | if (!$file_id) 320 | { 321 | echo "storage_upload_by_filename1 fail, errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info() . "\n"; 322 | } 323 | else 324 | { 325 | $master_file_id = $file_id; 326 | $prefix_name = '.part2'; 327 | $slave_file_id = $fdfs->storage_upload_slave_by_filename1("/usr/include/stdio.h", 328 | $master_file_id, $prefix_name, $file_ext_name); 329 | if ($slave_file_id !== false) 330 | { 331 | var_dump($slave_file_id); 332 | 333 | $generated_file_id = $fdfs->gen_slave_filename($master_file_id, $prefix_name, $file_ext_name); 334 | if ($slave_file_id != $generated_file_id) 335 | { 336 | echo "${slave_file_id}\n != \n${generated_file_id}\n"; 337 | } 338 | 339 | $result = $fdfs->storage_delete_file1($slave_file_id); 340 | echo "delete file $slave_file_id return: $result\n"; 341 | } 342 | else 343 | { 344 | echo "storage_upload_slave_by_filename1 fail, errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 345 | } 346 | 347 | echo "delete file $file_id return: " . $fdfs->storage_delete_file1($file_id) . "\n"; 348 | } 349 | 350 | $file_info = $fdfs->storage_upload_by_filebuff("", "txt"); 351 | if ($file_info) 352 | { 353 | var_dump($file_info); 354 | $file_content = $fdfs->storage_download_file_to_buff($file_info['group_name'], $file_info['filename']); 355 | echo "file content: " . $file_content . "(" . strlen($file_content) . ")\n"; 356 | $local_filename = 't3.txt'; 357 | echo 'storage_download_file_to_file result: ' . 358 | $fdfs->storage_download_file_to_file($file_info['group_name'], $file_info['filename'], $local_filename) . "\n"; 359 | 360 | echo "storage_set_metadata result: " . $fdfs->storage_set_metadata( 361 | $file_info['group_name'], $file_info['filename'], 362 | array('color'=>'yellow', 'size'=>32), FDFS_STORAGE_SET_METADATA_FLAG_OVERWRITE) . "\n"; 363 | 364 | $meta_list = $fdfs->storage_get_metadata($file_info['group_name'], $file_info['filename']); 365 | var_dump($meta_list); 366 | 367 | $master_filename = $file_info['filename']; 368 | $prefix_name = '.part1'; 369 | $file_ext_name = 'txt'; 370 | $slave_file_info = $fdfs->storage_upload_slave_by_filebuff('this is slave file 1 by class.', 371 | $file_info['group_name'], $master_filename, $prefix_name, $file_ext_name); 372 | if ($slave_file_info !== false) 373 | { 374 | var_dump($slave_file_info); 375 | 376 | $generated_filename = $fdfs->gen_slave_filename($master_filename, $prefix_name, $file_ext_name); 377 | if ($slave_file_info['filename'] != $generated_filename) 378 | { 379 | echo "${slave_file_info['filename']}\n != \n${generated_filename}\n"; 380 | } 381 | 382 | echo "delete slave file return: " . $fdfs->storage_delete_file($slave_file_info['group_name'], $slave_file_info['filename']) . "\n"; 383 | } 384 | else 385 | { 386 | echo "storage_upload_slave_by_filebuff fail, errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 387 | } 388 | 389 | echo "delete file return: " . $fdfs->storage_delete_file($file_info['group_name'], $file_info['filename']) . "\n"; 390 | } 391 | 392 | $file_id = $fdfs->storage_upload_by_filebuff1("this\000is\001a\002test.", "bin", 393 | array('color'=>'none', 'size'=>0, 'font'=>'Aris')); 394 | if ($file_id) 395 | { 396 | var_dump($fdfs->get_file_info1($file_id)); 397 | 398 | $ts = time(); 399 | $token = $fdfs->http_gen_token($file_id, $ts); 400 | echo "token=$token\n"; 401 | 402 | $file_content = $fdfs->storage_download_file_to_buff1($file_id); 403 | echo "file content: " . $file_content . "(" . strlen($file_content) . ")\n"; 404 | $local_filename = 't4.txt'; 405 | echo 'storage_download_file_to_file1 result: ' . $fdfs->storage_download_file_to_file1($file_id, $local_filename) . "\n"; 406 | echo "storage_set_metadata1 result: " . $fdfs->storage_set_metadata1( 407 | $file_id, array('color'=>'yellow', 'size'=>32), FDFS_STORAGE_SET_METADATA_FLAG_MERGE) . "\n"; 408 | 409 | $master_file_id = $file_id; 410 | $prefix_name = '.part2'; 411 | $file_ext_name = 'txt'; 412 | $slave_file_id = $fdfs->storage_upload_slave_by_filebuff1('this is slave file 2 by class.', 413 | $master_file_id, $prefix_name, $file_ext_name); 414 | if ($slave_file_id !== false) 415 | { 416 | var_dump($slave_file_id); 417 | 418 | $generated_file_id = $fdfs->gen_slave_filename($master_file_id, $prefix_name, $file_ext_name); 419 | if ($slave_file_id != $generated_file_id) 420 | { 421 | echo "${slave_file_id}\n != \n${generated_file_id}\n"; 422 | } 423 | 424 | echo "delete file $slave_file_id return: " . $fdfs->storage_delete_file1($slave_file_id) . "\n"; 425 | } 426 | else 427 | { 428 | echo "storage_upload_slave_by_filebuff1 fail, errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 429 | } 430 | 431 | $meta_list = $fdfs->storage_get_metadata1($file_id); 432 | if ($meta_list !== false) 433 | { 434 | var_dump($meta_list); 435 | } 436 | else 437 | { 438 | echo "errno: " . $fdfs->get_last_error_no() . ", error info: " . $fdfs->get_last_error_info() . "\n"; 439 | } 440 | 441 | echo "delete file $file_id return: " . $fdfs->storage_delete_file1($file_id) . "\n"; 442 | } 443 | 444 | var_dump($fdfs->active_test($tracker)); 445 | echo 'tracker_close_all_connections result: ' . $fdfs->tracker_close_all_connections() . "\n"; 446 | ?> 447 | -------------------------------------------------------------------------------- /php_client/fastdfs_test_slave.php: -------------------------------------------------------------------------------- 1 | 1)); 29 | if ($file_info) 30 | { 31 | $group_name = $file_info['group_name']; 32 | $remote_filename = $file_info['filename']; 33 | 34 | var_dump($file_info); 35 | var_dump(fastdfs_get_file_info($group_name, $remote_filename)); 36 | 37 | $master_filename = $remote_filename; 38 | $prefix_name = '.part1'; 39 | $meta_list = array('width' => 1024, 'height' => 768, 'color' => 'blue'); 40 | $slave_file_info = fastdfs_storage_upload_slave_by_filename("/usr/include/stdio.h", 41 | $group_name, $master_filename, $prefix_name, null, $meta_list); 42 | if ($slave_file_info !== false) 43 | { 44 | var_dump($slave_file_info); 45 | 46 | $generated_filename = fastdfs_gen_slave_filename($master_filename, $prefix_name); 47 | if ($slave_file_info['filename'] != $generated_filename) 48 | { 49 | echo "${slave_file_info['filename']}\n != \n${generated_filename}\n"; 50 | } 51 | 52 | //echo "delete slave file return: " . fastdfs_storage_delete_file($slave_file_info['group_name'], $slave_file_info['filename']) . "\n"; 53 | } 54 | else 55 | { 56 | echo "fastdfs_storage_upload_slave_by_filename fail, errno: " . fastdfs_get_last_error_no() . ", error info: " . fastdfs_get_last_error_info() . "\n"; 57 | } 58 | 59 | echo "delete file return: " . fastdfs_storage_delete_file($file_info['group_name'], $file_info['filename']) . "\n"; 60 | } 61 | 62 | ?> 63 | -------------------------------------------------------------------------------- /test/fastdfs.php: -------------------------------------------------------------------------------- 1 | getPostFilename()); 39 | 40 | $ret['file'] = $file; 41 | $ret['fileId'] = uploadToFastdfs($curlFile, $fileSuffix); 42 | return $ret; 43 | }/*}}}*/ 44 | 45 | //获取后缀 46 | function getSuffix($fileName) 47 | {/*{{{*/ 48 | preg_match('/\.(\w+)?$/', $fileName, $matchs); 49 | return isset($matchs[1])?$matchs[1]:''; 50 | }/*}}}*/ 51 | 52 | //上传文件到fastdfs 53 | function uploadToFastdfs(CurlFile $file, $fileSuffix) 54 | {/*{{{*/ 55 | $fdfs = new FastDFS(); 56 | $tracker = $fdfs->tracker_get_connection(); 57 | $fileId = $fdfs->storage_upload_by_filebuff1(file_get_contents($file->getFilename()), $fileSuffix); 58 | $fdfs->tracker_close_all_connections(); 59 | return $fileId; 60 | }/*}}}*/ 61 | 62 | ?> 63 | 64 | 65 | 66 | fastdfs 67 | 68 | 69 |
70 | 71 | 72 |
73 | 74 |
75 | 76 |
77 |
78 |
79 |
80 |
81 |
82 | 83 | -------------------------------------------------------------------------------- /test/test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | fdfs_test /etc/fdfs/client.conf upload /home/steven/01.jpg --------------------------------------------------------------------------------