5ucms论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 5648|回复: 0
打印 上一主题 下一主题

[开发教程] 微擎函数:获取附件的HTTP绝对路径函数tomedia

[复制链接]

670

主题

785

帖子

8243

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8243
跳转到指定楼层
楼主
发表于 2017-5-29 19:44:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. string tomedia($src, $local_path = false)
复制代码

—— 将参数$src转换为HTTP绝对路径并返回。

参数
$src 要转换的参数;
$local_path 获取的本地还是远程的绝对路径,默认情况下这个参数不起作用,但是,当$_W['setting']['remote']['type']有值“且”不存在文件IA_ROOT . '/' . $_W['config']['upload']['attachdir'] . '/' . $src时,$local_path 为true表示获取本地绝对路径,否则,获取的是远程绝对路径。
函数分析

  1)声明全局变量:global $_W;

  如果$src参数为空,则返回空:

  1.   if(empty($src)){

  2.    return '';

  3.    }
复制代码



  2)如果$src参数里面含有目录'addons/',则返由这个目录构成的对路径:

  1.     if (strexists($src, 'addons/')) {
  2.         return $_W['siteroot'] . substr($src, strpos($src, 'addons/'));
  3.     }
复制代码



  例如,$src = "php/addons/os/images";

  返回绝对路径是:
http://bbs.5ucms.com/addons/os/images


  也就是说在$src里面的addons目录前面全部去掉,加上网站根目录。

  3)如果$src 包含有网站根目录,但是,不包含'/addons/'目录的,则解析这个$src进行处理:

  1.     if (strexists($src, $_W['siteroot']) && !strexists($src, '/addons/')) {
  2.         $urls = parse_url($src);
  3.         $src = $t = substr($urls['path'], strpos($urls['path'], 'images'));
  4.     }
复制代码



  例如,$src = "http://bbs.5ucms.com/php/images/document/css";

  那么,经过上面的处理后,$src = $t = "images/document/css"

  全部转成小写:

  1. $t = strtolower($src);
复制代码



  如果$t中含有下面两个网址,则调用wurl()函数,也就是下面的url()函数,这个url其实就是wurl的简写形式:

  1.     if (strexists($t, 'https://bbs.5ucms.com') || strexists($t, 'http://www.5ucms.org')) {

  2.         return url('utility/wxcode/image', array('attach' => $src));
  3.     }
复制代码


  然后,执行/web/source/utility/wxcode.ctrl.php文件里面的代码:

  1. elseif($do == 'image') {
  2.     load()->func('communication');
  3.         $image = trim($_GPC['attach']);
  4.     if(empty($image)) {
  5.         exit();
  6.     }
  7.     $content = ihttp_request($image, '', array('CURLOPT_REFERER' => 'http://www.qq.com'));
  8.     header('Content-Type:image/jpg');
  9.     echo $content['content'];
  10.     exit();
复制代码


  其实,这里的条件一般不执行。

  4)如果$t中含有http://、https://或前两个字符是'//'表示绝对路径直接返回:

  1.     if (strexists($t, 'http://') || strexists($t, 'https://') || substr($t, 0, 2) == '//') {
  2.         return $src;
  3.     }
复制代码


  5)如果$local_path为真,或者,$_W['setting']['remote']['type']为空,确实这个值默认下微擎微信公众号系统并没有作任何设置,或者,file_exists(IA_ROOT . '/' . $_W['config']['upload']['attachdir'] . '/' . $src文件存在,则返回本地服务器绝对路径,否则,返回远程绝对路径。

  1.     if ($local_path || empty($_W['setting']['remote']['type']) || file_exists(IA_ROOT . '/' . $_W['config']['upload']['attachdir'] . '/' . $src)) {
  2.         $src = $_W['siteroot'] . $_W['config']['upload']['attachdir'] . '/' . $src;
  3.     } else {
  4.         $src = $_W['attachurl_remote'] . $src;
  5.     }
复制代码



  最后,返回生成的绝对路径:return $src;

示例

  1. echo tomedia('images/noavatar_middle.gif');
复制代码

结果:http://bbs.5ucms.com/attachment/images/noavatar_middle.gif

  1. echo tomedia('bbs.5ucms.com/attachment/images/noavatar_middle.gif');
复制代码

结果:http://bbs.5ucms.com/attachment/images/noavatar_middle.gif
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|5ucms.com

GMT+8, 2024-5-3 00:53 , Processed in 0.328125 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表