PHP获取当前页面URL函数

 更新时间:2016年11月25日 17:22  点击:1338
在php中获取页面URL文章我都介绍过了几十次了,但今天发现有一个非常不错的处理函数,下面给大家介绍一下。

在PHP中,没有默认的Function来获取目前所在页面的URL,所以今天就向大家介绍一个在PHP获取当前页面完整URL的PHP函数
代码

函数代码如下,调用时只需要使用 curPageURL() 就行啦!

 代码如下 复制代码

/* 获得当前页面URL开始 */
function curPageURL() {
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {    // 如果是SSL加密则加上“s”
        $pageURL .= "s";
    }
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
    } else {
        $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    }
    return $pageURL;
}
/* 获得当前页面URL结束 */

补充一下server参数说明

 代码如下 复制代码

//获取域名或主机地址
echo $_SERVER['HTTP_HOST']."<br>"; #localhost

//获取网页地址
echo $_SERVER['PHP_SELF']."<br>"; #/blog/testurl.php

//获取网址参数
echo $_SERVER["QUERY_STRING"]."<br>"; #id=5

//获取用户代理
echo $_SERVER['HTTP_REFERER']."<br>";

//获取完整的url
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
#http://localhost/blog/testurl.php?id=5

//包含端口号的完整url
echo 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
#http://localhost:80/blog/testurl.php?id=5

//只取路径
$url='http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"];
echo dirname($url);
#http://localhost/blog

我的这个功能的原因是参考dedecms生成html页面的原理,只是dedecms使用的是js跳转而我使用的是refresh进行跳转,效果是一样的,下面我们一起来看一个php实现批量导入数据的方法

因为我有1000W数据一次导入数据库肯定是不可行了,所以我就导致了每一次导入50条或更多数据,然后下次再刷新一次这样就可以解决这个问题了,代码如下

 代码如下 复制代码

<?
set_time_limit(0);
//连接数据库

$s = isset( $_GET['s'] )?$_GET['s']:0;
$e = isset( $_GET['e'])?$_GET['e']:50;
$count =85000;

if( $s < $count )
{
 $sql = "select * from bac_info where isget =0 order by id desc limit $s,$e ";
 $query = mysql_query( $sql );
 while( $rs = mysql_fetch_array( $query ) )
 {
  $id = $rs['id'];
  $sms = $rs['sms'];
  $typeid = $rs['typeid'];
  $isget = $rs['isget'];
  $sql = "insert into bac_info_bak (id,sms,typeid,isget) values('$id','$sms','$typeid','$isget')";
  mysql_query( $sql ) ;
  echo $sql;
  //exit;
  $sqlu = "update bac_info set isget=1 where id =".$rs['id'];
  mysql_query( $sqlu );
 }
 echo '<meta http-equiv="refresh" content="0;url=rand.php?s='.($s+50).'&e=50">正在处理数据,当前为'.$s.'条......';
}
else
{
 echo '完成所有数据处理 <a href=rand.php>再随机排序一次</a>';
}
?>

关于直接采集远程机器图片之后再下载到我们本地其实非常的简单,我们通常会使用fopen 与 file_put_contents 或者高级点的curl来实现,下面我整理了几个比较好用的图片下载到本地例子,大家一起看看。

对于没有防盗链的图片

 代码如下 复制代码

/*
 * 对于没有防盗链的图片
 * $url 图片地址
 * $filename 图片保存地址
 * return 返回下载的图片路径和名称,图片大小
 */
function GrabImage($url,$filepath,$filename="") {
if($url=="") return false;
 
$ext=strrchr($url,".");
if($filename=="") {
if($ext!=".gif" && $ext!=".jpg" && $ext!=".png") return false;
$filename=date("YmdHis");
}
 
ob_start();
readfile($url);
$img = ob_get_contents();
ob_end_clean();
$size = strlen($img); // 图片大小
 
!is_dir(getcwd().$filepath)? mkdir(getcwd().$filepath):null;//生成文件夹
 
$fp2=fopen(getcwd().$filepath.$filename.$ext, "a");
fwrite($fp2,$img);
fclose($fp2);
 
return array($filepath.$filename.$ext,$size);
}
 


有防盗链的图片
 

 代码如下 复制代码
/*
* 有防盗链的图片
* $url 图片地址
* $filename 图片保存地址
* return 返回下载的图片路径和名称,图片大小
* $fromurl 来源URL,填写来源图片网址可破解防盗链
*/
function GrabImage2($url,$filepath,$filename="",$fromurl) {
 if($url=="") return false;
 
$ext=strrchr($url,".");
 if($filename=="") {
 if($ext!=".gif" && $ext!=".jpg" && $ext!=".png") return false;
 $filename=date("YmdHis");
 }
 
!is_dir(getcwd().$filepath)? mkdir(getcwd().$filepath):null;//生成文件夹
 
 $re = $this->curlg($url,$fromurl);
 $size = file_put_contents(getcwd().$filepath.$filename.$ext,$re);//返回大小
 
 return array($filepath.$filename.$ext,$size);
}

