PHP获得跳转的真实地址实例

 更新时间:2016年11月25日 17:28  点击:1409
现在有很多的短网址应用,点击就跳转到缩短之前的网址了,那今天我们就来看一下,PHP如何获取短网址跳转之前的网址,其实也很简单,就是用php的get_headers 函数,

取得Response Headers,之后慢慢分析就行了。

给出具体实现方法:

 代码如下 复制代码

$header = get_headers($url, 1);
if (strpos($header[0], ’301′) || strpos($header[0], ’302′)) {
if (is_array($header['Location'])) {
return $header['Location'][count($header['Location'])-1];
} else {
return $header['Location'];
}
} else {
return $url;
}


实例二

 代码如下 复制代码

<?php
//
echo get_redirect_url('http://www.111cN.nEt');
//输出结果为:http://code.google.com/android/
function get_redirect_url($url){
    $redirect_url = null;

    $url_parts = @parse_url($url);
    if (!$url_parts) return false;
    if (!isset($url_parts['host'])) return false; //can't process relative URLs
    if (!isset($url_parts['path'])) $url_parts['path'] = '/';

    $sock = fsockopen($url_parts['host'], (isset($url_parts['port']) ? (int)$url_parts['port'] : 80), $errno, $errstr, 30);
    if (!$sock) return false;

    $request = "HEAD " . $url_parts['path'] . (isset($url_parts['query']) ? '?'.$url_parts['query'] : '') . " HTTP/1.1rn";
    $request .= 'Host: ' . $url_parts['host'] . "rn";
    $request .= "Connection: Closernrn";
    fwrite($sock, $request);
    $response = '';
    while(!feof($sock)) $response .= fread($sock, 8192);
    fclose($sock);

    if (preg_match('/^Location: (.+?)$/m', $response, $matches)){
        if ( substr($matches[1], 0, 1) == "/" )
            return $url_parts['scheme'] . "://" . $url_parts['host'] . trim($matches[1]);
        else
            return trim($matches[1]);

    } else {
        return false;
    }

}

本文章来介绍根据用户出生年月来计算年龄/生肖/星座的各种程序实例代码,各位朋友不防进入参考


//计算年龄

 代码如下 复制代码
function birthday($mydate){
    $birth=$mydate;
    list($by,$bm,$bd)=explode('-',$birth);
    $cm=date('n');
    $cd=date('j');
    $age=date('Y')-$by-1;
    if ($cm>$bm || $cm==$bm && $cd>$bd) $age++;
    return $age;
//echo "生日:$birthn年龄:$agen";
}

根据年份计算生肖

 代码如下 复制代码

<?php
/**
 *  计算.生肖
 * 
 * @param int $year 年份
 * @return str
 */
function get_animal($year){
    $animals = array(
            '鼠', '牛', '虎', '兔', '龙', '蛇', 
            '马', '羊', '猴', '鸡', '狗', '猪'
    );
    $key = ($year - 1900) % 12;
    return $animals[$key];
}

echo get_animal(1990);    // 马
echo get_animal(2010);    // 虎

根据生日计算星座

 代码如下 复制代码


<?php
/**
 *  计算.星座
 *
 * @param int $month 月份
 * @param int $day 日期
 * @return str
 */
function get_constellation($month, $day){
    $signs = array(
            array('20'=>'宝瓶座'), array('19'=>'双鱼座'),
            array('21'=>'白羊座'), array('20'=>'金牛座'),
            array('21'=>'双子座'), array('22'=>'巨蟹座'),
            array('23'=>'狮子座'), array('23'=>'处女座'),
            array('23'=>'天秤座'), array('24'=>'天蝎座'),
            array('22'=>'射手座'), array('22'=>'摩羯座')
    );
    $key = (int)$month - 1;
    list($startSign, $signName) = each($signs[$key]);
    if( $day < $startSign ){
        $key = $month - 2 < 0 ? $month = 11 : $month -= 2;
        list($startSign, $signName) = each($signs[$key]);
    }
    return $signName;
}

