缓存远程二维码图片到本地

第一步,以下代码扔到functions.php

function get_qr($url,$path,$qrpic){     

	set_time_limit (10); //设置十秒超时
	$destination_folder = $path?$path.'/':''; 
	$localname = $destination_folder .$qrpic;     
	$file = fopen ($url, "rb"); //fopen函数的r+模式: 读写方式打开 文件指针指向文件头
	if ($file) {     
		$newf = fopen ($localname, "wb"); // w+,读写方式打开 文件指针指向文件头 如果文件不存在则尝试创建之 
		if ($newf)     
			while(!feof($file)) {     
				fwrite( $newf, fread($file, 1024 * 2 ), 1024 * 2 ); //写入文件,fread控制文件最大的大小,这里是2M 
			}     
	}     
	if ($file) {     
		fclose($file);  //关闭fopen打开的文件   
	}     
	if ($newf) {     
		fclose($newf);     
	}     

} 

第二步,在网站根目录建立一个叫qrcode的新文件夹,确保有写入权限,

第三步,以下代码放到需要输出二维码图片的地方,如single.php

<?php  
$localqr =  ABSPATH .'qrcode/'.get_the_id().'.jpg';
if (!file_exists($localqr)) {//如果图片已经存在,则不会再次保存
	get_qr( "http://chart.googleapis.com/chart?cht=qr&chs=100x100&choe=UTF-8&chld=L|4&chl=".get_permalink() ,"qrcode", get_the_id().".jpg");//图片名以文章id命名
}  
?> 
<img src="<?php echo home_url( '' ); ?>/qrcode/<?php the_id()?>.jpg" width="100" height="100" alt="QR 码"/>
<!--默认二维码图片大小是100*100,如果要改,需要改4个地方,已经用蓝色标注-->

教程已经结束了,下面是写这段代码过程中我的一些感想,

  1. 关于PHP的fopen函数

    fopen不能直接获取https打头的url

  2. 关于wordpress的the_permalinkget_permalink函数

    前者是display直接输出结果,后者是return返回值,在自定义函数中使用此类变量需要使用后者
    例如the_id和get_the_id用法也是如此

LIKE OR SHARE IT:

admin发表于Code目录下,标签为,转载请保留链接

TOP DOWN
发表评论

您必须 [ 登录 ] 才能发表留言!

  1. 沙 发 哥特复兴

    沙发

    四月 28, 2013 15:59:59
    • SEO

      @哥特复兴 我去,刚才那句话是想回复你的。没想到。我点了取消。。。看来这个主题还得适应一下。。

      101室 四月 29, 2013 18:09:54
  2. 板 凳 胡倡萌

    谢谢小蝴蝶,辛苦啦!PS:基本上,WordPress凡是get_开头的函数,都是返回值以供调用,如果要输出到页面,使用 echo 即可。

    四月 28, 2013 16:00:51
    • 小蝴蝶

      @胡倡萌 恩恩 因为以前输出的时候用不带get的比较多,忘了在函数内部不能用, 哈哈

      201室 四月 28, 2013 16:02:13
      • 胡倡萌

        @小蝴蝶 测试成功,顺便修改了下,让它支持首页、分类、标签、文章和页面:

        <img src="/qrcode/.jpg” width=”$imgsize” height=”$imgsize” alt=”QR Code”/>

        202室 四月 28, 2013 22:13:15
      • 胡倡萌

        @小蝴蝶 代码过滤了,郁闷


        $imgsize = 150;
        if (is_single() || is_page()) $imgname = get_the_id();
        elseif (is_home() || is_front_page()) $imgname = 'home';
        elseif(is_category()) $imgname = 'cat-'.get_query_var('cat');
        elseif(is_tag()) $imgname = 'tag-'.get_query_var('tag_id');

        $localqr = ABSPATH .'qrcode/'.$imgname.'.jpg';
        if (!file_exists($localqr)) {
        get_qr( "http://chart.googleapis.com/chart?cht=qr&chs=".$imgsize."x".$imgsize."&choe=UTF-8&chld=L|2&chl=".get_permalink() ,"qrcode", $imgname.".jpg");
        }
        <img src="/qrcode/.jpg" width="$imgsize" height="$imgsize" alt="QR Code"/>

        202室 四月 28, 2013 22:14:54
      • 胡倡萌

        @小蝴蝶 补全 php 标签,看是否被过滤

        <img src="/qrcode/.jpg" width="$imgsize" height="$imgsize" alt="QR Code"/>

        202室 四月 28, 2013 22:16:19
  3. 地 板 公子

    够速度。。。。

    四月 28, 2013 16:11:21
  4. 地 毯 yxiao

    主机不支持fopen的路过。

    四月 28, 2013 16:40:22
  5. 地 面 不亦乐乎

    顺手抄走了。

    四月 28, 2013 17:05:50
  6. 地 下 Android

    有权限就是777 吃吃吃 移动主题没变。。

    四月 28, 2013 17:20:25
  7. 7 楼 斌果

    为什么要缓存呢,直接保存不就行了

    四月 28, 2013 17:24:39
  8. 8 楼 Tokin

    我以为是pjax。。。。看了一下代码,貌似是预读。。。
    新主题好赞啊。。。

    四月 28, 2013 17:51:06
    • 小蝴蝶

      @Tokin 恩恩 预读, pjax别的步骤都没问题,就是attr(title)的时候取不到值,准备以后闲了再继续了

      801室 四月 28, 2013 18:25:39
  9. 9 楼 测试

    测试222

    四月 28, 2013 17:52:36
  10. 10 楼 跑调的包子

    测试333

    四月 28, 2013 18:05:08
  11. 11 楼 xsinger

    测试444

    四月 28, 2013 18:19:47
  12. 12 楼 Android

    测试555

    四月 28, 2013 18:43:22
  13. 13 楼 张书杨

    新主题还真需要去适应,有点返璞归真的味道。觉得子评论觉得还是缩进看着更习惯些,要不有点喧宾夺主的感觉。

    四月 28, 2013 19:34:53
  14. 14 楼 郑永

    这个不错,呵呵。。。对那些下载站等非常有用。

    四月 29, 2013 06:51:59
  15. 15 楼 郑永

    这主题主要是耐看,哈哈。。不错哈。

    四月 29, 2013 06:52:21
  16. 16 楼 小T

    又换皮~~还是个白白的皮~~

    四月 29, 2013 09:41:30
  17. 17 楼 SEO

    看了你还是很有潜力的。。。。

    四月 29, 2013 18:08:19
  18. 18 楼 梦月酱

    暂时用不上 = = 因为懒得搞这个。。

    四月 29, 2013 20:02:49