在php中,经常使用.htaccess实现url的重定向,不过,有时又需要获取重定向后的页面地址。
本文给出的例子,可以取得重定向后的url地址,如下:
<?php //取重定向的地址 class RedirectUrl{ //地址 var $url; //初始化地址 function RedirectUrl(/blog_article/$url/index.html){ $this->url = $url; } /** * get_redirect_url() * 取重定向的地址 * //by www. * @param string $url * @return string */ private 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.1\r\n"; $request .= 'Host: ' . $url_parts['host'] . "\r\n"; $request .= "Connection: Close\r\n\r\n"; fwrite($sock, $request); $response = ''; while(!feof($sock)) $response .= fread($sock, 8192); fclose($sock); if (preg_match('/^Location: (.+?)$/m', $response, $matches)){ return trim($matches[1]); } else { return false; } } /** * get_all_redirects() * 取所有重定向地址 * * @param string $url * @return array */ private function get_all_redirects($url){ $redirects = array(); while ($newurl = $this->get_redirect_url($url)){ if (in_array($newurl, $redirects)){ break; } $redirects[] = $newurl; $url = $newurl; } return $redirects; } /** * get_final_url() * 取实际地址 * * @param string $url * @return string */ function get_final_url(){ $redirects = $this->get_all_redirects($this->url); if (count($redirects)>0){ return array_pop($redirects); } else { return $this->url; } } } /** * get_show_pic * 取最终要显示的图片地址 * * @param string $url * @return string */ function get_show_pic($url,$noimg ='noimg.gif',$newimg="http://www./images/slt-1.jpg"){ $obj = new RedirectUrl(/blog_article/$url/index.html); $realurl = $obj->get_final_url(); if(strpos($realurl,$noimg)>0){ return $newimg; } return $url; } //参考 echo "<img src='".get_show_pic("http://www./img/1294948410019/5.jpg")."'/>"; ?>
以下是本文记录的有关php数组的一些笔记,分享下,供有缘的朋友参考,呵呵。
1,在php里面数组可以存储任意类型的数据,在c++中是不行的。
2,在php里数组的使用有下面几种情况。
1)、$arr[0]=1;$arr[1]='china';$arr=[2]=false;$arr['str']='str';
2)、arr= array(1,'str',false); $arr2=array('str'=>'str','int'=>2);
3,遍历数组方法。可以使用for,while,foreach这3种
1)、其中foreach使用方法:
{
echo $value."<br>";
}
2)、当以$arr[]进行赋值的时候,数组下标会以当前最大下标+1($arr[最大+1])为下标.
例子:
<?php $arr= array(1,'str',false); $arr[4]='4'; $arr[]='x'; $arr['int2']='7'; $arr[]='xx'; foreach($arr as $key=>$value) { echo $key.' ='.$value."<br>"; } //output: /* 0 =1 1 =str 2 = 4 =4 5 =x int2 =7 6 =xx */ ?>
4,在php中数组是会自己动态增加的,和c++中是不同的
5,关于数组的函数
1)、count统计数组的个数。
2)、isarray判断某个变量是不是数组
3)、explode()文本分割。
4)、unset销毁某个变量或者数组的元素。unset销毁后不会改变数组的序列。
6,数组运算符
$a+$b 把数组b加到数组a里面,除去相同的键。相同的键不覆盖。数字下标也一样
<?php $a=array('a'=>'fsf','b'=>'fsdfss'); $b=array('a'=>'china','b'=>'huc','c'=>'lengai'); $c=$a+$b; print_r($c);//Array ( [a] => fsf [b] => fsdfss [c] => lengai ) ?>
代码说明:
$a==$b 数组a和数组b键值是一样的
$a===$b 数组a和b不仅键值一样,顺序还必须一样。
$a<>$b数组a和数组b不一样。
$a!==$b数组a和数组b不全等。
就总结这些吧,希望对大家有所帮助吧。
学php编程,就来。
代码如下:
<?php /** * func: array_sort * desc: php二维数组排序 * edit: www. */ function array_sort($arr,$keys,$type='asc'){ $keysvalue = $new_array = array(); foreach ($arr as $k=>$v){ $keysvalue[$k] = $v[$keys]; } if($type == 'asc'){ asort($keysvalue); }else{ arsort($keysvalue); } reset($keysvalue); foreach ($keysvalue as $k=>$v){ $new_array[$k] = $arr[$k]; } return $new_array; } ?>