当前位置:Gxlcms > PHP教程 > php创建短地址(var_export)的方法

php创建短地址(var_export)的方法

时间:2021-07-01 10:21:17 帮助过:22人阅读

处理页面 show.php:

  1. include 'functions.php';
  2. include 'shorturls.php';
  3. $entry = $_POST['submit'];
  4. $url = $_POST['url'];
  5. $output = '';
  6. if($entry == 'Shorten Url' AND $url)
  7. {
  8. if(!in_array($url,$shortUrls))
  9. {
  10. $uif = alphaID(count($shortUrls),false,6);
  11. if(!array_key_exists($uif,$shortUrls))
  12. {
  13. $shortUrls[$uif] = $url;
  14. $file = fopen('shorturls.php','w');
  15. fwrite($file,'');
  16. fclose($file);
  17. $output = 'Original Url : '.$url.'
    Shorten Ulr : http://www.yourdomain.com/api/s='.$uif.'';
  18. }
  19. else $output = 'access error';
  20. }
  21. else
  22. {
  23. $uif = array_search($url,$shortUrls);
  24. $output = 'Original Url : '.$url.'
    Shorten Ulr : http://www.yourdomain.com/api/s='.$uif.'';
  25. }
  26. echo $output.'

    Back';
  27. }
  28. ?>

关联页面 functions.php

  1. function alphaID($in, $to_num = false, $pad_up = false, $passKey = null)
  2. {
  3. $index = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  4. if ($passKey !== null) {
  5. // Although this function's purpose is to just make the
  6. // ID short - and not so much secure,
  7. // with this patch by Simon Franz (http://blog.snaky.org/)
  8. // you can optionally supply a password to make it harder
  9. // to calculate the corresponding numeric ID
  10. for ($n = 0; $n
  11. $passhash = hash('sha256',$passKey);
  12. $passhash = (strlen($passhash) < strlen($index))
  13. ? hash('sha512',$passKey)
  14. : $passhash;
  15. for ($n=0; $n < strlen($index); $n++) $p[] = substr($passhash, $n ,1);
  16. array_multisort($p, SORT_DESC, $i);
  17. $index = implode($i);
  18. }
  19. $base = strlen($index);
  20. if ($to_num) {
  21. // Digital number <<-- alphabet letter code
  22. $in = strrev($in);
  23. $out = 0;
  24. $len = strlen($in) - 1;
  25. for ($t = 0; $t <= $len; $t++) {
  26. $bcpow = bcpow($base, $len - $t);
  27. $out = $out + strpos($index, substr($in, $t, 1)) * $bcpow;
  28. }
  29. if (is_numeric($pad_up)) {
  30. $pad_up--;
  31. if ($pad_up > 0) $out -= pow($base, $pad_up);
  32. }
  33. $out = sprintf('%F', $out);
  34. $out = substr($out, 0, strpos($out, '.'));
  35. }
  36. else
  37. {
  38. // Digital number -->> alphabet letter code
  39. if (is_numeric($pad_up)) {
  40. $pad_up--;
  41. if ($pad_up > 0) $in += pow($base, $pad_up);
  42. }
  43. $out = "";
  44. for ($t = floor(log($in, $base)); $t >= 0; $t--) {
  45. $bcp = bcpow($base, $t);
  46. $a = floor($in / $bcp) % $base;
  47. $out = $out . substr($index, $a, 1);
  48. $in = $in - ($a * $bcp);
  49. }
  50. $out = strrev($out); // reverse
  51. }
  52. return $out;
  53. }
  54. ?>

关联页面 shorturls.php

原理: 将提交的网址存放数组里面,同时为之产生一个唯一的键,之后将该数组存放文本中,当然你也可以存放到数据库中,此实例为存放到文本中。

有关的函数

1. array_search() 函数 array_search(value,array,strict) array_search() 函数与 in_array() 一样,在数组中查找一个键值。如果找到了该值,匹配元素的键名会被返回。如果没找到,则返回 false。

2. var_export() 函数 此函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP 代码。 您可以通过将函数的第二个参数设置为 TRUE,从而返回变量的表示。

比较 var_export() 和 var_dump().

最后是 接受页面 redirect.php

  1. include 'shorturls.php';
  2. $uid = $_GET['uid'];
  3. $addr = ($uid AND array_key_exists($uid,$shortUrls)) ? $shortUrls[$uid]: '/';
  4. header('location:'.$addr);
  5. ?>

此页面需要结合 .htaccess or .waccess 使用:

  1. RewriteEngine On
  2. RewriteRule ^s=(.*)$ /redirect.php?uid=$1 [R=301,L]

人气教程排行