最近我们项目需要一台图片服务器存储用户头像,我们使用 zimg 处理和存储图片,下面简单介绍一下如何使用 PHP 上传图片到 zimg,并获取相应图片的返回信息
使用 curl 库实现上传
根据 zimg 使用文档,我们想要让 zimg 返回 json 信息,就必须 raw_post 上传图片,下面是演示代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
$upload_url = 'http://192.168.0.99:5000/upload' ;
$image_file = './test.jpg' ;
// 获取图片后缀
$value = explode ( "." , $image_file );
$extension = strtolower ( array_pop ( $value ));
// 生成本地临时存储路径,并生成相应文件夹
$dir = 'aurthur' ;
$save_path = 'uploads/' . $dir . '/' . date ( 'Y' ). '/' . date ( 'md' ). '/' ;
$save_rule = md5(uniqid(mt_rand(), true));
if (! is_dir ( $save_path )){
if (false === mkdir ( $save_path , 0700, true)){
exit ( '创建文件夹失败' );
}
}
$save_image_file = $save_path . $save_rule . ".$extension" ;
// 把图片存储到临时路径
file_put_contents ( $save_image_file , file_get_contents ( $image_file ));
// 获取临时保存的图片的真实地址(绝对路径)
$realpath = realpath ( $save_image_file );
// 上传图片到 zimg 图片存储服务
$ch = curl_init();
// 将图片内容读取到变量 $post_data ;
$post_data = file_get_contents ( $realpath );
$headers = array ();
// 一定要添加此 header
$headers [] = 'Content-Type:' . $extension ;
curl_setopt( $ch , CURLOPT_URL, $upload_url );
curl_setopt( $ch , CURLOPT_HEADER, false);
curl_setopt( $ch , CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1);
curl_setopt( $ch , CURLOPT_POST, true);
curl_setopt( $ch , CURLOPT_BINARYTRANSFER, true);
curl_setopt( $ch , CURLOPT_POSTFIELDS, $post_data ); // raw_post方式
$info = curl_exec( $ch );
curl_close( $ch );
$json = json_decode( $info , true);
$signature = $json [ 'info' ][ 'md5' ];
echo $signature ;
|
如果想测试代码的话,请把上面的uploadurl改成你自己的zimg服务器地址,并把image_file 改成你需要上传的图片的路径。