kn007的个人博客
♥ You are here: > > > [SAE移植]搞了首页缩略图处理,几个重要部分记录下

[SAE移植]搞了首页缩略图处理,几个重要部分记录下

by | 44 Comments

这个主题是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移植]搞了首页缩略图处理,几个重要部分记录下

donate
有所帮助?

Comments

44 Comments立即评论
Loading...
  1. MOD回复

    希望过来问问题的朋友,可以重新查看API文档,毕竟可能有更改,可以按照本帖思路学习.

  2. 回复

    请问 现在有些主题 会调用 特色缩略图;那这类代码应该怎样修改? :???:

    1. MOD回复

      @小不懂: 请自行搜索,我只能给你提示
      add_theme_support( 'post-thumbnails' );
      function post_thumbnail(){}

  3. 回复

    主题是使用TimThumb 创建缩略图的,怎么修改呀

    1. MOD回复

      @Qiaoyisi: 在SAE下不用timthumb。

  4. 回复

    那怎么实现图片裁剪,而不是等比缩放呢,而且图片都是外链的

    1. MOD回复

      @Qiaoyisi: 图片外不外联都可以的。请自行查看文档(SaeImage),可以裁剪的。

    2. 回复

      @kn007: pHP 不是很懂,能否帮忙写个

    3. MOD回复

      @Qiaoyisi: 抱歉,现在确实没时间搞这些。
      而且不在SAE混很久了。

  5. 回复

    能不能,把外链图片通过裁剪,再存储到 stor里 在返回 stor的链接图片呢,文档SaeImage 一直没找到

    1. MOD回复

      @Qiaoyisi: 建议先补充基础知识再来吧,file_put_contents支持内外链。SaeStorage()->upload(或write)就可以存储到stor了。stor地址固定的,你别跟我说你不知道。找不到文档请通过搜索。

    2. MOD回复

      @Qiaoyisi: SaeImage()->crop裁剪,其他我就不罗嗦了

    3. MOD回复

      @Qiaoyisi: 我的一个建议是利用imagick扩展(貌似SAE支持),或者GD库处理图片。

  6. 回复

    我的functions.php文件中只有add_theme_support( 'post-thumbnails' );下面没有post_thumbnail方法了、、、我直接添加在add_theme_support( 'post-thumbnails' );这一行下面,Storage也改了,没效果啊、、、 :sad:

    1. MOD回复

      @adyi2012: 好久没动SAE了,现在很多函数已经被废弃了。具体还需你自己尝试。

  7. 回复

    :cry: 用你的代码是成功了!但是缩略图原图太大了,感觉没默认缩略图大小120X100缓存!怎么调?

    1. MOD回复

      @拽立网: 代码本身是有缩小尺寸的。但因为太旧函数已经过期了。
      请自行查看文档修改。

icon_wink.gificon_neutral.gificon_mad.gificon_twisted.gificon_smile.gificon_eek.gificon_sad.gificon_rolleyes.gificon_razz.gificon_redface.gificon_surprised.gificon_mrgreen.gificon_lol.gificon_idea.gificon_biggrin.gificon_evil.gificon_cry.gificon_cool.gificon_arrow.gificon_confused.gificon_question.gificon_exclaim.gif