Casual & Fellow

再次曲线救国-调用SAE临时文件

最近在实用腾讯微博开放平台的sdk(2.0版本)搞一些小玩意。使用到腾讯微博的更新头像Api user/update_head 更新用户头像。

在sdk当中,调用的方法其实是非常简单的。

只是需要:

$multi = array(‘pic’ => ‘images/test.jpg’);
$r1 = Tencent::api(‘user/update_head’, $params, ‘POST’, $multi);

这样我们就可以利用php,实现更新头像的动作了。不过如果我的图片很多,而且是动态生成的,那么这就使得图片并不是固定的,那么我们应该怎么处理呢?刚刚开始的时候我也走了很多的弯路。下面直接告诉大家路怎么走就好了。

首先我们来分析一下这句代码:

Tencent::api(‘user/update_head’, $params , ‘POST’ , $multi );

在api函数里面,有四个参数:1,调用的api的接口;2,调用api的参数,在腾讯微博开放平台发布出来的2.0版本sdk中,这里的参数已经封装好,无须用户再次去处理填写,在1.0的版本当中,用户需要自己获取上传文件的base64数据,并post才可以,而2.0中都已经封装好了;3,就是请求的方式啦,这个没有什么好说的;4,最后一个就是post文件的本地路径了(注意,这里就是指路径);

好了,问题来了,SAE上面,Memcache以及Storage服务缓存下来的文件都不是本地路径当中的,因为根据SAE的调用方法,Memcache以及Storage调用的东西都分别在saemc://或者saestor://作为路径前缀进行调用。而这样调用的话无法获取本地路径。

最后我使用了tmpfile()的函数,把动态的图片文件生成出来后先把数据缓存到一个本地文件。然后找到这个文件的本地路径再post出去。

通过echo SAE_TMP_PATH;输出SAE的缓存文件路径,发现是:

sys tmp file path

/saetmp/619/[yourdomain]/1340077764_3893208519

命名规则:/saetmp/日期/domain名字/time()_* (未知)

通过echo FILE; 找到这个php脚本SAE的文件路径。

最后POST的时候使用一堆的路径查找符号,找到缓存图片。

如:$multi = array(‘pic’ => ‘../../../../../..’.SAE_TMP_PATH.’/test.jpg’);

问题解决 :-)