当前位置:  编程技术>php
本页文章导读:
    ▪php 301转向的实现方法分享      本节内容: php实现全站的所有内页的301转向 一,什么是301转向 301转向(或叫301重定向,301跳转)是当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的.........
    ▪PHP各种排序算法的实现汇总      本节内容: php排序算法的实现代码 为大家分享PHP各种排序算法的实现,带注释版本,很有用的东西,建议收藏。 例子:   代码示例: <?php // 冒泡排序 function BubbleSort($arr) {     // 获.........
    ▪php入门教程(二十一) php日期与时间函数      本节内容: php日期与时间函数 PHP提供了很多的处理日期和时间的函数,包括time()、date()、mktime()、checkdate()、microtime()、strtotime()等,详细的日期时间函数列表可以查看php手册。 下面来介绍下.........

[1]php 301转向的实现方法分享
    来源: 互联网  发布时间: 2013-12-24

本节内容:
php实现全站的所有内页的301转向

一,什么是301转向

301转向(或叫301重定向,301跳转)是当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。
其它常见的状态码还包括,200表示一切正常,404网页找不到,302暂时转向等。

二,网站做转向的方法

网址转向方法主要包括:301转向,302转向,JavaScript转向,PHP/ASP/CGI转向,META REFRESH网页META刷新,等。302转向可能会有URL规范化问题。其它方法都是常用的作弊手法,当然不是说不可以正当地用,方法本身没有错,但被作弊者用多了,搜索引擎对这些可疑的转向都很敏感。何必冒险呢。

三,301转向的必要性
当网页A用301重定向转到网页B时,搜索引擎可以肯定网页A永久的改变位置,或者说实际上不存在了,搜索引擎就会把网页B当作唯一有效目标。好处是,
第一,没有网址规范化问题
第二,也很重要的,网页A的PR网页级别会传到网页B
第三,收录不会因为域名更换没有.

下面来看一个php 301重定向的例子,如下:
 

代码示例:
<?php
$url="http://www.".$_SERVER["REQUEST_URI"];
header("HTTP/1.1 301 Moved Permanently");
header ("Location:$url");
?>

以Discuz6.0为例子
index.php
archiver/index.php
forumdisplay.php
viewthread.php
space.php
tag.php
blog.php
找到原来的老的域名中的上列文件,加入上面的代码,然后更新即可。

使用curl测试下:
 

代码示例:
#curl -I http://www.bbbb.com/sssss.php
HTTP/1.0 301 Moved Permanently
Date: Tue, 06 May 2008 06:27:39 GMT
Server: apache
Location: http://www./sssss.php
 

如见到上面的HTTP/1.0 301 Moved Permanently时,就表示可以了.下次只要点相关的链接,会自动转向新的链接,搜索引擎也会自动更新成新的链接。

301重定向实现方法,及对网站优化的作用

301重定向(也叫301转向,301跳转)对网站优化所起的作用是不可忽视的,尤其是针对SE(搜索引擎)处理网站页面权重的时候,更加显得重要。网站换了新域名,默认首页需要跳转等,从SEO角度来说,我们都建议使用301重定向,而不是JS跳转或META REFRESH或302转向,这些很容易引来SE的惩罚。

 什么是301重定向呢? 

301重定向是当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。其它常见的状态码还包括,200表示一切正常,404网页找不到,302暂时转向,等等。 

为什么要用301转向? 

网址转向方法主要包括:301转向,302转向,JavaScript转向,PHP/ASP/CGI转向,META REFRESH网页META刷新等。302转向可能会有URL规范化问题。其它方法都是常用的作弊手法,当然不是说不可以正当地用,方法本身没有错,但被作弊者用多了,搜索引擎对这些可疑的转向都很敏感。何必冒险呢。 

关于301转向和网址规范化问题,大家可以去阅读下ZAC写的文章。本文,仅仅讨论在ASP环境下,如何设置301重定向问题;其他语言亦可参考。 

网站的首页一般有以下几种: 

http:// 
http://www. 
http:///index.asp 
http://www./index.asp 
…… 

很自然的,以上的这些网址形式都指向到了一个网站,如果在搜索引擎中都启用这些形式,那么,网页权重,PR都会分散到这几个网址上,虽然,它们都是一个网站,而这不是我们想要的结果。那么,如何将以上的首页形式都定向到自己想要的网址上呢,比如http://www.,从而使得这些分散的网页权重,PR都集中到www.上。这里就需要使用301永久重定向了。 

