PHP学习:include()和require()的区别

 更新时间:2016年11月25日 16:16  点击:2244

include()和require()的区别 这相信是PHP中最基本的问题了,也是很多公司面试时必考的题呵呵。
给大家复习一下:
require() :如果文件不存在,会报出一个fatal error.脚本停止执行
include() : 如果文件不存在,会给出一个 warning,但脚本会继续执行
这里特别要注意的是:
使用include()文件不存在时,脚本继续执行,这种情况只出现在PHP 4.3.5之前,这一点,往往被人忽视。
推荐使用require_once()和include_once(),可以检测文件是否有重复包含。


国内不少论坛都存在跨站脚本漏洞,国外也很多这样的例子,甚至Google也出现过,不过在12月初时修正了。(编者注:关于跨站脚本漏洞攻击,读者可参阅《详解XSS跨站脚本攻击》)。跨站攻击很容易就可以构造,而且非常隐蔽,不易被查觉(通常盗取信息后马上跳转回原页面)。
  如何攻击,在此不作说明(也不要问我),主要谈谈如何防范。首先,跨站脚本攻击都是由于对用户的输入没有进行严格的过滤造成的,所以我们必须在所有数据进入我们的网站和数据库之前把可能的危险拦截。针对非法的HTML代码包括单双引号等,可以使用htmlentities() 。
 

<?php
$str = "A 'quote' is <b>bold</b>";
// Outputs: A 'quote' is <b>bold</b>
echo htmlentities($str);
// Outputs: A 'quote' is <b>bold</b>
echo htmlentities($str, ENT_QUOTES);
?>

  这样可以使非法的脚本失效。
  但是要注意一点,htmlentities()默认编码为 ISO-8859-1,如果你的非法脚本编码为其它,那么可能无法过滤掉,同时浏览器却可以识别和执行。这个问题我先找几个站点测试后再说。
  这里提供一个过滤非法脚本的函数:

function RemoveXSS($val) {
 // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
 // this prevents some character re-spacing such as <javascript>
 // note that you have to handle splits with , , and later since they *are* allowed in some inputs
 $val = preg_replace('/([x00-x08][x0b-x0c][x0e-x20])/', '', $val);
 // straight replacements, the user should never need these since they're normal characters
 // this prevents like <IMG SRC=&#X40&#X61&#X76&#X61&#X73&#X63&#X72&#X69&#X70&#X74&#X3A&#X61&
    _#X6C&#X65&#X72&#X74&#X28&#X27&#X58&#X53&#X53&#X27&#X29>
 $search = 'abcdefghijklmnopqrstuvwxyz';
 $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 $search .= '1234567890!@#$%^&*()';
 $search .= '~`";:? /={}[]-_|'';
【1】页面之间无法传递变量 get,post,session在最新的php版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用$_GET['foo'],$_POST['foo'],$_SESSION['foo']来得到。当然也可以修改自动全局变量为开(php.ini改为register_globals = On);考虑到兼容性,还是强迫自己熟悉新的写法比较好。
 
  【2】Win32下apache2 用get方法传递中文参数会出错:
  test.php?a=你好&b=你也好
  传递参数是会导致一个内部错误
 
  解决办法:"test.php?a=".urlencode(你好)."&b=".urlencode(你也好)
   .............
  【3】win32下的session不能正常工作
  php.ini默认的session.save_path = /tmp
  这显然是linux下的配置,win32下php无法读写session文件导致session无法使用,把它改成一个绝对路径就可以了,例如session.save_path = c:windows emp
  【4】显示错误信息
  当php.ini的display_errors = On并且error_reporting = E_ALL时,将显示所有的错误和提示,调试的时候最好打开以便纠错,如果你用以前php写法错误信息多半是关于未定义变量的。变量在赋值以前调用会有提示,解决办法是探测或者屏蔽。
  例如显示$foo,可以if(isset($foo)) echo $foo 或者echo @$foo
  【5】Win32下mail()不能发送电子邮件
  在linux下配置好的sendmail可以发送,在win32下需要调用smtp服务器来发送电子邮件,修改php.ini的SMTP = ip //ip是不带验证功能的smtp服务器(网上很难找到)
  php发送邮件的最好解决方法是用socket直接发送到对方email服务器而不用转发服务器。
  【6】初装的mysql如果没有设置密码,应该使用update mysql.user set password="yourpassword" where user="root" 修改密码
  【7】header already sent
  这个错误通常会在你使用HEADER的时候出现,他可能是几种原因:1,你在使用HEADER前PRING或者ECHO了2.你当前文件前面有空行3.你可能INCLUDE了一个文件,该文件尾部有空行或者输出也会出现这种错误。!
  【8】更改php.ini后没有变化
  重新启动web server,比如IIS,Apache等等,然后才会应用最新的设置。
  【9】php在2003上面安装(ISAPI的安装方法恳请高手指教)
  PHP4的php4isapi.dll好像和2003有些冲突,只能用CGI模式安装
  步骤一,先www.php.net 下在一个安装程序,我是装的是:php-4.2.3-installer.exe,你也可以去找最新的版本,在安装php-4.2.3-installer.exe之前保证你的IIS6.0启动了,并能够访问。安装好以后,在默认网站-->应用程序配置。
Web开发是今后分布式程式开发的主流,通常的web开发都要涉及到与数据库打交道,客户端从服务器端读取通常都是以分页的形式来显示,一页一页的阅读起来既方便又美观。所以说写分页程序是web开发的一个重要组成部分,在这里,我们共同来研究分页程序的编写。
 
  一、分页程序的原理
  分页程序有两个非常重要的参数:每页显示几条记录($pagesize)和当前是第几页($page)。有了这两个参数就可以很方便的写出分页程序,我们以MySql数据库作为数据源,在mysql里如果要想取出表内某段特定内容可以使用的 T-SQL语句:select * from table limit offset,rows来实现。这里的offset是记录偏移量,它的计算方法是offset=$pagesize*($page-1),rows是要显示的记录条数,这里就是$page。也就是说select * from table limit 10,10这条语句的意思是取出表里从第11条记录开始的20条记录。
  二、主要代码解析

$pagesize=10; //设置每一页显示的记录数
$conn=mysql_connect("localhost","root",""); //连接数据库
$rs=mysql_query("select count(*) from tb_product",$conn); //取得记录总数$rs
$myrow = mysql_fetch_array($rs);
$numrows=$myrow[0];
//计算总页数
$pages=intval($numrows/$pagesize);
//判断页数设置
if (isset($_GET['page'])){
 $page=intval($_GET['page']);
}
else{
 $page=1; //否则,设置为第一页
}
  三、创建用例用表myTable

create table myTable(id int NOT NULL auto_increment,news_title varchar(50),news_cont text,add_time datetime,PRIMARY KEY(id))
  四、完整代码

<html>
<head>
<title>php分页示例</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<?php
 $conn=mysql_connect("localhost","root","");
 //设定每一页显示的记录数
 $pagesize=1;
 mysql_select_db("mydata",$conn);
 //取得记录总数$rs,计算总页数用
 $rs=mysql_query("select count(*) from tb_product",$conn);
 $myrow = mysql_fetch_array($rs);
 $numrows=$myrow[0];
 //计算总页数
利用Apache中的mod_gzip模块,我们可以利用gzip的压缩算法来对Apache服务器发布的网页内容进行压缩后再传输到客户端的浏览器。如果是纯文本的内容,效果非常明显,大约可以压缩到原来的30%-40%,使用户的浏览速度大大加快。
 
  Gzip需要客户端浏览器支持,目前大部份浏览器都支持gzip,如IE,Netscape,Mozilla等,所以这种方法值得一试。我们可以利用PHP中的预定义变量$_SERVER['HTTP_ACCEPT_ENCODING’]来判断客户端浏览器是否支持gzip。
  gzip1.php

if(ereg('gzip',$_SERVER['HTTP_ACCEPT_ENCODING'])) {
 //浏览器支持
} else {
 //浏览器不支持,输出其它内容
}
?>
  接下来我们对上面这个PHP程序进行扩展,使用ob_start(ob_gzhandler)来将网页内容压缩,存入缓冲并发送给支持gzip的浏览器,浏览器会自动将压缩后的内容解压,显示。
  gzip2.php

define('MAX',100);
if(ereg('gzip',$_SERVER['HTTP_ACCEPT_ENCODING']))
{
 //浏览器支持gzip,将内容压缩并缓冲输出
 ob_start("ob_gzhandler");
 $output = '';
 for($i=0;$i<=MAX;$i )
 {
  $output .= "This is line $i ";
 }
 echo "浏览器支持gzip压缩输出";
 echo $output;
}
else
{
 //浏览器不支持,直接输出
 for($i=0;$i<=MAX;$i )
 {
  $output .= "This is line $i ";
 }
 echo "浏览器不支持gzip压缩输出 ";
 echo $output;
}
?>
  使用gzip压缩生成的网页的HTTP头信息与一般的网页相比中会多出这样的信息:

Content-Encoding: gzip
Content-Length: 270
  如果你想得到更详细的信息,请参看mod_gzip项目主页:
  http://sourceforge.net/projects/mod-gzip/
  类似地,我们也可以利用mod_deflate,压缩率比mod_gzip略低一些。调用zip函数需要耗用服务器内存,所以要慎用,视需求而定。

[!--infotagslink--]

相关文章

  • VS Code C/C++环境配置教程(无法打开源文件“xxxxxx.h”或者检测到 #include 错误,请更新includePath)(POSIX API)

    这篇文章主要介绍了VS Code C/C++环境配置教程(无法打开源文件“xxxxxx.h” 或者 检测到 #include 错误。请更新includePath) (POSIX API),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-13
  • require、backbone等重构手机图片查看器

    这篇文章主要为大家详细介绍了require、backbone等重构手机图片查看器的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-11-22
  • 基于mybatis中<include>标签的作用说明

    这篇文章主要介绍了基于mybatis中<include>标签的作用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-20
  • include包含头文件的语句中,双引号和尖括号的区别(详解)

    下面小编就为大家带来一篇include包含头文件的语句中,双引号和尖括号的区别(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
  • Lua中的loadfile、dofile、require详解

    这篇文章主要介绍了Lua中的loadfile、dofile、require详解,本文分别用实例讲解它的用法和特点等内容,需要的朋友可以参考下...2020-06-30
  • perl文件包含(do,require,use)指令介绍

    Perl中的文件包含,有三种方法:do, require, 以及use,这里简单的介绍下方便需要的朋友...2020-06-29
  • php include提示failed to open stream: Permission denied in错误

    出现failed to open stream: Permission denied in是apache运行用户没用权限去访问指定的文件了,所以导致目录文件打不开了。 在打开浏览器时提示 Warning: includ...2016-11-25
  • php中set_include_path和require,include介绍

    在php中set_include_path会导致require,include用法不一样了,对于这个问题我们来看一个简单的例子,具体如下。 在PHP中经常使用include,require来引用其他文件,使用相...2016-11-25
  • php中文目录 include错误解决访求

    php教程中文目录 include错误解决访求 include_path='.;c:php5pear'的错误 warning: unknown: failed to open stream: no such file or directory in unknown on line...2016-11-25
  • C++中#include头文件的示例详解

    在C++中,所有的文件操作,都是以流(stream)的方式进行的,fstream也就是文件流file stream。这篇文章主要介绍了C++中#include头文件,需要的朋友可以参考下...2020-06-25
  • PHP学习:include()和require()的区别

    include()和require()的区别 这相信是PHP中最基本的问题了,也是很多公司面试时必考的题呵呵。 给大家复习一下: require() :如果文件不存在,会报出一个fatal error.脚本...2016-11-25
  • 详解handlebars+require基本使用方法

    本文主要对handlebars+require基本使用方法进行详细介绍,文章尾部会附上完整代码供大家参考。需要的朋友一起来看下吧...2017-01-09
  • 通过Include和Require函数实现代码重用

      如果你做过各种大小的Web站点,一定会对重用代码段的重要性深有体会,不管是HTML还是PHP代码块。比如需要一年修改一次包含版权信息的页脚,而你有1000个Web页(就算是10...2016-11-25
  • php 中require和include引用url和 php的文件编码转换函数问题

    本文章同时解决两个问题就是php 中require和include引用url和 php的文件编码转换函数问题,有需要的朋友可以看看哈,参考一下。 PHP配置中“allow_url_fopen&rd...2016-11-25
  • php中include require utf-8文件时顶部产生空行的

    本文章来介绍关于php中include require utf-8文件时顶部产生空行的解决办法有需要学习的朋友可参考。 include()产生一个警告而require()则导致一个致命错误。换...2016-11-25
  • 再讲php中require(),include(),require_once()和include_once()他们的区别

    本文章介绍了php四种调用外部文件函数用法和区别,有需要了解的朋友可以参考一下。 引用文件的方法有两种:require 及 include。两种方式提供不同的使用弹性。 requi...2016-11-25
  • 简单谈谈PHP中的include、include_once、require以及require_once语句

    include() 、require()语句包含并运行指定文件。这两结构在包含文件上完全一样,唯一的区别是对于错误的处理。require()语句在遇到包含文件不存在,或是出错的时候,就停止即行,并报错。include()则继续即行。...2016-04-26
  • PHP Include与require

    PHP Include 文件 服务器端包括 您可以插入的内容的文件到PHP文件之前,服务器执行它,与包括( )或要求( )函数。这两项职能是相同的各种方式,但他们如何处理错误。在包括( )函...2016-11-25
  • php set_include_path 函数

    php set_include_path 函数 set_include_path ( PHP 4中“ = 4.3.0 , PHP 5中) set_include_path -集和include_path配置选项 描述 字符串set_inclu...2016-11-25
  • node.js require() 源码解读

    学习 Node.js ,必学如何使用 require 语句。本文通过源码分析,详细介绍 require 语句的内部运行机制,帮你理解 Node.js 的模块机制...2015-12-14