批量采集代码:

 代码如下 复制代码
/**
* 批量下载图片
*/
public function downimg(){
$keep = $this->_get("keep");//1从缓存获取2删除缓存/重新缓存
$id = $this->_get("id");
$id = $id?$id:0;
$nextid = $id+1;
if($keep!=1){
$data = M('Cjlist')->where("status=1")->select();
S("keepcjdata",$data,3600);
}else{
$data = S("keepcjdata");
}
$endid= count($data);
//echo $id;
//echo $endid;
if($endid==$id){
exit('所有图片下载完成!');
}
//echo $endid;
$data2['cover_imgurl'] = $this->imgdown2($data[$id]['cover_imgurl']);
//echo $data[$id]['thum_url'];
$data2['thum_url'] = $this->imgdown2($data[$id]['thum_url'],'thum_');//中型图片type
$data2['id']=$data[$id]['id'];
if(!$data2['thum_url'] || !$data2['cover_imgurl']){
$data2['status']=-1;
}else{
$data2['status']=2;
}
$res = M('Cjlist')->save($data2);
//$this->echosql();
if($res){
echo '下载完成ID:'.$data2['id']." 前往下一个ID下载<script>window.location.href='".U('Index/downimg')."/keep/1/id/".$nextid."'</script>";
}else{
echo '保存出错,正在重试刷新。<script>window.location.reload()</script>';
}
//dump($data2);
//dump($data);
 
}

同时还可以生成缩略图哦

 代码如下 复制代码

/*
 *图片采集保存本地生成缩略图
 *
 * */
 
 public function imgdown($picurl='http://p0.so.qhimg.com/t0129f40df5810dfaa5.jpg',$fromurl='http://image.so.com'){
 $mulu = "/".date("YmdH",time())."/";
 $reimg = $this->GrabImage2($picurl,$mulu,time(),$fromurl);
 //$img = file_get_contents($picurl);
 //echo file_put_contents('222.jpg',$img);
 //exit;
 //$reimg="/20140529/1401333398.jpg";
 //dump($reimg);
 //exit;
 if($reimg[1]<=0){
 exit("下载图片失败");
 }
 $reimg=$reimg[0];
 import('ORG.Util.Image');
 $Image = new Image();
 $imgurl = getcwd().$reimg;
 $ext=strrchr($imgurl,".");
 $thum_name = $Image->thumb($imgurl,"thum_".time().$ext,'','288','432');
 rename(getcwd()."/".$thum_name,getcwd().$mulu.$thum_name);//移动到文件夹里面
 $imginfo = $Image->getImageInfo(getcwd().$mulu.$thum_name);
 //dump($imginfo);
 $imgarr['cover_url']=$reimg;
 $imgarr['thum_url']=$mulu.$thum_name;
 $imgarr['thum_w']=$imginfo['width'];
 $imgarr['thum_h']=$imginfo['height'];
 return $imgarr;
 }

今天写一个问答系统上线之后发现有很多人发连接了,由于业务部门要我们过滤掉网站地址了,下面我给大家分享一个提取字符串url地址函数

例子

 代码如下 复制代码

$postInfo['answer2'] ='可以的,商业贷款可摊还36%,公积金贷款可摊还16%|||可以先把账户里的余额提取出来用作首付,然后每个月贷款商业贷款可摊还36%,公积金贷款可摊还16%|||可以的,现在甲类公积金是摊还比例http://www.111cn.net是工资基数的34%|||啊啊啊啊啊啊啊啊是的|||可以摊还,甲类34%
';

preg_match_all("/http:[\/]{2}[a-z]+[.]{1}[a-z\d\-]+[.]{1}[a-z\d]*[\/]*[A-Za-z\d]*[\/]*[A-Za-z\d]*/",$postInfo['answer2'],$array2);

print_r($array2);
 
if(!empty($array2[0]))
{
 foreach ($array2[0] as $k=>$v){
  $postInfo['answer2'] = str_replace($array2[0][$k],'',$postInfo['answer2'] );
 }
}

结果就为

(
    [0] => Array
        (
            [0] => http://www.111cn.net
        )

)

php中页面301跳转我们使用header()函数发送状态代码301的同时再跳转到指定页面了,实现的方法非常的简单。

注意:

301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于:
301 redirect: 301 代表永久性转移(Permanently Moved),
302 redirect: 302 代表暂时性转移(Temporarily Moved ),