echo get_constellation(12, 11);    // 射手座
echo get_constellation(6, 6);      // 双子座

IP地址转换在整型数据然后保存到数据库中,这是一种常用的做法,我们转换IP地算法是intIP = 256*256*256*w + 256*256*x + 256*y + z即可,下面来给各位同学介绍具体实例。

【转换原理】:假设IP为:w.x.y.z,则IP地址转为整型数字的计算公式为:intIP = 256*256*256*w + 256*256*x + 256*y + z

【PHP的互转】:PHP的转换方式比较简单,它内置了两个函数

int ip2long ( string $ip_address ) //ip转换成整型数值
string long2ip ( string $proper_address ) // 整型数值转换成ip【MySQL的互转】:相对于MsSQL来说MySQL的转换方式比较简单,它和PHP一样也内置了两个函数

IP 转为整型:

select INET_ATON (IP地址)整型数值转换成IP

select INET_NTOA ( IP的整型数值 )


一个实例

1.手工自己的实现方法

 代码如下 复制代码


 function ip2number($ip)
      {

          $t = explode('.', $ip);
          $x = 0;
          for ($i = 0; $i < 4; $i++)

          {
              $x = $x * 256 + $t[$i];

          }
          return $x;

      }

function number2ip($num)

      {
          $t = $num;
          $a = array();

          for ($i = 0; $i < 4; $i++)
          {
              $x = $t % 256;
              if($x < 0) $x += 256;
              array_unshift($a, $x);
              $t = intval($t / 256);
          }
          return implode('.', $a);
 }

我们要写原生太的文章内容分页程序,原理很简单,就是在编辑时我们在编辑器中插入分页符,然后在显示时我们直接使用explode分页就可以实现了,当然有更高级的就是分页保存不同的记录,然后再生成相对复杂一些。

将正文按照一定字符串进行分割,分割后在按照页码进行数组索引,将当前页码对应数组的值输出即可,好像说得够晕的,下面来个实例:

 代码如下 复制代码

<?php
$str = "asd啊<b>是</b>大叔大叔asd杀毒发[NextPage]生的啊师傅 <a href="asd">asd</a> 啊师傅asd a速度发啥地方";
//接收页码(如果不存在就为1)
$page = $_REQUEST['page'] ? $_REQUEST['page'] : 1;
//通过分割符分割内容
$arr = explode("[NextPage]",$str);
//如果分割出来的数组大小为1即未进行分页
if(count($arr)==1){
 echo $str;
}else{
 //按页码输出相应的内容
 echo $arr[$page-1];
 //分页页码
 for($i=1;$i<=count($arr);$i++){ 
  if($page == $i){//当前页
   echo "<a href='?page=".$i."' class='current'>".$i."</a> ";
  }else{
    echo "<a href='?page=".$i."' >".$i."</a> ";
  }
 }
}
?>

在php中要获取php脚本使用的内存情况我们可以使用php自带函数memory_get_usage()来实例,他可以查看当前 PHP 脚本执行占用的内存多少,下面我来来看看

 memory_get_usage()官方语法

一,函数原型
int memory_get_usage ([ bool $real_usage = false ] )

二,版本兼容
PHP 4 >= 4.3.2, PHP 5

三,基础用法与实例


我们可以直接使用 PHP函数 memory_get_usage() 查看系统分配给当前 PHP 脚本执行占用的内存多少。
 

 代码如下 复制代码

<?php
echo memory_get_usage(), '<br />';  // 79248
$tmp = str_repeat('http://3aj.cn/', 4000);  // 135408
echo memory_get_usage(), '<br />';
unset($tmp);
echo memory_get_usage();  // 79248
?> 

程序输出的数字单位为 byte(s),也就是当时 PHP 脚本使用的内存(不含 memory_get_usage() 函数本身占用的内存)。

