php面试(简答)

来源:互联网 发布:淘宝店铺o2o 编辑:程序博客网 时间:2024/06/05 03:21

1、双引号和单引号的区别
双引号解释变量,单引号不解释变量
双引号里的变量用花括号包起来 如:{$i}

双引号里插入单引号,其中单引号里如果有变量的话,变量解释
双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误
双引号解释转义字符,单引号不解释转义字符,但是解释’\和\
能使单引号字符尽量使用单引号,单引号的效率比双引号要高(因为双引号要先遍历一遍,判断里面有没有变量,然后再进行操作,而单引号则不需要判断)

2、常用的超全局变量(8个)

$_GET ----->get传送方式$_POST ----->post传送方式$_REQUEST ----->用于收集 HTML 表单提交的数据,GET和POST$GLOBALS ----->所有的变量都放在里面$_FILE ----->上传文件使用$_SERVER ----->系统环境变量,关于报头、路径和脚本位置的信息。$_SESSION ----->会话控制的时候会用到$_COOKIE ----->会话控制的时候会用到

3、HTTP中POST、GET、PUT、DELETE方式的区别
GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。

与GET不同的是,PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。

POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。

DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作。

4、echo、print_r、print、var_dump
* echo、print是php语句,var_dump和print_r是函数

  • 1:echo:是语句不是函数,没有返回值,因此不能作为表达式的一部分使用。可输出多个变量值,不需要圆括号。不能输出数组和对象,只能打印简单类型(如int,string)。

  • 2:print:是语句不是函数,有返回值 true/false,只能输出一个变量,不需要圆括号。不能输出数组和对象,只能打印简单类型(如int,string)。

  • 3:print_r:是函数,可以打印复合类型,例如:stirng、int、float、array、object等,输出array时会用结构表示,而且可以通过print_r($str,true)来使print_r不输出而返回print_r处理后的值。但print_r输出布尔值和NULL的结果没有意义,因为都是打印”\n”

  • 4:var_dump() 判断一个变量的类型和长度,并输出变量的数值。适合调试

