解析php 版获取重定向后的地址(代码)_php技巧

复制代码 代码如下:

//取重定向的地址
 class RedirectUrl{
     //地址
     var $url;
     //初始化地址
     function RedirectUrl($url){
         $this->url = $url;
     }
     /**
      * get_redirect_url()
      * 取重定向的地址
      *
      * @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://special.ku6img.com/projects/2010/d-color/images/slt-1.jpg"){
     $obj = new RedirectUrl($url);

     $realurl = $obj->get_final_url();

     if(strpos($realurl,$noimg)>0){
         return $newimg;
     }
     return $url;
 }
 //参考
 echo "<img src='".get_show_pic("yun_qi_img/5.jpg")."'/>";
 ?>

时间: 2024-10-26 17:13:42

解析php 版获取重定向后的地址(代码)_php技巧的相关文章

解析php 版获取重定向后的地址(代码)

代码如下: //取重定向的地址 class RedirectUrl{ //地址 var $url; //初始化地址 function RedirectUrl($url){ $this->url = $url; } /** * get_redirect_url() * 取重定向的地址 * * @param string $url * @return string */ private function get_redirect_url($url){ $redirect_url = null; $u

解析php通过cookies获取远程网页的指定代码_php技巧

复制代码 代码如下: function Steal($url, $post_data = ""){//$header[] = "Accept: text/vnd.wap.wml,*.*";   $user_agent = "Mozilla/4.0";  $follow_loc = 1;  $cookie_file ="./tmp/cook.txt";  $ch = @curl_init();  @curl_setopt($ch

使用PHP获取网络文件的实现代码_php技巧

复制代码 代码如下: <?php //设置我们将要使用的文件 $srcurl = "http://localhost/index.php"; $tempfilename = "tempindex.html"; $targetfilename = "index.html"; ?> <HTML> <HEAD> <TITLE> Generating <?php echo("$targetf

javascript,php获取函数参数对象的代码_php技巧

例如: 复制代码 代码如下: function say () { alert (arguments[0]+'说:'+arguments[1]); } say ('fanglor','fanglor is a boy !'); 结果:弹出 fanglor 说:fanglor is a boy ! -------------------------------------------------------------------------------- 这个有点类似于php 中的 func_ge

利用php获取服务器时间的实现代码_php技巧

很多时候我们喜欢用js来获取日期和时间,但这仅仅是客户端的.我们可以用php的date函数即可来获取服务器上的时间: 复制代码 代码如下: <?php//将时区设置为中国date_default_timezone_set("PRC");echo date("Y-m-d l H:i:s A");//例输出:2010-03-06 Saturday 11:51:29 AM?>

php采集文章中的图片获取替换到本地(实现代码)_php技巧

复制代码 代码如下: /** * 获取替换文章中的图片路径 * @param string $xstr 内容 * @param string $keyword 创建照片的文件名 * @param string $oriweb 网址 * @return string *  */function replaceimg($xstr,$keyword, $oriweb){     //保存路径    $d = date('Ymd', time());    $dirslsitss = '/var/www

php获取某个目录大小的代码_php技巧

大致程序思想就是使用递规来计算目录占用空间多少, 然后再把这个占用空间的值写进文本文件里, 那么只要访问这个txt文件就知道占用了多少空间, 不用频繁获取而读磁盘, 节省资源. 每次用户如果上传的文件或者删除了文件, 那么又重新进行统计. 当然, 也可以把统计结果保存到数据库里. 复制代码 代码如下: function countDirSize($dir) { $handle = opendir($dir); while (false!==($FolderOrFile = readdir($ha

php获取服务器信息的实现代码_php技巧

复制代码 代码如下: <html><head><meta http-equiv="content-type" content="text/html; charset=gb2312"><title>获取服务器信息</title></head><body><?php$sysos = $_SERVER["SERVER_SOFTWARE"];      //获取服务

php下获取http状态的实现代码_php技巧

逐风整理了两种方式,大家可以自行参考/使用: 复制代码 代码如下: #方式一$ch = curl_init('http://www.jb51.net');curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_exec($ch);echo curl_getinfo($ch, CURLINFO_HTTP_CODE); // 200curl_close($ch); 方式二 复制代码 代码如下: print_r(    get_headers('http://