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
- fastDFS中使用php上传文件 -- http上传与下载图片
- fastDFS中使用php上传文件 -- http上传与下载图片
- fastdfs文件上传和下载
- 学习FastDFS上传与下载
- 如何使用FastDFS上传图片
- php文件上传与下载
- PHP文件上传与下载
- PHP文件上传与下载
- 使用java操作FastDFS上传,下载,删除文件
- 使用python上传和下载文件到FastDFS
- 使用java操作FastDFS上传,下载,删除文件
- php图片上传之分布式存储FastDFS
- 使用图片服务器FastDFS实现图片上传
- php基础实例--图片上传与下载
- 文本,文件,图片的上传与下载
- 图片、文件等上传与下载
- PHP文件上传、下载
- PHP文件上传、下载
- servlet备忘[重定向]
- Spring JdbcTemplate方法详解
- Struts2+Ajax+Jquery的无刷新上传图片
- Spring MVC中使用 Swagger2 构建Restful API
- 初识 Google API
- fastDFS中使用php上传文件 -- http上传与下载图片
- equals方法重写
- KMP算法详解
- Leetcode 376. Wiggle Subsequence (Medium) (cpp)
- 安装完 Android Studio 后启动,却报错
- oc学习之继承
- AsyncHttpClient Best Practice
- 第10期 8月刊《百炼成钢》
- automaticallyAdjustsScrollViewInsets