5、如何获取客户端的ip(要求取得一个int)和服务器ip的代码
客户端:$_SERVER["REMOTE_ADDR"];或者getenv('REMOTE_ADDR')
服务器端:gethostbyname('www.baidu.com')或者$_SERVER['SERVER_ADDR'];
客户端网页地址:$_SERVSR[‘REQUEST_URI']

6、优化数据库的方法
选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置NOTNULL,例如’省份’、’性别’最好适用ENUM
使用连接(JOIN)来代替子查询
适用联合(UNION)来代替手动创建的临时表
事务处理
锁定表、优化事务处理
适用外键,优化锁定表
建立索引
优化查询语句

7、对于大流量网站,采用什么方法来解决访问量的问题
确认服务器硬件是否能够支持当前的流量
数据库读写分离,优化数据表
程序功能规则,禁止外部的盗链
控制大文件的下载
使用不同主机分流主要流量

8、语句include和require的区别是什么?
require是无条件包含,也就是如果一个流程里加入require,无论条件成立与否都会先执行require,当文件不存在或者无法打开的时候,会提示错误,并且会终止程序执行

include有返回值,而require没有(可能因为如此require的速度比include快),如果被包含的文件不存在的化,那么会提示一个错误,但是程序会继续执行下去

注意:包含文件不存在或者语法错误的时候require是致命的,而include不是
require_once表示了只包含一次,避免了重复包含

9、isset、empty、is_null、参数本身的区别

empty , isset首先都会检查变量是否存在,然后对变量值进行检测。而is_null 和 “参数本身”只是直接检查变量值,是否为null,因此如果变量未定义就会出现错误!

isset 判断变量是否定义或者是否为空

变量未定义,返回false变量定义不赋值,返回falseunset一个变量,返回false变量赋值为null,返回false

empty:判断变量的值是否为空,能转换为false的都是空,为空返回true,反之返回false。

"",0,"0",NULL,FALSE,array(),未定义,都认为为空,返回true没有任何属性的对象都认为是空

变量本身作为参数,与empty()一致,但接受未定义变量时,报警告;

isset() 和 empty() 区别:
Isset判断变量是否存在,可以传入多个变量,若其中一个变量不存在则返回假,empty判断变量是否为空为假,只可传一个变量,如果为空为假则返回真。

is_null:检测传入的值(值、变量、表达式)是否为null

未定义报警告定义了,但是赋值为Null定义了,但是没有赋值unset一个变量

10、 简单描述mysql中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。
普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。也就是说,唯一索引可以保证数据记录的唯一性。
主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字 PRIMARY KEY 来创建。
索引可以覆盖多个数据列,如像INDEX(columnA, columnB)索引,这就是联合索引。
索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。

11、数据库中的事务是什么
事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。ACID 四大特性,原子性、隔离性、一致性、持久性。

12、XSS
XSS是跨站脚本攻击,首先是利用跨站脚本漏洞以一个特权模式去执行攻击者构造的脚本,然后利用不安全的Activex控件执行恶意的行为。
使用htmlspecialchars()函数对提交的内容进行过滤,使字符串里面的特殊符号实体化。

13、SQL注入漏洞产生的原因?如何防止?
SQL注入产生的原因:程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。

防止SQL注入的方式:

开启配置文件中的magic_quotes_gpc 和 magic_quotes_runtime设置
执行sql语句时使用addslashes进行sql语句转换
Sql语句书写尽量不要省略双引号和单引号。
过滤掉sql语句中的一些关键词:update、insert、delete、select、 * 。
提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。
Php配置文件中设置register_globals为off,关闭全局变量注册
控制错误信息,不要在浏览器上输出错误信息,将错误信息写到日志文件中。

14、PHP网站的主要攻击方式有哪些?
命令注入(Command Injection)
eval 注入(Eval Injection)
客户端脚本攻击(Script Insertion)
跨网站脚本攻击(Cross Site Scripting, XSS)
SQL 注入攻击(SQL injection)
跨网站请求伪造攻击(Cross Site Request
Forgeries, CSRF)
Session 会话劫持(Session Hijacking)
Session 固定攻击(Session Fixation)
HTTP 响应拆分攻击(HTTP Response Splitting)
文件上传漏洞(File Upload Attack)
目录穿越漏洞(Directory Traversal)
远程文件包含攻击(Remote Inclusion)
动态函数注入攻击(Dynamic Variable
Evaluation)
URL 攻击(URL attack)
表单提交欺骗攻击(Spoofed Form
Submissions)
HTTP 请求欺骗攻击(Spoofed HTTP Requests)

15、框架中什么是单一入口和多入口 , 单一入口的优缺点?
多口就是通过访问不同的文件来完成用户请求。单一入口只 web 程序所有的请求都指向一个脚本文件的。
单一入口更容易控制权限,方便对 http 请求可以进行安全性检查。
缺点:URL 看起来不那么美观,特别是对搜索引擎来说不友好。

16、对于关系型数据库而言,索引是相当重要的概念,请回答有关索引的几个问题:
a)、索引的目的是什么?
快速访问数据表中的特定信息,提高检索速度
创建唯一性索引,保证数据库表中每一行数据的唯一性。
加速表和表之间的连接
使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间

b)、索引对数据库系统的负面影响是什么?
负面影响:
创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改、的时候索引也要动态维护,这样就降低了数据的维护速度。

c)、为数据表建立索引的原则有哪些?
在最频繁使用的、用以缩小查询范围的字段上建立索引。
在频繁使用的、需要排序的字段上建立索引

d)、 什么情况下不宜建立索引?
对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引。
对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。

17、 解释MySQL外连接、内连接与自连接的区别
先说什么是交叉连接: 交叉连接又叫笛卡尔积,它是指不使用任何条件,直接将一个表的所有记录和另一个表中的所有记录一一匹配。

内连接 则是只有条件的交叉连接,根据某个条件筛选出符合条件的记录,不符合条件的记录不会出现在结果集中,即内连接只连接匹配的行。
外连接 其结果集中不仅包含符合连接条件的行,而且还会包括左表、右表或两个表中
的所有数据行,这三种情况依次称之为左外连接,右外连接,和全外连接。

左外连接,也称左连接,左表为主表,左表中的所有记录都会出现在结果集中,对于那些在右表中并没有匹配的记录,仍然要显示,右边对应的那些字段值以NULL来填充。右外连接,也称右连接,右表为主表,右表中的所有记录都会出现在结果集中。左连接和右连接可以互换,MySQL目前还不支持全外连接。

18、什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
静态路由是由系统管理员设计与构建的路由表规定的路由。适用于网关数量有限的场 合,且网络拓朴结构不经常变化的网络。其缺点是不能动态地适用网络状况的变化,当 网络状况变化后必须由网络管理员修改路由表。
动态路由是由路由选择协议而动态构建的,路由协议之间通过交换各自所拥有的路由信 息实时更新路由表的内容。动态路由可以自动学习网络的拓朴结构,并更新路由表。其 缺点是路由广播更新信息将占据大量的网络带宽。

