多数大学生出来选择的工作和专业无关
首页 > 专业知识

PHP将URL转换成短网址的算法分享

时间:2018-11-12 20:25:03 [来源]:郑州PHP培训学校

   PHP将URL转换成短网址的算法分享

  短网址服务,可能很多朋友都已经不再陌生,现在大部分微博、手机邮件提醒等地方已经有很多应用模式了,并占据了一定的市场。估计很多朋友现在也正在使用。
  PHP将URL转换成短网址的算法分享
  短链接的好处:
  1、内容需要;
  2、用户友好;
  3、便于管理。
  下面是用PHP实现短网址转换的算法,代码如下:
  PHP
  <?php
  //短网址生成算法
  class ShortUrl {
  //字符表
  public static $charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";public static function encode($url)
  {
  $key = 'abc'; //加盐
  $urlhash = md5($key . $url);
  $len = strlen($urlhash);
  //将加密后的串分成4段,每段4字节,对每段进行计算,一共可以生成四组短连接for ($i = 0; $i < 4; $i++) {
  $urlhash_piece = substr($urlhash, $i * $len / 4, $len / 4);//将分段的位与0x3fffffff做位与,0x3fffffff表示二进制数的30个1,即30位以后的加密串都归零//此处需要用到hexdec()将16进制字符串转为10进制数值型,否则运算会不正常$hex = hexdec($urlhash_piece) & 0x3fffffff;//域名根据需求填写
  $short_url = "http://t.cn/";
  //生成6位短网址
  for ($j = 0; $j < 6; $j++) {
  //将得到的值与0x0000003d,3d为61,即charset的坐标最大值$short_url .= self::$charset[$hex & 0x0000003d];//循环完以后将hex右移5位
  $hex = $hex >> 5;
  }
  $short_url_list[] = $short_url;
  }
  return $short_url_list;
  }
  }
  $url = "http://www.sunbloger.com/";
  $short = ShortUrl::encode($url);
  print_r($short);
  ?>
  通常我们用四组网址中的第一组即可。
  这里需要注意的是,这个算法是不可逆的,因此,通常的做法是将短网址和对应的原网址存入数据库,当访问时,从数据库中取出匹配的原网址,通过301或header进行跳转。
  PHP入门教程之图像处理技巧分析
  本文实例讲述了PHP图像处理。分享给大家供大家参考,具体如下:
  PHP入门教程之图像处理技巧分析
  Demo1.php
  <?php
  //一般生成的图像可以是 png,jpg,gif,bmp
  //jpeg,wbmp
  //第一步,设置文件MIME类型,输出类型 text/html 类型是网页类型,默认可以不写//将输出类型改成图像流
  header('Content-Type:image/png;');
  //第二步,创建一个图形区域,图像背景
  //有两种创建方式,资源类型,一般要加上 @ 符号,防止出错//imagecreatetruecolor 返回的是一个资源句柄//这个函数创建了一个图像的区域,没有进行填充的时候,背景默认是黑色的$im = imagecreatetruecolor(200,200);
  //第三步,有空白图像区域,绘制颜色,文字叫,线条啊。。。
  //填充色换掉,首先要有个颜色填充器
  //imagecolorallocate -- 为一幅图像分配颜色$blue = imagecolorallocate($im,0,102,255);//将这个 blue 颜色填充到背景上去
  //imagefill -- 区域填充
  imagefill($im,0,0,$blue);
  //第四部,在蓝色的背景上输入一些线条,文字等$white = imagecolorallocate($im,255,255,255);//imageline -- 画一条线段
  imageline($im,0,0,200,200,$white);
  imageline($im,200,0,0,200,$white);
  //imagestring -- 水平地画一行字符串
  imagestring($im,5,80,20,'Mr.One',$white);//第五步,输出最终图形
  //以 PNG 格式将图像输出到浏览器或文件
  imagepng($im);
  //第六步,我要将所有的资源全部清空
  imagedestroy($im);
  ?>
  Demo2.php
  <?php
  //src 可以插入各样类型的图片
  //Demo1.php 其实就是一张 png 图片
  header('Content-Type:text/html; charset=gbk');echo '<img src="Demo1.php" alt="图形"/>';?>
  Demo3.php
  <?php
  //简单的验证码
  //随机数
  //为什么要循环 0-15 之间的数呢?
  //因为要实现最简单的字母和数字混搭
  //十六进制 0-9 a-f
  //dechex -- 十进制转换为十六进制
  //创建一个四位的验证码
  for($i=0;$i<4;$i++){
  $nmsg .= dechex(mt_rand(0,15));
  }
  //echo $nmsg;
  header('Content-Type:image/png;');
  $im = imagecreatetruecolor(75,25);
  $blue = imagecolorallocate($im,0,102,255);$white = imagecolorallocate($im,255,255,255);imagefill($im,0,0,$blue);
  imagestring($im,5,20,5,$nmsg,$white);
  imagepng($im);
  imagedestroy($im);
  ?>
  Demo4.php
  <?php
  define('__DIR__',dirname(__FILE__).'\\');//加载已有的图像
  header('Content-Type:image/png;');
  //header('Content-Type:image/jpeg;');
  //imagecreatefrompng -- 从 PNG 文件或 URL 新建一图像//用 image 载入图像,是可以编辑图像
  //在载入的图像中,加入一个小水印
  $im = imagecreatefrompng(__DIR__.'ss.png');//$im = imagecreatefromjpeg('xx.jpg');
  $white = imagecolorallocate($im,255,255,255);imagestring($im,5,10,10,'http://www.oneStopWeb.cn',$white);imagepng($im);
  //imagejpeg($im);
  imagedestroy($im);
  ?>
  Demo5.php
  <?php
  define('__DIR__',dirname(__FILE__).'\\');//加载已有的图像
  header('Content-Type:image/png;');
  //header('Content-Type:image/jpeg;');
  //imagecreatefrompng -- 从 PNG 文件或 URL 新建一图像//用 image 载入图像,是可以编辑图像
  //在载入的图像中,加入一个小水印
  $im = imagecreatefrompng(__DIR__.'ss.png');//$im = imagecreatefromjpeg('xx.jpg');
  $white = imagecolorallocate($im,255,255,255);imagestring($im,5,10,10,'http://www.oneStopWeb.cn',$white);//font 字体还必须支持中文
  $font = 'C:\WINDOWS\Fonts\SIMHEI.TTF';
  //字体文件
  $text = iconv('gbk','utf-8','阅谁问君诵');//采用系统提供的字体
  //第二参数,是字体的大小,第三个参数是旋转角度,4,5参数是坐标imagettftext($im,20,10,50,100,$white,$font,$text);imagepng($im);
  //imagejpeg($im);
  imagedestroy($im);
  ?>
  Demo6.php
  <?php
  //微缩图,不但表面的大小改变了,容量也改变了//是真的改变了,不是表面的缩小
  define('__DIR__',dirname(__FILE__).'\\');header('Content-Type:image/png;');
  //getimagesize -- 取得图像大小
  //获取到了原图的长度和高度
  list($width,$height) = getimagesize(__DIR__.'ss.png');//将原图缩放成 40%
  $_width = $width * 0.4;
  $_height = $height * 0.4;
  //创建一个新图
  $im = imagecreatetruecolor($_width,$_height);//下面的工作是,载入原图,将原图复制到新图上去//载入原图
  $_im = imagecreatefrompng(__DIR__.'ss.png');//将原图重新采样,拷贝到新图上,最后按 0.4 的比例输出//imagecopyresampled -- 重采样拷贝部分图像并调整大小imagecopyresampled($im,$_im,0,0,0,0,$_width,$_height,$width,$height);//将新图输出
  imagepng($im);
  //第二个参数不需要,直接 null 过度
  //第三个参数,是 0-100 来调节 JPG 的清晰度//如果是 imagepng,那么全部都是高清
  //imagejpeg($im,null,50);
  //销毁
  imagedestroy($im);
  imagedestroy($_im);
  ?>
 

上一篇:PHP限制上传文件大小的具体解决办法

下一篇:PHP命名空间规则解析及高级功能