由上面的例子可以看出,要想减少内存的占用,可以使用 PHP unset() 函数把不再需要使用的变量删除。类似的还有:PHP mysql_free_result() 函数,可以清空不再需要的查询数据库得到的结果集,这样也能得到更多可用内存。

PHP memory_get_usage() 函数还可以有个参数,$real_usage,其值为布尔值。默认为 FALSE,表示得到的内存使用量不包括该函数(PHP 内存管理器)占用的内存;当设置为 TRUE 时,得到的内存为不包括该函数(PHP 内存管理器)占用的内存。


格式化 memory_get_usage() 结果以 KB 为单位输出

 代码如下 复制代码

<?php  

 function convert($size){  

    $unit=array('b','kb','mb','gb','tb','pb'); 

     return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i]; 

 } 

echo convert(memory_get_usage(true)); 

 ?>


自定义函数获取数组或变量值大小

 

 代码如下 复制代码
<?php
function array_size($arr){
 ob_start();
 print_r($arr);
 $mem=ob_get_contents();
 ob_end_clean();
 $mem=preg_replace("/n +/","",$mem);
 $mem=strlen($mem);
 return $mem;
}
$memEstimate=array_size($GLOBALS);
?>

所以在实际编程中,可以用 memory_get_usage() 函数比较各个方法占用内存的高低,来选择使用哪种占用内存小的方法。
 

附带个使用函数:

 

 代码如下 复制代码
<?php
if (!function_exists('memory_get_usage')) {
 function memory_get_usage() {
     $pid = getmypid();
      if (IS_WIN) {
         exec('tasklist /FI "PID eq ' . $pid . '" /FO LIST', $output);
         return preg_replace('/[^0-9]/', '', $output[5]) * 1024;
      } else {
         exec("ps -eo%mem,rss,pid | grep $pid", $output);
         $output = explode(" ", $output[0]);
         return $output[1] * 1024;
      }
    }
}
?> 

再来个函数使用例子:
 

 

 代码如下 复制代码

<?php 
//memory_get_usage(); 
 
$m1 = memory_get_usage(); 
echo '<br /> m1:',$m1;  // m1:80160
 
$a = 'hello'; 
$b =  str_repeat($a,1000); 
 
$m2 = memory_get_usage(); 
echo '<br /> m2:',$m2;  // m2:85624

unset($b); 
 
$m3 = memory_get_usage(); 
echo '<br /> m3:',$m3;  // m3:80600
?>


所以在实际编程中,可以用PHP memory_get_usage()比较各个方法占用内存的高低,来选择使用哪种占用内存小的方法。

[!--infotagslink--]