ASP语言下,需要在默认首页,如index.asp顶部最上方加入以下代码: 
 

代码示例:
<% 
Dim dm,sn 
dm=Request.ServerVariables("Server_name")  '获取域名 
'这里的3是指www的长度 
if left(dm,3)<>"www" then 
Response.Status="301 Moved Permanently"  
Response.AddHeader "Location", "http://www." 
Response.End 
end if 
%> 
 

也可以根据实际需要对本代码进行适当的修改以适合你需求的样式。本代码自动校验没有输入www的,301跳转到www.这个网址上,从而使得网页权重得到累加,达到SEO优化的目的。 

问题:
如果有链接指向到http://www./index.asp(比如站内链接),那么搜索引擎也同样会给这个网址形式加分,虽然index.asp是默认首页,但我们希望的是把所有权重都给与http://www.这个形式。有人说,这两个形式不是都一样吗?不一样。比如:http://www.的PR为0,而http://www./index.asp的PR为2。从这点可以看出,SE是给与是否有index.asp的网址形式以不同的权重的。而使用Request.ServerVariables("SCRIPT_NAME")或Request("url")获取到的后缀无论输入时是否带有index.asp都一律返回index.asp,从而导致无法判断,也无法使用301重定向,当然这是指仅asp语言环境。 

解决方法:
利用js获取当前网址window.location.href,然后把这个当前网址写入cookies;asp读取这个cookies,从而判断网址中是否包含index.asp,如果包含,就使用301重定向。建议:在任何链接中避免有直接指向index.asp的形式,包括外链及内链,尤其是内链。这只是一个折中的方法。 

利用js通过cookies给asp传递网址: 
 

代码示例:

<script language="javascript">  
var url=window.location.href.toLowerCase(); //小写  
document.cookie = "urlck" + "=" + escape(url);  
</script>  

<%  
Dim sn  
sn=request.cookies("urlck")  '获取后缀  
response.cookies("urlck")=""  '清空cookies  

if right(sn,11)="default.asp" then  
Response.Status="301 Moved Permanently"   
Response.AddHeader "Location", "http://www."  
Response.End  
end if  
%> 

但是很遗憾,如果这些网址形式不是实际上的人为输入,而是搜索引擎访问的结果,搜索引擎又是忽略JS的,也就是说,js里赋值的cookie并不能被SE识别,从而导致也无法使用301跳转。这个问题有待解决。 

其他语言下的301重定向: 

1、Unix/Linux+Apache主机,在.htaccess文件中增加301转向指令,采用 mod_rewrite 技术,如:PHP代码 
 

代码示例:
Options +FollowSymLinks       
RewriteEngine on       
RewriteCond %{HTTP_HOST} ^www. [NC]       
RewriteRule ^(.*)$ http:///$1 [L,R=301]    

2、Window+IIS主机,在服务器软件的系统管理员配置中设置,方法: 
打开Internet信息服务管理器,在欲重定向的网页或目录上按右键,选中“重定向到URL”,在对话框中输入目标页面的地址,记得选中“资源的永久重定向”->“应用” 。 

3、用PHP/ASP .NET实现301转向(HTML无法做301转向),方法如下: 

1)用PHP实现 
 

代码示例:
<? Header( "HTTP/1.1 301 Moved Permanently" );      
Header( "Location: http://" );?>    

2)用ASP.NET实现 
ASP/Visual Basic代码 
 

代码示例:
<script runat="server">      
private void Page_Load(object sender, System.EventArgs e)      
{      
Response.Status = "301 Moved Permanently";      
Response.AddHeader("Location","http://");      
}      
</script>    

经过这些设置后,301转向应该可以配置OK啦,如果想检查一下是否正确,则可以使用网上提供Server Header检查工具,如Check Server Headers Tool - HTTP Status Codes Checker。 

用以上检测http状态码工具,可以做个简单的检查,如检查http://,返回的结果: 
 

