require(),include(),require_once()和include_once()区别

面试中最容易提到的一个PHP的问题,我想和大家共勉一下: require()和include()有许多相似之处,也有些不同。理解它们的不同点非常重要,否则很容易犯错误。 我把这两个语句放在一起介绍,读者可以比较学习。 1.require()语句 require()语句用于指定的文件代替语句本身,就象C语言中的include()语句一样。如果php配置文件php.ini中的URL fopen wrappers 是打开的(默认情况下是打开的),就可以使用URL来指定文件的位置从而实现远程文件的调用。 有一点就是使用require()和include()语句时要特别的注意。那就是在被包含的文件中,处理器是按照html模式来解释其中的内容的,处理完被包含的内容后又恢复到php模式。所以如果需要在被包含文件中使用php语法,就要使用正确的php开始和结束标记来把这些语句包含进去。 require()和include()知识php中的一种语言特性,而不是函数。它们和函数有许多不同的地方。 比如:require()所包含的文件中不能包含控制结构,而且不能使用return这样的语句。在require()所包含的文件中使用return语句会产生处理错误。 不象include()语句,require()语句会无条件地读取它所包含的文件的内容,而不管这些语句是否执行。所以如果你想按照不同的条件包含不同的文件,就必须使用include()语句。当然,如果require()所在位置的语句不被执行,require()所包含的文件中的语句也不会被执行。 require()不能在循环体中根据条件的不同而包含不同的文件。require()语句只会在第一次执行时调用它所包含的文件中的内容替换本身这条语句,当再次被执行时只能执行第一次所包含的语句。但是include()语句可以在循环体中来包含不同的文件。 require()语句中的变量继承require()语句所在位置的变量作用域。所有在require()语句的位置可以访问的变量,在require()语句所包含的文件中都可以访问。如果require()语句位于一个函数内部,那么被包含文件内的语句都相当于定义在函数内部。 require()语句在PHP程序执行前就会将使用require引用的文件读入,因此require通常放到程序的开始处。因此要特别注意一点,require语句有一点强,不管程序是否真的需要引用的文件,只要你使用require语句,它都会把他们包含进来!即使你是在条件控制语句中使用这个函数进行包含,那怕是那个条件不为真,引用文件也会被包含进来!形成了僵尸,在运行过程中这些僵尸是不起任何可见作用的,但是很明显它会加重负担,所以这一点要特别注意!如果使用require语句发生了包含错误,那么程序将输出出错信息并停止运行!! 如果require()语句通过声明文件的URL来包含远程文件,而且远程服务器按照php代码来解释该文件的话,本地php文件中所包含的内容是在远程服务器上处理以后的结果。例如: /* 这个例子假设some_server服务器可以解释.php文件,而不对.txt文件进行解释。在远程文件中 需要变量$varfirst和$varsecond */ /*不能正确执行,远程服务器不处理.txt文件*/ require("http://some_server/file.txt?varfirst=1&amp;varsecond=2"); /不正确,这样只能在本地机上寻找file.php文件/ require(“file.php?varfirst=1&amp;varsecond=2”); /正确的语句/ require(“http://some_server/file.php?varfirst=1&amp;varsecond=2”); $varfirst=1; $varsecond=2; require(“file.txt”); /正确的语句/ require(“file.php”); /正确的语句/   本来在php3.0中,require()所包含的文件可以使用return语句,但条件是return语句不能出现在{}内部,而必须出现在被包含文件的全局范围内。在php4.0中已经取消了require()的这个功能,但是仍然可以使用include()来实现。 2.include()语句 include()语句和require()语句有许多相同的地方。凡是在上边require()语句中没有明确说明不能适用于include()的部分外,require()语句的功能完全适用于include()语句。下边介绍require()语句所没有的include()语句的功能和特点。 include语句只有在被执行时才会读入要包含的文件。在错误处理方便,使用include语句,如果发生包含错误,程序将跳过include语句,虽然会显示错误信息但是程序还是会继续执行! php处理器会在每次遇到include()语句时,对它进行重新处理,所以可以根据不同情况的,在条件控制语句和循环语句中使用include()来包含不同的文件。 <?php $files=array('first.php','second.php','third.php'); for($i=0;$i&lt;count($files);$i++) { include $files[$i]; } ?>   ...

2013-11-11 · 2 min · Duke Yin

自由生成缩略图尺寸PHP脚本 timthumb

Wordpress默认支持生成大中小三种尺寸的缩略图,但是很多时候我们需要更多不同长宽尺寸的缩略图以适应主题。 TimThumb仅仅是一个PHP文件,调用此文件并将图片文件的URL作为此PHP的参数,即可自由设定输出图片缩略图的大小,实在是很方便: 下载地址:http://code.google.com/p/timthumb/ SVN check得到timthumb.php,将此文件存在空间,需要调用缩略图的地方套用如下格式: 例如 timthumb.php 的位置是“http://www.abc.com/timthumb.php” 需要缩略的图片位置是:“http://www.abc.com/a.jpg” <img src="http://www.abc.com/timthumb.php?src=http://www.abc.com/a.jpg&amp;w=300&amp;h=500" />   如此一来输出的图片大小就是 长300px 宽500px的图片。

2013-10-17 · 1 min · Duke Yin

linux系统主机启用伪静态urlrewrite重写

由于搜索引擎偏爱于收录静态页(html),因此目前越来越多的网站使用了伪静态urlrewrite技术,下面介绍下如何在万网linux翔云主机上启用伪静态。 1.服务器初始安装的apache默认已经内建了mod_rewrite模块,不需要重复加载.so文件,服务器默认支持伪静态功能。 2.在apache配置文件中加入以下配置: < Directory /虚拟站点路径> AllowOverride All < /Directory> 其中虚拟站点路径需要替换为您的站点的目录文件夹的路径,如/data/home/website2等。 例如: < Directory /data/home/website2> AllowOverride All < /Directory> 如果是默认站点/var/www/htdocs的话,由于已经有了< Directory>的配置,因此不能重复添加,找到默认站点的AllowOverride None 修改成 AllowOverride All 即可。 修改完毕后需要重启apache才能生效: /var/www/bin/apachectl restart 至此对应的站点已经可以支持伪静态了,站点目录下的.htaccess文件将起到对应的静态到动态的转换作用。 附AllowOverride的相关参数说明 http://httpd.apache.org/docs/2.0/mod/core.html#allowoverride 万网的云主机直接用默认root可以登录FTP,此账号才有权限修改Apache的httpd.conf

2013-10-10 · 1 min · Duke Yin

WordPress不同分类下的文章使用不同文章页模板样式

我们知道,有很多企业网站都用wordpress来做站,而企业站的新闻和产品,这是时常都需要更新的,所以在wordpress中,这些新闻和产 品都必须是文章类型,而不能是页面。所以,一个single.php是不够用的,所以往往我们需要新建single-post.php和single- pro.php,一个显示新闻,一个显示产品,各有各的样式。但wordpress能实现这种效果吗?答案是肯定的,而具体的功能实现如下: WORDPRESS读取一篇文章,首先调用single.php,所以我们在single.php加入条件判断语句,最常用的是 in_category()函数,可以判断文章在哪个分类下,调用哪个single模板,但in_category()有局限性,不能判断子分类和子分类 以下的分类,如产品分类,底下可能有数十种分类,而in_category()只能单一写死分类ID。 下面就是具体实现代码有需要的童鞋就拿走吧。代码本人已亲测可放心使用,哈。。。 <?php if ( in_category('post') ) { include(TEMPLATEPATH . '/single-post.php'); } // elseif 在一次判断 想在加判断复制代码 elseif ( in_category('plugin') ) { // plugin 为category的别名 include(TEMPLATEPATH . '/single-plugin.php'); } // elseif 结束 else { include(TEMPLATEPATH . '/single-all.php'); } ?>   ...

2013-10-02 · 1 min · Duke Yin

用get_the_date代替the_date

wordpress中文章发布时间不显示?用get_the_date代替the_date 在主题中部分地方使用the_date函数来显示文章发布的时间时,竟然发生不显示时间的情况,再仔细看了一下这些文章,有些都是经过几次修改和保存的,可能是由于the_date只是显示文章第一次发布时的时间,于是我用echo get_the_date来替换它,就轻松吧问题解决了。由于没有仔细去看数据库和函数源代码,原因暂时无从得知。 <?php the_date('Y-m-d'); ?> <?php echo get_the_date('Y-m-d'); ?>    

2013-10-02 · 1 min · Duke Yin

获取Thumbnial的URL

显示WordPress特色图像(Featured Image)只需要调用the_post_thumbnail()函数,但这个函数默认显示的结构可能不符合我们的需求,所以需要一种方式可以直接获取特色图像或者说Thumbnail的URL地址。 获取Thumbnail的URL 在Loop中获取 $img_id = get_post_thumbnail_id(); $img_url = wp_get_attachment_image_src($img_id); $img_url = $img_url[0]; echo $img_url; 在Loop外部获取 $img_id = get_post_thumbnail_id(35); // 35 being the ID of the Post $img_url = wp_get_attachment_image_src($img_id); $img_url = $img_url[0]; 获取Thumbnail的宽高 如果你需要知道图片的高度和宽度,可以这样 $img_width = $img_url[1]; // Get the width $img_height = $img_url[2]; // Get the height 这里主要用到了wp get attachment image src()函数,你可以到WordPress官方的Codex了解更多关于该函数的信息

2013-10-02 · 1 min · Duke Yin