本节主要内容:
PHP中include与require的用法区别
在PHP编程中,include()与require()的功能相同,include(include_once) 与 require(require_once)都是把把包含的文件代码读入到指定位置来。
二者在用法上的区别:(include()是有条件包含函数,而require()则是无条件包含函数)
1,使用方式不同
(1) require 的使用方法如 require("requireFile.php"); 。这个函式通常放在 PHP 程式的最前面,PHP 程式在执行前,就会先读入 require 所指定引入的档案,使它变成 PHP 程式网页的一部份。常用的函式,亦可以这个方法将它引入网页中。引入是无条件的,发生在程序执行前,不管条件是否成立都要导入(可能不执行)。
(2) include 使用方法如 include("includeFile.php"); 。这个函式一般是放在流程控制的处理区段中。PHP 程式网页在读到 include 的档案时,才将它读进来。这种方式,可以把程式执行时的流程简单化。引入是有条件的,发生在程序执行时,只有条件成立时才导入(可以简化编译生成的代码)。
例1,如果变量$somgthing为真,则将包含文件somefile:
include("somefile");
}
例2,但不管$something取何值,将把文件somefile包含进文件里:
require("somefile");
}
例3,充分说明了这两个函数之间的不同。
while ($i < 3) {
require("somefile.$i");
$i++;
}
在这段代码中,每一次循环时,程序都将把同一个文件包含进去。
从代码中,可以看出这段代码希望在每次循环时,将不同的文件包含进来。
如果要完成这个功能,必须求助函数include():
while ($i < 3) {
include("somefile.$i");
$i++;
}
2,执行时报错方式不同
include和require的区别:
include引入文件时,如果碰到错误,会给出提示,并继续运行下边的代码,require引入文件时,如果碰到错误,会给出提示,并停止运行下边的代码。
例子:
写两个php文件,名字为test1.php 和test2.php,注意相同的目录中,不要存在一个名字是test3.php的文件。
test1.php
include (”test3.php”);
echo “abc”;
?>
test2.php
require (”test3.php”)
echo “abc”;
?>
代码说明:
浏览第一个文件,因为没有找到test999.php文件,所以出现了报错信息,同时,报错信息的下边显示了abc,你看到的可能是类似下边的情况:
Warning: include(test3.php) [function.include]: failed to open stream: No such file or directory in D:\WebSite\test.php on line 2
Warning: include() [function.include]: Failed opening ‘test3.php' for inclusion (include_path='.;C:\php5\pear') in D:\WebSite\test.php on line 2
abc (下面的被执行了)
浏览第二个文件,因为没有找到test3.php文件,所以出现了报错信息,但是,报错信息的下边没有显示abc,你看到的可能是类似下边的情况:
Warning: require(test3.php) [function.require]: failed to open stream: No such file or directory in D:\WebSite\test2.php on line 2
Fatal error: require() [function.require]: Failed opening required ‘test3.php' (include_path='.;C:\php5\pear') in D:\WebSite\test.php on line 2
下面的未被执行,直接结束。
总之,include时执行时调用的,是一个过程行为,有条件的,而require是一个预置行为,无条件的。
301转向
301转向(或叫301重定向,301跳转)是当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。
其它常见的状态码还包括,200表示一切正常,404网页找不到,302暂时转向等。
为什么要做网址转向?
除了前面介绍过的网址规范化问题外,还有很多需要做网址转向的情形。
比如,为保护版权,你拥有不同TLD的多个域名:
company.net
company.org
company.com.cn
company.cn
等等。
这些域名全部指向一个网站。如用company.com为主域名,其它域名就可以转向到company.com。
或注册了公司全称域名longcompanyname.com,但太长,也注册了缩写域名方便用户记住lcn.com,其中一个做主域名,另一个就可以转向到主域名。
为什么要用301转向?
网址转向方法主要包括:301转向,302转向,JavaScript转向,PHP/ASP/CGI转向,META REFRESH网页META刷新,等。302转向可能会有URL规范化问题。其它方法都是常用的作弊手法,当然不是说不可以正当地用,方法本身没有错,但被作弊者用多了,搜索引擎对这些可疑的转向都很敏感。何必冒险呢。
当网页A用301重定向转到网页B时,搜索引擎可以肯定网页A永久的改变位置,或者说实际上不存在了,搜索引擎就会把网页B当作唯一有效目标。好处是,第一,没有网址规范化问题,第二,也很重要的,网页A的PR网页级别会传到网页B。
很多时候其它网站会链接到:
http://domainname.com
http://www.domainname.com/index.html
http://domainname.com/index.html
而不是希望的:
http://www.domainname.com
这样链接的PR也会传递到所有URL,如果你用301转向把前三个URL转到:
http://www.domainname.com
PR也就集中在网页http://www.domainname.com了。
怎样判断网站有网址规范化问题?
英语中有句话,东西没坏就别修理。很多网站没做301转向排名也没影响,那就别动它。
如果你觉得网站排名没有预想的好,可以看看是否有网址规范化问题:
1) 查一下这些URL是否都有差不多的PR值和网页快照:
http://www.domainname.com/index.html
http://domainname.com/index.html
http://www.domainname.com
如果是,那可能有问题。
2)搜一下site:domain.com看是否结果中有多个主页版本。
3)你的网站是否在Google有大量网页被标为“ 补充材料”(Supplemental Result)。一般认为被归为“ 补充材料”是网址规范化问题的征兆。
怎样做301转向
如果你用的是Unix/Linux主机,可以用文件(Unix/Linux中用于目录特定指令如密码,转向,错误处理等的文件)。
比如把/old.htm转到http://www.domain.com/new.htm,可以用这个指令:
redirect 301 /old.htm http://www.domain.com/new.htm 或redirect permanent /old.htm http://www.domain.com/new.htm
如果要把所有http://domain.com形式的URL用301重定向转到 http://www.domain.com,包括:
http://domain.com/about.htm
转到 http://www.domain.com/about.htm及http://domain.com/dir/index.htm
转到 http://www.domain.com/dir/index.htm
等等,还要用到mod_rewrite:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
如果你用的是 Windows主机,应该在控制面板做301转向设定。
编辑推荐:
php伪静态 URL REWRITE重写规则介绍
php URL rewrite路径重写一例
补充 :
在网址规范化评论里回答石头王的问题,可能对大家有帮助:
据我所知,HTML无法做301转向。在HTML里只能做JS或META REFRESH,但不是301转向。HTML一被读取,就已经返回200 OK状态码了。
如果你的页面是ASP或PHP还可以做301转向:
ASP:
<%
Response.Status=”301 Moved Permanently” Response.AddHeader “Location”, ” http://www.domain.com”
>
PHP:
Header( “Location: http://www.domain.com” );
?>
另外,DOThtaccess文件只是一个普通文字文件,你用Notepad建这个文件,放上指令,存在你帐号的根目录下就行了。不需要修改Apache。
问:网页用301重新定向后搜索引擎多久能处理
网页用301重新定向后原搜索引擎收录老域名的页面是不是会转交给定向到的新域名。搜索引擎收录老域名的页面会发生什么变化,比如说
site:www.xxx.com 后老域名里的东西会转到新域名下吗,要多久大概。
答:如果您的旧网址使用 HTTP 301(永久)重定向指向您的新网站,搜索引擎漫游时会自动获知新网址,并在六到八周内自动进行更新。
301重定向可促进搜索引擎优化效果
从搜索引擎优化角度出发,301重定向是网址重定向最为可行的一种办法。当网站的域名发生变更后,搜索引擎只对新网址进行索引,同时又会把旧地址下原有的外部链接如数转移到新地址下,从而不会让网站的排名因为网址变更而收到丝毫影响。同样,在使用301永久性重定向命令让多个域名指向网站主域时,亦不会对网站的排名产生任何负面影响。
1,输出月,日年
$a = getdate();
printf('%s %d, %d',$a['month'],$a['mday'],$a['year']);
?>
2,getdate()使用指定的timestamp
$a = getdate(163727100);
printf('%s %d, %d',$a['month'],$a['mday'],$a['year']);
?>
3,getdate()获取当前日期
<head>
<title>getdate()获取当前日期-www.</title>
</head>
<body>
<div>
<?php
$date_array = getdate();
foreach ( $date_array as $key => $val ) {
print "$key = $val<br/>";
}
?>
<hr/>
<p>
<?
print "Today's date: ";
print $date_array['mon']."/".$date_array['mday']."/".$date_array['year'];
?>
</p>
</div>
</body>
</html>
附,getdate( )函数的返回值的对应关系
seconds Seconds
minutes Minutes
hours Hours
mday Day of the month
wday Day of the week, numeric (Sunday is 0, Saturday is 6)
mon Month, numeric
year Year, numeric (4 digits)
yday Day of the year, numeric (e.g., 299)
weekday Day of the week, textual, full (e.g., "Friday")
month Month, textual, full (e.g., "January")
0 Seconds since epoch (what time( ) returns)