19、HTTP Keep-Alive的作用
作用:Keep-Alive:使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。Web服务器,基本上都支持HTTP Keep-Alive。

缺点:对于提供静态内容的网站来说,这个功能通常很有用。但是,对于负担较重的网站来说,虽然为客户保留打开的连 接有一定的好处,但它同样影响了性能,因为在处理暂停期间,本来可以释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时,Keep- Alive功能对资源利用的影响尤其突出。

解决:Keep-Alive: timeout=5, max=100
timeout:过期时间5秒(对应httpd.conf里的参数是:KeepAliveTimeout),max是最多一百次请求,强制断掉连接。就是在timeout时间内又有新的连接过来,同时max会自动减1,直到为0,强制断掉。

20、数组操作的基本函数

1 array_values($arr);       //获得数组的值2 array_keys($arr);         //获得数组的键名3 array_flip($arr);         //数组中的值与键名互换(如果有重复前面的会被后面的覆盖)4 array_search('PHP',$arr); //检索给定的值,加true则是严格类型检查5 array_reverse($arr);      //将数组中的元素翻转6 in_array("apple", $arr);  //在数组中检索apple7 array_key_exists("apple", $arr); // 检索给定的键名是否存在数组中8 array_count_values($arr);        // 统计数组中所有值出现的次数9 array_slice($arr, 0, 3);    //将数组中的一段取出,此函数忽略键名(数组的分段)10 array_splice($arr, 0, 3array("black","maroon"));    //将数组中的一段取出,返回的序列从原数组中删除11 array_chunk($arr, 3, TRUE);   //将一个数组分割成多个,TRUE为保留原数组的键名(分割多个数组)12 array_diff($arr1, $arr2);           //返回差集结果数组 13 array_diff_assoc($arr1, $arr2, $arr3);  //返回差集结果数组,键名也做比较14 array_intersect($arr1, $arr2);  //返回交集结果数组    15 array_intersect_assoc($arr1, $arr2);   //返回交集结果数组,键名也做比较 16 array_unique($arr);   //移除数组中重复的值,新的数组中会保留原始的键名17 shuffle($arr);             // 将数组的顺序打乱

21、常量

__LINK__      //文件中的当前行号。__FILE__       //文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。__DIR__       //文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录,它等价于 dirname(__FILE__)。__FUNCTION__       //函数名称。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。 __CLASS__              //类的名称。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。 __METHOD__         //类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。 __NAMESPACE__   //当前命名空间的名称(大小写敏感)。这个常量是在编译时定义的(PHP 5.3.0 新增)

22、php获取文件内容的方法,对应的函数
1:file_get_contents得到文件的内容(可以以get和post的方式获取),整个文件读入一个字符串中
2:用fopen打开url, 以get方式获取内容(借助fgets()函数)
3:用fsockopen函数打开url(可以以get和post的方式获取),以get方式获取完整的数据,包括header和body
4:使用curl库获取内容,使用curl库之前,需要查看php.ini,查看是否已经打开了curl扩展

23、strlen()与mb_strlen的作用与区别
在PHP中,strlen与mb_strlen是求字符串长度的函数
PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍(在 UTF-8编码下,一个汉字占3个字节)。

采用mb_strlen函数可以较好地解决这个问题。mb_strlen的用法和strlen类似,只不过它有第二个可选参数用于指定字符编码。例如得到UTF-8的字符串$str长度,可以用 mb_strlen($str,’UTF-8’)。如果省略第二这里写代码片个参数,则会使用PHP的内部编码。内部编码可以通过 mb_internal_encoding()函数得到。

需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。

24、 正则表达式

匹配中文字符的正则表达式: [\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内):[^\x00-\xff] 匹配空行的正则表达式:\n[\s| ]*\r 匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 匹配首尾空格的正则表达式:(^\s*)|(\s*$) 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$ 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})? 匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$ 

25、日期
用php打印出前一天的时间格式是2006-5-10 22:21:21

echo date('Y-m-d H:i:s', strtotime('-1 days')); 

求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数

strtotime(‘2007-3-6')-strtotime(‘2007-2-5'))/3600*24

26、mysql取得当前时间的函数是?,格式化日期的函数是
now(),date()
常用:date(“Y-m-d H:i:s”);

27、对$GLOBALS全局变量和global关键字的理解?

