在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;
}
?>