提醒:本文最后更新于 4744 天前,文中所描述的信息可能已发生改变,请仔细核实。
这个主题是loper1.3流出版(非正统版本), 十分感谢主题作者ongakuer,另外表示歉意,没用正版。
这个主题里面附有各种功能,其中也不乏有首页缩略图功能,,原作者是通过timthumb.php与function.php来结合而成,但是缩略图需要cache777权限,而SAE是不允许这种操作的,但是可以通过SAE的Storage,这个用于SAE上传处理的,并且省去判定文件夹是否存在的麻烦,也就是timthumb功能基本不需要用到,而且timthumb,众所皆知,有很多漏洞可以下马,虽说新浪很多权限提升了安全,但是这种事情还是不要轻易尝试。最近有些私人博客都被黑成304重定向到一黄色网站(保证我没瞎看的说~)。所以删除了原版的timthumb.php文件,并且修改了function,去掉php判断文件存在和时间判定,因为与sae不兼容,判断一直返回false,郁闷个去。表示本地或者外部服务器完全正常,搞不懂。
为了以后的方便,创建了一个新的storage的domain,取名为cache,详情看下面代码就知。这个主题的默认缩略图大小是width = 120,height = 100,所以都这样写了。
比较重要的是SaeImage,他读取你的原图后,可以根据你的要求来resized,php移植函数因为sae的不可写,一直无法处理(或者说能力不够),利用sae函数非常方便的resized,这样使得我们的cache文件十分之小,一个图片低于12kb一般(我最高的没过12kb),提高了加载速度,节省流量。
里面有些重复语句,比如@file_put_contents, $s->write, $s->upload,只是为了提高成功率,可以任选一个。
改变了显示方式,指向http://kn007-cache.stor.sinaapp.com/,这个相信都清楚怎么改的吧。。。
其实完全没什么技术水平,只是觉得sae有img控制比较稀奇,居然没发现,郁闷个去,害我试了那么多php代码,写了不少,都不能用。。。
建议大家以后根据自己想移植的类型,看官方api修改,速度多了。
请在主题下的function.php修改,或者添加如下(水平有限,不要砸我)
源码还可以再精简,现在没什么时间,等有时间再修改下,反正各位大神都是知道怎么改的,或者根本看不上。
add_theme_support( 'post-thumbnails' );
function post_thumbnail( $width = 120,$height = 100 ){
global $post;
if( has_post_thumbnail() ){ //如果有缩略图,则显示缩略图
$timthumb_src = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID),'full');
$post_timthumb = '<img src="'.$timthumb_src[0].'"Width="120px" Height="100px" alt="'.$post->post_title.'" class="thumb" />';
echo $post_timthumb;
} else {
$post_timthumb = '';
ob_start();
ob_end_clean();
$output = preg_match('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $index_matches);
$first_img_src = $index_matches [1];
if( !empty($first_img_src) ){
$path_parts = pathinfo($first_img_src);
$first_img_name = $path_parts["basename"];
$first_img_pic = 'http://kn007-cache.stor.sinaapp.com/'.$first_img_name;
$first_img_file = $first_img_name;
$s = new SaeStorage();
if ( $s->fileExists("cache",$first_img_file)){
} else {
$f = new SaeFetchurl();
$img_data = $f->fetch( $first_img_src);
$img = new SaeImage();
$img->setData( $img_data );
$img->resize(120,100); // 等比缩放
$content = $img->exec(); // 执行处理并返回处理后的二进制数据
$s->delete("cache",first_img_file);
//$content = @file_get_contents($first_img_src);
@file_put_contents($first_img_pic,$content);
$attr = array('expires' => 'now plus 7 day');
$s->write('cache', $first_img_file, $content, -1, $attr);
$s->upload("cache", $first_img_file,$first_img_src);
//var_dump($s->errno(), $s->errmsg());
$post_timthumb = '<img src="'.$first_img_src.'" alt="'.$post->post_title.'" class="thumb" />';
}
$post_timthumb = '<img src="'.$first_img_pic.'"Width="120px" Height="100px" alt="'.$post->post_title.'" class="thumb" />';
} else {$post_timthumb = '<img src="'.get_bloginfo("template_url").'/images/default_thumb.jpg" alt="'.$post->post_title.'" class="thumb" />'; }
echo $post_timthumb;
}
}
转载请注明转自: kn007的个人博客 的《[SAE移植]搞了首页缩略图处理,几个重要部分记录下》

不能实现呀为什么?我用了但是不行
@杨玲: 不能实现,左侧的图片还是一样,不显示,不会到右侧,然后我不知道你说的“storage的domain有没有cache”怎么看?我不懂呀,求指教!
额,不能实现的情况是怎么样的?如果只是没在右边,请自己改下css,这个并没有改放那边。。建议去后台看看你的storage的domain有没有cache?没有的话,自己建一个,全部public
我想问一下,用了这个代码,要不要删除timthumb.php文件呢,我的主题用的就是这个文件,需不需要删除呀?
@明月登楼: 删不删无所谓,喜欢就留,不喜欢就丢
哈哈,我成功了,照您给出的代码,我已搞定了,非常的感谢,太感谢了!解决了困惑了我好久的一个问题,谢谢!!!
@明月登楼: 额,不谢,不谢
我用你的代码,只能缓存gif的缩略图,jpg和png都无法缓存
@84896150: 没道理,其他人都可以,我不知现在sae的函数是否有改变,请自行修改,谢谢
@kn007:
我试了,只能针对gif图
@firewolf189: 不可能,我之前都是jpg,看下4楼
@firewolf189: 他博客有接着修改的版本
能不能加你QQ请教下,QQ:84896150
@84896150: 不好意思,最近没什么时间。
我打开Storage查看缓存的缩略图,发现gif图片的缓存大小为2.87KB,但是jpg和png的图片大小为0kb,
缓存的gif图http://xiongchao-cache.stor.sinaapp.com/WordPress-3.5-For-BAE-%E4%B8%8B%E8%BD%BD.gif
缓存的jpg图http://xiongchao-cache.stor.sinaapp.com/saeguaq.jpg
@84896150: 检查第44行到61行,看是否有错误输出。谢谢
@84896150: 为什么我能看到图片呢?
@84896150: 看一下functions.php的编码是否为utf-8
@84896150: 测试了下,是正常可用的,请检查自身问题。可查阅api文档。
你好我用了之后,需要设置特色图像才能显示出来,但是都没剪裁是什么原因呢?而且图片不是存储在建立的cache里面,望指教一下哦
@setsail: 这个已经很久了,而且是根据我的主题来的,请自行修改和参考api文档。
@setsail: 提示可以看一下本篇文章的Traceback
@kn007: 我现在网站能显示出来了,但是显示Warning: filesize() [
function.filesize] ,再刷新下就好了,请问这是什么原因?还有就是,他不剪裁直接改 的图片长宽,哪里的问题呀?
@setsail: 看下api参数吧,可能变量有改动了。顺便看下SaeImage的resize类,有没有变动
博主,为什么我的按楼主操作了,还是一样
@cc55: 还是一样什么???自己去看api。可能有变化
希望过来问问题的朋友,可以重新查看api文档,毕竟可能有更改,可以按照本帖思路学习