* (1)、输出$GLOBALS全局变量: *  *    结果: *    Array *       ( *           [GLOBALS] => Array *              *RECURSION* *           [_POST] => Array *               ( *                  [username] => admin     //等价于$_POST['username'] *                  [password] => 123       //等价于$_POST['password'] *               ) *           [_GET] => Array *               ( *                  [username] => admin     //等价于$_GET['username'] *                  [password] => 123       //等价于$_GET['password'] *               ) *           [_COOKIE] => Array *               ( *                   [PHPSESSID] => movgbv4t1klb9fsbcd7ns8ik73 *                   [username] => admin     //等价于$_COOKIE['username'] *                   [password] => 123       //等价于$_COOKIE['password'] *               ) *           [_FILES] => Array *               ( *                  [name] => 1.txt         //等价于$_FILES['username'] *                  [type] => image/jpeg    //等价于$_FILES['password'] *               ) *           [_SESSION] => Array *               ( *                  [username] => admin     //等价于$_SESSION['username'] *                  [password] => 123       //等价于$_SESSION['password'] *               ) *           [pwd] => 134121233             //等价于$pwd *           [username] => xiaoqiang        //等价于$username *           [password] => 123              //等价于$password *       ) *  * (2)、几种等价的写法: *   *    (1)$_SESSION['username']等价于$GLOBALS['_SESSION']['username'] *    (2)$_COOKIE['username']等价于$GLOBALS['_COOKIE']['username'] *    (3)$_GET['username']等价于$GLOBALS['_GET']['username'] *    (4)$_POST['username']等价于$GLOBALS['_POST']['username'] *    (5)$_FILES['username']等价于$GLOBALS['_FILES']['username'] *    (6)$username等价于$GLOBALS['username'] *  * (3)、global关键字: *  *    php中全局变量在函数体内使用时必须声明为global;在函数体内通过global关键字声明的变量自动变为函数体外的全局变量 * *    案例1: * *    function test(){ *       global $username;//声明全局变量时不能赋值 *       $username="小强";//此时可以给全局变量赋值 *    } *    test(); *    echo "<pre>";print_r($GLOBALS);exit;//结果:"小强" * *    案例2: * *    $username="小强"; *    function test(){ *       global $username;//声明全局变量时不能赋值(提示:使用global关键字引用函数体外的$username变量) *       $username="小红";//此时可以给全局变量赋值(提示:将函数体外$username变量重新赋值) *    } *    test(); *    echo "<pre>";print_r($GLOBALS);exit;//结果:"小红" *  * (4)、全局变量的生效范围: *  *    $a = 1;include 'b.inc';//这里变量$a将会在包含文件b.inc中生效 *  * (5)、global声明的变量为全局变量,在函数和类的外部照样可以使用 *  *    如:discuz_application.php类中使用global关键字声明的$_G全局变量,在全站都可以使用 

28、如何修改SESSION的生存时间

方法1:将php.ini中的session.gc_maxlifetime设置为9999重启apache方法2:`<?php // 保存一天 $lifeTime = 24 * 3600; session_set_cookie_params($lifeTime); session_start();$_SESSION["admin"] = true; ?>`

29、有一个网页地址, 比如PHP开发资源网主页: http://www.php.com/index.html,如何得到它的内容?

方法1(对于PHP5及更高版本):   $readcontents = fopen("http://www.phpres.com/index.html", "rb");   $contents = stream_get_contents($readcontents);   fclose($readcontents);   echo $contents;   方法2:   echo file_get_contents("http://www.phpres.com/index.html"); 

30、MyISAM和 InnoDB 的基本区别?索引结构如何实现?
MyISAM类型不支持事务,表锁,易产生碎片,要经常优化,读写速度较快,而InnoDB类型支持事务,行锁,有崩溃恢复能力。读写速度比MyISAM慢。

创建索引:alerttable tablename add index (字段名)

31、php中传值与传引用的区别。什么时候传值什么时候传引用?
按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。
按引用传递则不需要复制值,对于性能提高很有好处。

32、foo()和@foo()之间有什么区别
@ 禁止报错
当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉.

33、mysql_fetch_row() 和mysql_fetch_array之间有什么区别?
mysql_fetch_row是从结果集取出1行数组,作为枚举
mysql_fetch_array是从结果集取出一行数组作为关联数组,或数字数组,两者兼得
通常用后者。
如:如果你的表里面有字段a,b,c那么你用mysql_fetch_row() 就返回array(1=>a的值,2=>b的值,3=>c的值)这个时候你读数组的话,只能这样写array[1],array[2]才能得到a的值;要是用mysql_fetch_array() 就返回array(a=>a的值,b=>b的值,c=>c的值)和 array(1=>a的值,2=>b的值,3=>c的值)这个时候你读数组的话array[1]array[a]都能得到a的值

34、$a = 'abcdef'; 请取出$a的值并打印出第一个字母

$a{0}substr($a,0,1)

35、
(1)在HTTP 1.0中,状态码401的含义是未被授权;如果返回“找不到文件”的提示,则可用 header 函数,其语句为header(“Location:www.xxx.php”);
(2)error_reporting 设定错误讯息回报的等级, error_reporting(2047)的作用是报告所有错误和警告
(3)以Apache模块的方式安装PHP,在文件http.conf中首先要用语句LoadModule php5_module “c:/php/php5apache2.dll”动态装载PHP模块,然后再用语句AddType application/x-httpd-php .php使得Apache把所有扩展名为php的文件都作为PHP脚本处理。
(4)想要自动加载类,使用function __autoload($class_name)
(5)php读取文件内容的几种方法和函数?
打开文件,然后读取。fopen(),fread()
打开读取一次完成file_get_contents()
(6)show create database mysql; 这个命令的作用?
显示创建数据库的sql语句
(7)show processlist; 这个命令的作用?
显示哪些线程正在运行
(8)SHOW VARIABLES like ’%conn%’; 这个命令的作用?
显示系统变量名包含conn的值
(9)用javascript取得一个input的值?取得一个input的属性?

document.getElementById(‘name’).value;document.getElementById(‘name’).type;

用Jquery取得一个input的值?取得一个input的属性?

$(“input[name='aa']“).val();$(“input[name='aa']“).attr(‘type’);

36、addslashes()与 htmlspecialchars() 区别
* (1)addslashes()函数主要在指定的预定义字符前添加反斜杠,这些预定义字符主要包括:
*
* 单引号 (‘)
* 双引号 (“)
* 反斜杠 ()
* NULL
*
* addslashes()函数的主要作用是保证这些预定义字符能够正确入库,仅此而已
*
*
* (2)htmlspecialchars()函数把一些预定义的字符转换为HTML实体,这些预定义字符主要包括:
*
*
* & (和号) 成为 &
* ” (双引号) 成为 "
* ’ (单引号) 成为 '
* < (小于) 成为 <
* > (大于) 成为 >

37、heredoc
1,以<<

<?php$v=2;$a= <<<EOF"abc"$v"123"EOF;echo $a; //结果连同双引号一起输出:"abc"2 "123"?>

3,heredoc常用在输出包含大量HTML语法的文档时。
比如:函数outputhtml()要输出HTML的主页。
可以有两种写法。很明显第二种写法比较简单和易于阅读。

<?php//方法一function outputhtml(){echo "<html>";echo "<head><title>脚本 学堂 主页</title></head>"; echo "<body>主页内容</body>";echo "</html>;}//方法二function outputhtml(){echo <<<EOT   <html>   <head><title>脚本 学堂 主页</title></head>   <body>主页内容</body>   </html>EOT;}outputhtml();?>

38、<?php require(dirname(__FILE__)."/do/".basename(__FILE__)); ?>

require() 语句包含并运行指定文件。 ( $XXXX 是变量名 )dirname() 返回路径中的目录部分 例如$path = "/etc/passwd.php";$file = dirname($path); $file 就是/etc__FILE__  是PHP的魔术常量 表示当前文件的完整路径和文件名basename() 返回路径中的文件名部分例如$path = "/home/httpd/html/index.php";$file = basename($path);       $file 就是 index.php整句话就是 载入一个在你项目路径中do文件夹下的跟你当前文件同名的文件

39、不使用cookie向客户端发送一个cookie.
理解:session_start()开启时,生成一个常量 SID,当COOKIE开启时,这个常量为空,当COOKIE关闭时,这个常量中存储了PHPSESSID的值。通过在URL后加一个SID参数来传递SESSIONID的值,从而使客户端页面可以使用SESSION里面的值。当客户端开启COOKIE和服务器端开启SESSION时。浏览器第一次请求,服务器会向浏览器端发送一个COOKIE里面存储SESSIONID.当浏览器第二次请求时,会把已存在的COOKIE一起提交到服务器端

40、表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。

select case when A>B then A else B end,       case when B>C then B else C endFrom test