相关文章

  • php中登录后跳转回原来要访问的页面实例

    在很多网站用户先访问一个要登录的页面,但当时没有登录后来登录了,等待用户登录成功之后肯定希望返回到上次访问的页面,下面我就来给大家介绍登录后跳转回原来要访问的页...2016-11-25
  • c#获取本机的IP地址的代码

    c#获取本机的IP地址的代码,需要的朋友可以参考一下...2020-06-25
  • 微信小程序 页面跳转传递值几种方法详解

    这篇文章主要介绍了微信小程序 页面跳转传递值几种方法详解的相关资料,需要的朋友可以参考下...2017-01-16
  • java后台实现js关闭本页面,父页面指定跳转或刷新操作

    这篇文章主要介绍了java后台实现js关闭本页面,父页面指定跳转或刷新操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-16
  • 微信小程序实现选择地址省市区三级联动

    这篇文章主要为大家详细介绍了微信小程序实现选择地址省市区三级联动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-21
  • 基于JavaScript实现网页倒计时自动跳转代码

    这篇文章主要介绍了基于JavaScript实现网页倒计时自动跳转代码 的相关资料,需要的朋友可以参考下...2015-12-29
  • Nginx根据不同浏览器语言配置页面跳转的方法

    这篇文章主要介绍了Nginx根据不同浏览器语言配置页面跳转的方法,包括一个简体繁体的基本判断方法及实际根据中英文跳转的例子,需要的朋友可以参考下...2016-05-22
  • IE6中链接A的href为javascript协议时不在当前页面跳转

    切页面时有时用链接A来替代按钮,这样做有几个好处 鼠标放上时默认有手状效果(不用添加cursor:pointer) 可以添加低版本IE都支持的伪类 如果点击时页面要整体刷新,即跳转,这时IE6则不尽人意,如下 复制代码 代码如下: <p>...2014-06-07
  • Vue-Element-Admin集成自己的接口实现登录跳转

    关于这个Vue-element-admin中的流程可能对于新的同学不是很友好,所以本文将结合实例代码,介绍Vue-Element-Admin集成自己的接口实现登录跳转,感兴趣的小伙伴们可以参考一下...2021-06-23
  • Pycharm 跳转回之前所在页面的操作

    这篇文章主要介绍了Pycharm 跳转回之前所在页面的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-05
  • Vue项目中实现带参跳转功能

    最近做了一个手机端系统,其中遇到了父页面需要携带参数跳转至子页面的问题,现已解决,下面分享一下实现过程,感兴趣的朋友一起看看吧...2021-04-15
  • Vue.js实战之利用vue-router实现跳转页面

    对于单页应用,官方提供了vue-router进行路由跳转的处理,这篇文章主要给大家介绍了Vue.js实战之利用vue-router实现跳转页面的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。...2017-04-03
  • 快速理解MySQL中主键与外键的实例教程

    主键与外键的关系,通俗点儿讲,我现在有一个论坛,有两张表,一张是主贴 thread,一张是回帖 reply先说说主键,主键是表里面唯一识别记录的字段,一般是帖子id,体现在访问的时候,例如是 thread.php&#63;id=1 表示我要访问的是帖子...2015-11-24
  • C#实现获取MAC地址的方法

    这篇文章主要介绍了C#实现获取MAC地址的方法,很实用的功能,需要的朋友可以参考下...2020-06-25
  • yii添删改查实例

    一、数据访问对象 (DAO)YiiDAO 基于 PHP Data Objects (PDO) 构建。它是一个为众多流行的DBMS提供统一数据访问的扩展,这些 DBMS 包括MySQL, PostgreSQL 等等。因此,要使用 Yii DAO,PDO 扩展和特定的 PDO 数据库驱动(例如...2015-11-24
  • Microsoft Expression Web 简体中文正式版 官方下载地址

    Microsoft Expression Web 简体中文正式版相对于早期的 Microsoft Expression Web Designer CTP1(英文)除了它是正式的中文版外,有进步的地方1.对标签的id名称加上了css的代...2020-06-25
  • c# 接口使用实例

    这篇文章主要介绍了c#接口使用的实例,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-17
  • JavaScript实现通过select标签跳转网页的方法

    这篇文章主要介绍了JavaScript实现通过select标签跳转网页的方法,涉及javascript事件响应及窗口操作相关技巧,需要的朋友可以参考下...2016-10-02
  • PHP利用REFERER根居访问来地址进行页面跳转

    比如,我有一个开发一个黄页源码上转到了脚本之家。之前定了一个演示程序地址: http://www.jb51.net 而现在这个域名需要用来作其它的站,又不杀望原来的演示地址失效怎么办呢。那我就可以利用PHP REFERER来判断来源如果...2013-10-04
  • PHP JS Ip地址及域名格式检测代码

    PHP IP地址格式检测函数复制代码 代码如下:function checkIp($ip){ $ip = str_replace(" ", "", $ip); $ip = strtolower($ip); $ip= str_replace("http://", "", $ip); $ip= str_replace("https://", ""...2013-10-04