fastDFS中使用php上传文件 -- http上传与下载图片

来源:互联网 发布:歌曲串烧制作软件 编辑:程序博客网 时间:2024/05/01 22:15

CleverCode研究完fastDFS后,尝试着使用php上传文件到fastdfs。

1 fastDFS安装

  fastdfs分布式架构配置参考:http://blog.csdn.net/clevercode/article/details/52267080。

  fastdfs使用nginx配置参考:http://blog.csdn.net/clevercode/article/details/52276169。

   fastdfs缩略图生成参考:http://blog.csdn.net/clevercode/article/details/52278482。


2 fastDFS中php扩展的安装

 2.1 安装

# cd /usr/local/src/fastdfs/FastDFS/php_client# /usr/local/php5/bin/phpize # ./configure --with-php-config=/usr/local/php5/bin/php-config  # make && make install  # cat fastdfs_client.ini >> /usr/local/php5/etc/php.ini

2.2 查看是否安装成功

# php -m | grep fastdfs_client



2.3 配置fastDFS的client.conf

# vi /etc/fdfs/client.conf

tracker_server=192.168.101.135:22122  
http.tracker_server_port=80 


2.4重启pkill php-fpm

# pkill php-fpm# /usr/local/php5/sbin/php-fpm


3 通过http上传

3.1 上传页面代码

test.php


<html><body><form action="upload.php" method="post" enctype="multipart/form-data">    <label for="file">Filename:</label>    <input type="file" name="upFile" id="upFile" />     <br />    <input type="submit" name="submit" value="Submit" /></form></body></html>

3.2 接收文件php

upload.php

<?php//上传附件function uploadAttach()                                                                            {/*{{{*/                                                                                                      $ret = array();    $ret['errorcode'] = 0;    $ret['errormsg'] = '';    if(!$_FILES || false == isset($_FILES["upFile"]))    {        $ret['errorcode'] = 1;        $ret['errormsg'] = "ERROR:upFile is not set";        return $ret;    }    $file = $_FILES["upFile"];    if (false == isset($file['tmp_name']) || false == is_file($file['tmp_name']))    {        $ret['errorcode'] = 2;        $ret['errormsg'] = "tmp_name is not file";        return $ret;    }    if (0 == filesize($file['tmp_name']))    {        $ret['errorcode'] = 3;        $ret['errormsg'] = "tmp_name filesize is 0";        return $ret;    }    $curlFile = new CurlFile($file['tmp_name'], $file['type'], $file['name']);      $fileSuffix = getSuffix($curlFile->getPostFilename());                                                      $ret['file'] = $file;    $ret['fileId'] = uploadToFastdfs($curlFile, $fileSuffix);                                                            return $ret;}/*}}}*/                                                                                                  //获取后缀 function getSuffix($fileName)  {/*{{{*/     preg_match('/\.(\w+)?$/', $fileName, $matchs);     return isset($matchs[1])?$matchs[1]:''; }/*}}}*///上传文件到fastdfsfunction uploadToFastdfs(CurlFile $file, $fileSuffix)                                                  {/*{{{*/                                                                                                      $fdfs = new FastDFS();     $tracker = $fdfs->tracker_get_connection();      $fileId = $fdfs->storage_upload_by_filebuff1(file_get_contents($file->getFilename()), $fileSuffix);      $fdfs->tracker_close_all_connections();        return $fileId;}/*}}}*/                                                                                                  function start(){    $ret = uploadAttach();      print_r($ret);}start();?>


3.3 上传一张图片



3.4 上传结果



3.5 访问(下载) http://192.168.101.132/group1/M00/00/00/wKhlhVfBiu2AWrzoAAKp3t_hiGI748.png



4 curl上传

  3 的http上传方式,需要在每一台php服务器上都按装fastdfs的php扩展。这里通过curl方式,直接上传到具有fastdfs扩展的php服务器上。

curlupload.php

<?phpfunction curl_multipart_post($url, $post_data = array(), $file_fields = array(), $timeout=30){/*{{{*/    $result = array('errno' => 0, 'errmsg' => '', 'result' => '');    $ch = curl_init();    //set various curl options first    // set url to post to    curl_setopt($ch, CURLOPT_URL, $url);    // return into a variable rather than displaying it    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    //set curl function timeout to $timeout    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);    curl_setopt($ch, CURLOPT_VERBOSE, false);    //set method to post    curl_setopt($ch, CURLOPT_POST, true);    // disable Expect header    // hack to make it working    $headers = array("Expect: ");    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);    // initialize result post array    $result_post = array();    //generate post string    $post_array = array();    $post_strings = array();    if (!is_array($post_data)) {        $result['errno'] = 5;        $result['errmsg'] = 'Params error.';        return json_encode($result);        // return false;    }    foreach($post_data as $key=>$value) {        $post_array[$key] = $value;        $post_strings[] = urlencode($key)."=".urlencode($value);    }    $post_string = implode("&", $post_strings);    // set post string    // curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);    // set multipart form data - file array field-value pairs    if (!empty($file_fields)) {        foreach($file_fields as $key => $value) {            if (strpos(PHP_OS, "WIN") !== false) {                $value = str_replace("/", "\\", $value); // win hack            }            $file_fields[$key] = "@".$value;        }    }    // set post data    $result_post = array_merge($post_array, $file_fields);    curl_setopt($ch, CURLOPT_POSTFIELDS, $result_post);    // print_r($result_post);    //and finally send curl request    $output = curl_exec($ch);    $result['result'] = $output;    // print_r($result);    if (curl_errno($ch )) {               $result['errno'] = curl_errno($ch);        $result['errmsg'] = curl_error($ch);        // return false;    } else {        // return $result;    }    curl_close($ch);    return $result;}/*}}}*/function start(){    $url = 'http://192.168.101.132/upload.php';    $post = array('signature' => 123456);    $fileFields = array('upFile' => '/data0/webRoot/upload.php');    $ret = curl_multipart_post($url,$post,$fileFields);    print_r($ret);}start();?>


打印结果



2 0
原创粉丝点击