#1 Server Response: http:// 
HTTP Status Code: HTTP/1.1 301 Moved Permanently 
Connection: close 
Date: Mon, 25 Feb 2008 01:54:09 GMT 
Server: Microsoft-IIS/6.0 
X-Powered-By: ASP.NET 
Location: http://www. 
Content-Length: 0 
Content-Type: text/html 
Set-Cookie: ASPSESSIONIDACBCSBDR=FCJELLLALFNPOCMBNMOLMJHN; path=/ 
Cache-control: private 
Redirect Target: http://www. 

#2 Server Response: http://www. 
HTTP Status Code: HTTP/1.1 200 OK 
Connection: close 
Date: Mon, 25 Feb 2008 01:54:13 GMT 
Server: Microsoft-IIS/6.0 
X-Powered-By: ASP.NET 
Content-Length: 29330 
Content-Type: text/html 
Set-Cookie: ASPSESSIONIDACBCSBDR=GCJELLLAECPBADKMADAJOBLC; path=/ 
Cache-control: private 
 

注意,以上返回的结果中第二行“HTTP Status Code: HTTP/1.1 301 Moved Permanently”,说明这个网址采用了301永久重定向功能了,设置成功。


    
[2]PHP各种排序算法的实现汇总
    来源: 互联网  发布时间: 2013-12-24

本节内容:
php排序算法的实现代码

为大家分享PHP各种排序算法的实现,带注释版本,很有用的东西,建议收藏。

例子:
 

代码示例:

<?php
// 冒泡排序
function BubbleSort($arr) {
    // 获得数组总长度
    $num = count($arr);
    // 正向遍历数组
    for ($i = 1; $i < $num; $i++) {
        // 反向遍历
        for ($j = $num - 1; $j >= $i ; $j--) {
            // 相邻两个数比较
            if ($arr[$j] < $arr[$j-1]) {
                // 暂存较小的数
                $iTemp = $arr[$j-1];
                // 把较大的放前面
                $arr[$j-1] = $arr[$j];
                // 较小的放后面
                $arr[$j] = $iTemp;
            }
        }
    }
    return $arr;
}

// 交换法排序
function ExchangeSort($arr){
    $num = count($arr);
    // 遍历数组
    for ($i = 0;$i < $num - 1; $i++) {
        // 获得当前索引的下一个索引
        for ($j = $i + 1; $j < $num; $j++) {
            // 比较相邻两个的值大小
            if ($arr[$j] < $arr[$i]) {
                // 暂存较小的数
                $iTemp = $arr[$i];
                // 把较大的放前面
                $arr[$i] = $arr[$j];
                // 较小的放后面
                $arr[$j] = $iTemp;
            }
        }
    } // www.
    return $arr;
}

// 选择法排序
function SelectSort($arr) {
    // 获得数组总长度
    $num = count($arr);
    // 遍历数组
    for ($i = 0;$i < $num-1; $i++) {
        // 暂存当前值
        $iTemp = $arr[$i];
        // 暂存当前位置
        $iPos = $i;
        // 遍历当前位置以后的数据
        for ($j = $i + 1;$j < $num; $j++){
            // 如果有小于当前值的
            if ($arr[$j] < $iTemp) {
                // 暂存最小值
                $iTemp = $arr[$j];
                // 暂存位置
                $iPos = $j;
            }
        }
        // 把当前值放到算好的位置
        $arr[$iPos] = $arr[$i];
        // 把当前值换成算好的值
        $arr[$i] = $iTemp;
    }
    return $arr;
}

// 插入法排序
function InsertSort($arr){
    $num = count($arr);
    // 遍历数组
    for ($i = 1;$i < $num; $i++) {
        // 获得当前值
        $iTemp = $arr[$i];
        // 获得当前值的前一个位置
        $iPos = $i - 1;
        // 如果当前值小于前一个值切未到数组开始位置
        while (($iPos >= 0) && ($iTemp < $arr[$iPos])) {
            // 把前一个的值往后放一位
            $arr[$iPos + 1] = $arr[$iPos];
            // 位置递减
            $iPos--;
        }
        $arr[$iPos+1] = $iTemp;
    }
    return $arr;
}