例子

在php中正常的临时跳转通常使用:
 

 代码如下 复制代码
<?php
 header("Location:your_dest_url");
?>

最简单的做法

 代码如下 复制代码

$the_host = $_SERVER['HTTP_HOST'];//取得当前域名
if($the_host != 'noniu.com')//判断获取的这个域名是不是你想要的(即定向后的域名)
{
header("HTTP/1.1 301 Moved Permanently");//发出301头部
header("Location:111cn.net) //跳转到你希望的域名
exit();
}

这个还可以实现比如111cn.net 跳转到www.111cn.net 上,也就是让所有的页面都用带www的网址

 代码如下 复制代码

<?php
$the_host = $_SERVER['HTTP_HOST'];//取得当前域名
$the_url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';//判断地址后面部分
$the_url = strtolower($the_url);//将英文字母转成小写
if($the_url=="/index.php")//判断是不是首页
{
$the_url="";//如果是首页,赋值为空
}
if($the_host !== 'www.111cn.net ')//如果域名不是带www的网址那么进行下面的301跳转
{
header('HTTP/1.1 301 Moved Permanently');//发出301头部
header('Location:http://www.111cn.net '.$the_url);//跳转到带www的网址
}
?>

7、Apache下301转向代码

新建.htaccess文件,输入下列内容(需要开启mod_rewrite):

1)将不带WWW的域名转向到带WWW的域名下

 代码如下 复制代码

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^lesishu.cn [NC]
RewriteRule ^(.*)$ http://www.111cn.net /$1 [L,R=301]

2)重定向到新域名

 代码如下 复制代码

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)$ http://www.111cn.net /$1 [L,R=301]

wordpres根目录301跳转

 代码如下 复制代码

# BEGIN WordPress
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{http_host} ^111cn.net  [NC]
RewriteRule ^(.*)$ http://www.111cn.net /$1 [L,R=301]
rewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
rewriteRule ^index.php$ http://www.111cn.net / [R=301,L]
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

测试

 

php域名301转向程序代码

分析:

php 301跳转代码只适合于全php页面或单页面做跳转了,apache/iis 301跳转适用于大量的网站域名301跳转了,他们两共同点都是实现301但两者各人有优点吧,大家自行根据自己情况选择吧。

[!--infotagslink--]

相关文章

  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • PHP成员变量获取对比(类成员变量)

    下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • php 获取用户IP与IE信息程序

    php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • php获取一个文件夹的mtime的程序

    php获取一个文件夹的mtime的程序了,这个就是时间问题了,对于这个问题我们来看小编整理的几个例子,具体的操作例子如下所示。 php很容易获取到一个文件夹的mtime,可以...2016-11-25
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • 如何获取网站icon有哪些可行的方法

    获取网站icon,常用最简单的方法就是通过website/favicon.ico来获取,不过由于很多网站都是在页面里面设置favicon,所以此方法很多情况都不可用。 更好的办法是通过google提供的服务来实现:http://www.google.com/s2/favi...2014-06-07
  • jquery如何获取元素的滚动条高度等实现代码

    主要功能:获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 :$(window).width(); 获取页面的文档高度 $(document).height(); 获取页面的文档宽度 :$(document).width();...2015-10-21
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • PHP传值到不同页面的三种常见方式及php和html之间传值问题

    在项目开发中经常见到不同页面之间传值在web工作中,本篇文章给大家列出了三种常见的方式。接触PHP也有几个月了,本文总结一下这段日子中,在编程过程里常用的3种不同页面传值方法,希望可以给大家参考。有什么意见也希望大...2015-11-24
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • jquery获取div距离窗口和父级dv的距离示例

    jquery中jquery.offset().top / left用于获取div距离窗口的距离,jquery.position().top / left 用于获取距离父级div的距离(必须是绝对定位的div)。 (1)先介绍jquery.offset().top / left css: 复制代码 代码如下: *{ mar...2013-10-13
  • Jquery 获取指定标签的对象及属性的设置与移除

    1、先讲讲JQuery的概念,JQuery首先是由一个 America 的叫什么 John Resig的人创建的,后来又很多的JS高手也加入了这个团队。其实 JQuery是一个JavaScript的类库,这个类库集合了很多功能方法,利用类库你可以用简单的一些代...2014-05-31
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • jQuery实现切换页面过渡动画效果

    直接为大家介绍制作过程,希望大家可以喜欢。HTML结构该页面切换特效的HTML结构使用一个<main>元素来作为页面的包裹元素,div.cd-cover-layer用于制作页面切换时的遮罩层,div.cd-loading-bar是进行ajax加载时的loading进...2015-10-30
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

    废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07