// 快速排序
function QuickSort($arr){
    $num = count($arr);
    $l = $r = 0;
    // 从索引的第二个开始遍历数组
    for ($i = 1;$i < $num; $i++) {
        // 如果值小于索引1
        if ($arr[$i] < $arr[0]) {
            // 装入左索引数组(小于索引1的数据)
            $left[] = $arr[$i];
            $l++;
        } else { // www.
            // 否则装入右索引中(大于索引1的数据)
            $right[] = $arr[$i];
            $r++; //
        }       
    }
    // 如果左索引有值 则对左索引排序
    if($l > 1) {
        $left = QuickSort($left);
    }
    // 排序后的数组
    $new_arr = $left;
    // 将当前数组第一个放到最后
    $new_arr[] = $arr[0];
    // 如果又索引有值 则对右索引排序
    if ($r > 1) {
        $right = QuickSort($right);
    }
    // 根据右索引的长度再次增加数据
    for($i = 0;$i < $r; $i++) {
        $new_arr[] = $right[$i];
    }
    return $new_arr;
}
?>


    
[3]php入门教程(二十一) php日期与时间函数
    来源: 互联网  发布时间: 2013-12-24

本节内容:
php日期与时间函数

PHP提供了很多的处理日期和时间的函数,包括time()、date()、mktime()、checkdate()、microtime()、strtotime()等,详细的日期时间函数列表可以查看php手册。

下面来介绍下,php中的日期与时间函数。

1,time()
time()函数,它返回当前的UNIX时间戳。什么是UNIX时间?
所谓的UNIX时间戳是从Unix 纪元  (格林威治时间1970年1月1日00:00:00)到当前时间的秒数。 time()函数的实例很简单,直接调用该函数就可以,
例子:
 

代码示例:
<?php
echo time(); // return "1264668961"
?> 

2,date()

需要将UNIX时间戳转换为可阅读的当前时间,就要用到date()函数。

date函数的原型如下:
 

date() 函数的第一个参数规定了如何格式化日期/时间。它使用字母来表示日期和时间的格式。这里列出了一些可用的字母:
d - 月中的天 (01-31)
m - 当前月,以数字计 (01-12)
Y - 当前的年(四位数)

例子:
 

代码示例:
<?php 
echo date("Y/m/d"); 
echo "<br />"; 
echo date("Y.m.d"); 
echo "<br />"; 
echo date("Y-m-d"); 
?> 

输出:
2013/11/21
2013.11.21
2013-11-21

3,mktime()
mktime() 函数返回一个日期的 Unix 时间戳。

参数说明:
 

hour (可选) 规定小时。
minute (可选)   规定分钟。
second (可选)   规定秒。
month (可选)    规定用数字表示的月。
day (可选)      规定天。
year (可选)     规定年。在某些系统上,合法值介于 1901 - 2038 之间。不过在 PHP 5 中已经不存在这个限制了。
is_dst (可选)   如果时间在日光节约时间(DST)期间,则设置为1,否则设置为0,若未知,则设置为-1。
参数总是表示 GMT 日期,因此 is_dst 对结果没有影响。
参数可以从右到左依次空着,空着的参数会被设为相应的当前 GMT 值。

注释:
自 5.1.0 起,is_dst 参数被废弃。因此应该使用新的时区处理特性。
自 5.1.0 器,该函数自动校正越界的输入,而之前的版本会返回false
mktime() 函数对于日期运算和验证非常有用。它可以自动校正越界的输入

例子:
 

代码示例:
<?php 
echo(date("M-d-Y",mktime(0,0,0,12,36,2001))); 
echo(date("M-d-Y",mktime(0,0,0,14,1,2001))); 
echo(date("M-d-Y",mktime(0,0,0,1,1,2001))); 
echo(date("M-d-Y",mktime(0,0,0,1,1,99))); 
?> 

输出:
Jan-05-2002
Feb-01-2002
Jan-01-2001
Jan-01-1999
 
4,checkdate()
checkdate() 函数验证一个格里高里日期。
如果指定的值合法,则该函数返回 true,否则返回 false。
日期在下列情况下为合法:
month 介于且包括 1 - 12
Day 的值在给定的 month 所应该具有的天数范围之内,闰年已经考虑进去了。
year 介于且包括 1 到 32767
    
语法  
checkdate(month,day,year)
参数
 

参数  描述
month  必需。规定月。
day  必需。规定日。
year  必需。规定年。

例子:
 

代码示例:
<?php 
var_dump(checkdate(12,31,2000)); 
var_dump(checkdate(2,29,2003)); 
var_dump(checkdate(2,29,2004)); 
?>

输出:
bool(true)
bool(false)
bool(true)

>>> 查看更多 php入门教程 <<<


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3