php综合复习题大全(上)——基础篇

1. 变量如何定义?如何检查变量是否定义?如何删除一个变量?判断一个变量是否为空的函数?
isset()
unset()
empty()

2. 什么是可变变量?
一个变量的变量名可以动态的设置和使用。
$a = 'hello' , $$a = 'world', ${$a}=hello world

3. 变量赋值方式有哪几种?
1)直接赋值
2)变量间赋值
3)引用赋值

4. 引用和拷贝有什么区别?
拷贝是将原来的变量内容复制下来,拷贝后的变量与原来的变量使用各自的内存,互不干扰。
引用相当于是变量的别名,其实就是用不同的名字访问同一个变量内容。当改变其中一个变量的值时,另一个也跟着发生变化。


5. php中变量有哪些基本数据类型?
php支持8种原始数据类型。
包括:
四种标量类型(布尔型boolean,整型interger,浮点型float/double , 字符串string
两种复合类型(数组array , 对象object)
两种特殊类型(资源resourceNULL


6. 其它类型转换为boolean类型时,哪些被认为是false
布尔值false,整型值0, 浮点型值0.0, 空白字符串, 字符串'0', 空数组,特殊数据类型NULL, 没有设定的变量。

empty()函数在哪些情况下返回true
布尔值false
整型值0, 
浮点型值0.0, 
空白字符串, 
字符串'0', 
array()空数组,
特殊数据类型NULL, 
没有任何属性的对象,
没有赋值的变量。


7. 如果定义了一个变量$a ,但是没有赋初始值 
那么$a==0吗? 
$a==false吗? 
$a==''吗?
$a==NULL吗?
$a===NULL吗? 答:echo=>什么都没有 , var_dump=>NULL
empty($b)==true吗?———————————— echo=>1 , var_dump=>bool(true) 
此时如果输出$a++是多少?——————— echo=>什么都没有 , var_dump=>NULL
如果输出++$a又是多少?————————— echo=>1 , var_dump=>int(1)


8. 字符串怎么转成整数,有几种方法?怎么实现?
强制类型转换: (整型)字符串变量名;
直接转换:settype(字符串变量,整型);
intval(字符串变量);

9. 标量数据和数组的最大区别是什么?
一个标量只能存放一个数据,而数组可以存放多个数据。


10. 常量如何定义如何检测一个常量是否被定义?常量的值只能是哪些数据类型?
define()//定义常量 , defined()//检查常量是否定义
常量的值只能是标量类型的数据。


11. 常量分为系统内置常量和自定义常量。请说出最常见的几个系统内置常量?
__FILE__ , __LINE__ , PHP_OS , PHP_VERSION

12. 如果定义了两个相同的常量,前者和后者哪个起作用?
前者起作用,因为常量一旦定义就不能被重新定义或者取消定义。


13. 常量和变量有哪些区别?
1)常量前没有$符号;
2)常量只能通过define()定义,而不能通过赋值语句定义;
3)常量可以在任何地方定义和访问,而变量有全局和局部之分;
4)常量一旦定义就不能被重新定义或者取消定义,而变量而通过赋值方式重新定义;
5)常量的值只能是标量数据,而变量的数据库类型有8种原始数据类型。


14. PHP中常用的几个预定义的全局数组变量是哪些?
9大预定义的内置数组变量:
$_POST, $_GET, $_REQUEST, $_SESSION, $_COOKIE, $_FILES$_SERVER, $_ENV, $GLOBALS

15. 在实际开发中,常量最常用于哪些地方?
1)连接数据库的信息定义成常量,如数据库服务器的用户名、密码、数据库名、主机名;
2)将站点的部分路径定义成常量,如web绝对路径,smarty的安装路径,modelview或者controller的文件夹路径;
3)网站的公共信息,如网站名称,网站关键词等信息。

16. 函数的优越性有哪些?
提高程序的可维护性
提高软件的可靠性
提高程序的可重用性
提高程序的开发效率


17. 如何定义一个函数?函数名区分大小写吗?
1)使用 function 关键字;
2)函数命名规则和变量一样,以字母或者下划线开头,而不能以数字开头;
3)函数名不区分大小写;
4)函数名不可以使用已经声明过的或者系统自建的函数名称。


18. 什么是变量的能见度 或者 说是变量作用域?
就是变量在程序中的可作用范围。根据变量的能见度,变量分为局部变量和全局变量。


19. 什么是局部变量和全局变量?函数内是否可以直接调用全局变量?
局部变量是函数内部定义的变量,其作用域是所在的函数。如果函数外还有一个跟局部变量名字一样的变量,
程序会认为它们两个是完全不同的两个变量。当退出函数的时候,其中的局部变量就同时被清除。

全局变量是定义在所有函数以外的变量,其作用域是整个php文件,但是在用户自定义的函数内部是无法使用的。
如果一定要在用户自定义的函数内部使用全局变量,那么就需要使用global关键字声明。
也就是说如果在函数内的变量前加上golbal来修饰,那么函数内部就可以访问到这个全局变量,
不仅可以利用这个全局变量进行运算而且可以对这个全局变量进行重新赋值。
全局变量还可以使用 $GLOBALS['var'] 来调用。


20. global关键词如何使用?预定义的全局变量数组$GLOBALS如何使用?


21. 什么是静态变量?
如果一个函数内定义的变量前使用关键字static来声明,那么该变量就是静态变量。
一般函数内的变量在函数调用结束后,其存储的数据将被清除,所占的内存空间也被释放。而使用静态变量时,
该变量会在函数第一次被调用时被初始化,初始化后该变量也不会被清除,当再次调用该函数时,这个静态变量
不再被初始化,而能保存上次函数执行完后的值。可以说静态变量在所有对该函数的调用之间共享。


22. php中函数传递参数的方式有哪些?两者有什么区别?
按值传递和按地址传递(或按引用传递)
(1)按值传递待传递的变量,与传递给函数之后的变量是存储在不同的空间中。所以函数体内对
该变量值做的修改,不影响原本的变量值。
(2)按地址传递使用 符号,表明该参数是以地址的方式传递值。并不会将主程序中的指定数值或目标变量传递给函数,
而是把该数值或变量的内存储存区块地址导入函数之中,所以函数体内的该变量和主程序中的该变量在内存
中是同一个。函数体做的修改,直接影响到函数体外部的该变量的值。


23. 什么是递归函数?如何进行递归调用?
递归函数其实就是调用自身的函数,但是必须满足以下两个条件:
1)在每一次调用自身时,必须是更接近于最终结果;
2)必须有一个确定的递归终止条件,不会造成死循环。
举例说明:
在实际工作中往往会在遍历文件夹的时候使用。
如果有个例子是希望获取到目录windows下所有的文件,那么先遍历windows目录,如果发现其中还有文件夹,那么就会调用自身,继续往下寻找,依次类推,
直到遍历到再也没有文件夹为止,这也就是意味着遍历出来了所有的文件。


24. 判断一个函数是否存在?
function_exists( string $function_name ) 如果存在,返回true, 不存在则返回 false

25. func()@func()之间有什么区别?
第二个函数调用失败不会报错,第一个会报错

26. include()require()函数的用法和区别是什么?include_once()require_once()呢?

require 的使用方法如 require(“MyRequireFile.PHP”); 。这个函数通常放在 php 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 php 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。

include 使用方法如 include(“MyIncludeFile.php”); 。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。

他们两个的用途是完全一样的,不一定非得哪个放在最前面哪个放在中间。他们最根本的区别在于错误处理的方式不一样。

require一个文件存在错误的话,那么程序就会中断执行了,并显示致命错误 
include一个文件存在错误的话,那么程序不会中断,而是继续执行,并显示一个警告错误。

include_once()require_once()在加载之前要判断是否已经导入,如果是的话,便不会再次重复导入同样的内容。

27. 说出前置++和后置++的区别?
前置++是先将变量增加1,然后在将值赋值给原来的变量;
后置++是先返回变量的当前值,然后再将变量的当前值增加1.


28. 字符串运算符“.”与算术运算符“+”有什么区别?
“a”“b”之间使用.时认为是连字符。如果两者间是+的时候php会认为是一次运算。
1)如果+号两边的字符串是数字组成的,那么会将字符串自动转为整型;
2)如果+号两边是纯粹的字母,那么会输出0
3)如果+号两边的字符串是以数字开头的,那么会截取字符串开头的数字,然后进行运算。


29. 什么是三目(或三元)运算符?
根据一个表达式的结果在另两个表达式中选择一个。
例如: ($a==true) ? 'good':'bad';


30. 控制流程语句有哪些?
1:三种程序结构 顺序结构、分支结构、循环结构
2:分支: if/esle/esleif/ switch/case/default
3: switch 需要注意的:
case子句中的常量可以是整型、字符串型常量、 或者常量表达式,不允许是变量。
同一个switch子句中,case的值不能相同,否则只能取到首次出现case中的值。
4: 循环 for while do...while
do...while 后面必须加入分号结尾。
while 和 do...while 的区别
5break 和 continue 的区别。
break可以终止循环。
continue没有break强大,只能终止本次循环而进入到下一次循环中。


31. 数组的概念是什么?数组根据索引分为哪两种,如何区分?数组的赋值方式有哪两种?
数组是一个可以存储一组或一系列数值的变量(复合型变量)
索引数组(索引值为数字,以0开始)和关联数组(以字符串作为索引值)

数组的赋值方式有哪两种?
数组的声明方式主要有两种。
1.通过array()函数声明数组;
可以通过key=>value的方式分别定义索引和值,也可以不定义数组的索引下标,只给出数组的元素值。
2.直接为数组元素赋值,不需要调用array()函数。例如:
$arr[0] = 1;
$arr[1] = 2;
特别注意:
数组的下标如果是等价于整数的字符串值(但不能以0开头),则会被当作整数对待。
例如: $array[3]  $array['3'] 引用的是相同的一个元素,而 $array['03'] 引用的则就是另外的一个元素了。


32.数组如何遍历?
for循环
foreach循环 ,这是最常用的遍历方式。用法如下:foreach($arr as $key=>$value){}
list each while 配合起来循环


33. foeach数组的时候指针是如何指向的?list()/each()/while()循环数组的时候指针如何指向的呢?
foreach开始执行的时候,数组内部的指针会自动指向第一个单元。因为foreach所操作的是指定数组的拷贝,而不是该数组本身。
each()一个数组后,数组指针将停留在数组中的下一个单元或者碰到数组结尾时停留在最后一个单元。如果要再次使用each()遍历数组,必须要使用reset().
reset()将数组的内部指针倒回到第一个单元并返回第一个数组单元的值。


34. 如何计算数组长度(或者说计算数组中所有元素的个数)?字符串怎么取长度?
count() -- 计算数组中的元素个数。
可以使用count(数组名)或者count(数组名,1),如果有第二个参数,并且是数字1,则表示递归统计数组元素的个数。
如果第二个参数是数字0,则等同于只有一个参数的count()函数。
sizeof() -- count() 的别名
字符串:strlen()mb_strlen();


35. 数组中相关的常用函数有哪些?
1) count --sizeof别名)— 计算数组中的单元数目或对象中的属性个数 
例如:int count ( mixed $var [, int $mode ] ) $var 通常都是数组类型,任何其它类型都只有一个单元。$mode 默认值为0. 1为开启递归地对数组计数
2) in_array ( mixed $needle , array $haystack [, bool $strict ] ) — 检查数组中是否存在某个值。
如果 needle 是字符串,则比较是区分大小写的。
如果第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和 haystack 中的相同。
3) array_merge(array $array1 [, array $array2 [, array $... ]] ) 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。 
特别注意:如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。 
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引

4) 数组与字符串之间的转换
(1)explode ( string $separator , string $string [, int $limit ] ) 使用一个分隔字符来分隔一个字符串。
(2)implode ( string $glue , array $arr ) 使用一个连接符将数组中的每个单元连接为一个字符串。
join 为 implode 的别名

5) sort(array &$array [, int $sort_flags ]) — 对数组按照值排序,当本函数结束时数组单元将被从最低到最高重新安排。


36. 数组合并函数array_merge()和数组加法运算$arr + $arr2 的区别是什么?
array_merge()->使用array_merge(),如果是关联数组合并,如果数组的键名相同,那么后面的值将覆盖前者;如果是数字索引数组合并,则不覆盖,而是
后者附加到前者后面。
"+"->使用数组加法运算,与array_merge()不同,加法运算不管是关联数组还是数字索引数组,都是将相同键名的的值舍弃,
也就是只保留首次出现该键名的元素,后来的具有相同键名的元素都不会被加进来。


37. 字符串定义的时候单引号和双引号有什么区别?

①转义的字符不同

单引号和双引号中都可以使用转义字符(\),但只能转义在单引号中引起来的单引号和转义转义符本身。如果用双引号(“”)括起字符串,PHP懂得更多特殊字符串的转义序列。

②对变量的解析不同

单引号字符串中出现的变量不会被变量值替代。即PHP不会解析单引号中的变量,而是将变量名原样输出。双引号字符串最重要的一点是其中的变量名会被变量值替代,即可以解析双引号中包含的变量。

③解析速度不同

单引号不需要考虑变量的解析,速度比双引号快.推荐用单引号.

38. echo(),print(),print_r()的区别?
(1)echo 是语法,Output one or more strings,没有返回值;
(2)print 是函数,不能输出数组和对象,Output a stringprint有返回值;
(3)print_r 是函数,可以输出数组。print_r是个比较有意思的函数,可以输出stirngintfloat
arrayobject等,输出array时会用结构表示,print_r输出成功时返回true;而且print_r可以通过print_r($str,true)来,使print_r不输出而返回print_r处理后的值。此外,对于echoprint,基本以使用echo居多,因为其效率比print要高。


39. 按照功能分类说说都有哪些字符串处理函数?这些函数的作用是什么?
A. 字符串输出函数
(1)echo $a,$b,$c......; 是一个语言结构,而不是一个真正的函数。
(2)print($a) 本函数输出字符串。若成功则返回 1,失败返回 0
(3)print_r($a)
(4)var_dump($a); 能输出类型、长度、值
B. 去除字符串首尾空格的函数: trim ltrim rtrim(别名:chop 使用第二个参数,还可以去除指定的字符。
C. 转义字符串函数:addslashes()
D. 获取字符串长度的函数:strlen()
E. 截取字符串长度的的函数:substr()
F. 检索字符串函数: strstr() , strpos()
G. 替换字符串函数:str_replace()


40. 请给出以下问题的正确答案?
1).$arr = array('james', 'tom', 'symfony');请将$arr数组的值用’,’分割并合并成字符串输出?
echo implode(‘,’,$arr);

2).$str = ‘jack,james,tom,symfony’; 请将$str’,’分割,并把分割后的值放到$arr数组中?
$arr = explode(‘,’,$str);

3).$arr = array(3,7,2,1,’d’,’abc’); 请将$arr按照从大到小的顺序排序,并保持其键值不变?
arsort($arr); print_r($arr);

4).$mail = “gaofei@163.com”; 请将此邮箱的域(163.com)取出来并打印,看最多能写出几种方法?
echo strstr($mail,'163');
echo substr($mail,7);
$arr = explode("@",$mail); echo $arr[1];

5). 如果有一个字符串,该字符串是“123234345。请问如何切割掉这个字符串最后一个逗号?

	$newstr = substr($str,0,strlen($str)-1);
	系统自带的函数即可实现这样的效果,两种方法:
	//函数1	substr($str, 0, -1)
	//函数2	rtrim($str, ",")

6). 获取随机数的函数有哪几个?mt_rand() 和 rand()哪个执行速度快?

mt_rand() 和 rand()

mt_rand()速度较快

41.页面字符出现乱码,怎么解决?
1.首先考虑当前文件是不是设置了字符集。查看是不是meta标签中写了charset,如果是php页面还可以看看是不是
header()函数中指定了charset
例如:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
header(“content-type:text/html;charset=utf-8”);

2.如果设置了字符集(也就是charset),那么判断当前文件保存的编码格式是否跟页面设置的字符集保持一致,
两者必须保持统一;

3.如果涉及到从数据库提取数据,那么判断数据库查询时的字符集是否跟当前页面设置的字符集一致,两者必须统一,
例如:mysql_query(“set names utf8”)


42. 正则表达式是什么?php中有哪些常用的跟正则相关的函数?请写出一个email的正则,中国手机号码和座机号码的正则表达式?
正则表达式是用于描述字符排列模式的一种语法规则。正则表达式也叫做模式表达式。
网站开发中正则表达式最常用于表单提交信息前的客户端验证。
比如验证用户名是否输入正确,密码输入是否符合要求,email、手机号码等信息的输入是否合法。

验证邮箱如:

^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$

	/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i
	$pattern = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i";
if(preg_match($pattern,$email)){echo "邮箱正确";}
验证手机号和电话:

电话号码与手机号码同时验证:(^(\d{3,4}-)?\d{7,8})$|(13[0-9]{9})  


php中正则表达式主要用于字符串的分割、匹配、查找和替换操作。

preg系列函数可以处理。具体有以下几个:

string preg_quote ( string str [, string delimiter] )
转义正则表达式字符 正则表达式的特殊字符包括:. \\ + * ? [ ^ ] $ ( ) { } = ! < > | :
preg_replace -- 执行正则表达式的搜索和替换
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )
preg_replace_callback -- 用回调函数执行正则表达式的搜索和替换
mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit] )
preg_split -- 用正则表达式分割字符串
array preg_split ( string pattern, string subject [, int limit [, int flags]] )


43. 如果想过滤掉某个字符串中所有的html标记使用哪个函数?

strip_tags($string);//去掉$string字符串中所以的html标签.

strip_tags($string,'<div><img><em>');//去掉除了<div><img><em>以外的所有标签,即保留字符串中的div、img、em标签。


44. preg_replace()和 str_ireplace()两个函数在使用上有什么不同?preg_split()split()函数如何使用?

  1. str_replace() 函数  
  2.   
  3. 定义:使用一个字符串替换字符串中的另一些字符,对大小写敏感的搜索  
  4. 语法:str_replace(find,replace,string,count)  
  5.   
  6. str_ireplace() 函数  
  7. 定义:使用一个字符串替换字符串中的另一些字符,对大小写不敏感的搜索  
  8. 语法:str_ireplace(find,replace,string,count

preg_split()

preg_ split() 函数用于正则表达式分割字符串。

语法:

array preg_split( string pattern, string subject [, int limit [, int flags]] ) 

返回一个数组,包含 subject 中沿着与 pattern 匹配的边界所分割的子串。

参数说明:
参数 说明
pattern 正则表达式
subject 需要匹配分割的对象
limit 可选,如果指定了 limit ,则最多返回 limit 个子串,如果 limit 是 -1,则意味着没有限制,可以用来继续指定可选参数 flags
flags

设定 limit 为 -1 后可选,可以是下列标记的任意组合(用按位或运算符 | 组合):

  1. PREG_SPLIT_NO_EMPTY:preg_split() 只返回非空的成分
  2. PREG_SPLIT_DELIM_CAPTURE:定界符模式中的括号表达式也会被捕获并返回
  3. PREG_SPLIT_OFFSET_CAPTURE:对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。

split()

split() 函数同 preg_split() 类似,用正则表达式将字符串分割到数组中,返回一个数组,但推荐使用 preg_split() 。

语法:

array split( string pattern, string string [, int limit] )

如果设定了 limit ,则返回的数组最多包含 limit 个单元,而其中最后一个单元包含了 string 中剩余的所有部分。如果出错,则返回 FALSE。

提示

  1. 如果不需要正则表达式的功能,可以选择使用更快(也更简单)的替代函数如 explode() 或 str_split() 。
  2. split() 函数对大小写敏感,如果在匹配字母字符时忽略大小写的区别,请使用用法相同的 spliti() 函数


45. 获取当前时间戳的函数主要有哪些?用PHP打印出今天的时间,格式是2010-12-10 22:21:21
PHP打印出前一天的时间格式是2010-12-10 22:21:21?如何把2010-12-25 10:30:25变成unix时间戳?

前一天:echo date ("Y-m-d H:i:s" ,strtotime(‘-1,days’)); 
前一天:print date("Y-m-d H:i:s",time()-24*3600);


今天:date('Y-m-d H:i:s',time());

$unix_time = strtotime("2009-9-2 10:30:25");//变成unix时间戳
echo date("Y-m-d H:i:s",$unix_time);//格式化为正常时间格式


46. url中用get传值的时候,若中文出现乱码,应该用哪个函数对中文进行编码?
用户在网站表单提交数据的时候,为了防止脚本攻击(比如用户输入<script>alert111);</script>),php端接收数据的时候,应该如何处理?
使用urlencode()对中文进行编码,使用urldecode()来解码。 
使用htmlspecialchars($_POST[‘title’])来过滤表单传参就可以避免脚本攻击。


47. 连接数据库操作的步骤是什么?每一步的返回值是什么数据类型?尤其是mysql_query()返回什么数据类型?

连接数据库操作的步骤: 

  1. 连接MySql数据库
  2. 选择数据库(可选)
  3. 执行sql语句
  4. 获取结果集
  5. 关闭连接

  1. 1、连接MySql数据库:mysqli_connect()
         参数:   ①主机地址
                       ②mysql用户名
                      ③mysql密码
                      ④选择连接的数据库
                      ⑤端口号
    连接成功,返回资源类型的标志符号;如果连接失败,返回false。
  2.       $conn=mysqli_connect("localhost","wrong_user","my_password","my_db")// 检查连接 
    if (mysqli_connect_errno($conn)
         
         die(
    "数据库连接错误,错误信息: " mysqli_connect_error()); 
  3. mysqli_connect_errno(); 返回上次连接数据库错误的错误号,连接成功返回0
      mysqli_connect_error(); 返回上次连接数据库的错误信息
  4. 合并的写法(Step1+Step2):连接数据库同时判断
    $conn = mysqli_connect("localhost", "wrong_user", "my_password", "my_db") or die("数据库连接失败!失败信息:".mysqli_connect_error($conn));
  5. 设置字符集编码格式:mysqli_set_charset($conn,"utf8") or die("数据库编码集设置失败!");
  6. 2、选择数据库(可选):mysqli_select_db($conn, "mydb") or die("数据库选择失败!");
  7. 连接成功,返回true;连接失败,返回false

  8. 3、执行sql语句:$res=mysqli_query($mysql);         
  9. 增、删、改,将返回布尔类型是否成功, 返回上一次操作时受影响的行数;查询,将返回资源结果集
  10. 4、获取结果集:mysqli_fetch_row($res) 返回索引数组,mysqli_fetch_object($res)返回对象, mysqli_fetch_assoc($res) 返回关联数组,mysqli_fetch_array($res) 返回关联数组和索引数组(不常用
  11. 5、关闭连接:关闭资源与结果集mysqli_free_result($res)和mysqli_close($conn)

mysql_query一般是用过来给MySQL递交一个SQL语句去执行的 , mysql_query()如果里面放的是查询之类的语句,那返回的是资源,说白了就是你要查的数据结果集;如果里面放的是增删改类的语句,那返回的是true或者false了。

48. 说说mysql_fetch_row() mysql_fetch_assoc()mysql_fetch_array之间有什么区别?
第一个是返回结果集中的一行作为索引数组,第二个是返回关联数组,而第三个既可以返回索引数组也可以返回关联数组,取决于它的第二个参数 MYSQL_BOTH,MYSQL_NUM,MYSQL_ASSOC, 默认为MYSQL_BOTH
$sql =”SELECT * from Person WHERE Lastname='Adams'”;
$result = mysql_query($sql);

print_r(mysql_fetch_array($result));

结果:

Array  
(
[0] => Adams
[LastName] => Adams
[1] => John
[FirstName] => John
[2] => London
[City] => London
) 

49. 请说出目前学过的返回是资源的函数?
答: fopen(打开文件)
    mysql_connect  — 打开一个到 MySQL 服务器的连接
    mysql_query();只有这执行select的时候成功,才返回资源,失败返回FALSE

imagecreatefromjpeg(png gif) — 从 JPEG 文件新建一图像
    imagecreatetruecolor — 新建一个真彩色图像
    imagecopymerge — 拷贝并合并图像的一部分
    imagecopyresized  — 拷贝部分图像并调整大小

50. 打开、关闭文件分别是什么函数? 文件读写是什么函数?删除文件是哪个函数? 
判断一个文件是否存在是哪个函数?新建目录是哪个函数?

fopen()文件打开,fclose()文件关闭,fread()文件读取,fwrite()文件写入 unlike()删除文件,file_exists(文件是否存在),kmdir(新建目录)
51. 文件上传需要注意哪些细节?怎么把文件保存到指定目录?怎么避免上传文件重名问题?
1.首现要在php.ini中开启文件上传;
2.php.ini中有一个允许上传的最大值,默认是2MB。必要的时候可以更改;
3.上传表单一定要记住在form标签中写上enctype="multipart/form-data"
4. 提交方式 method 必须是 post
5. 设定 type="file" 的表单控件;
6.要注意上传文件的大小MAX_FILE_SIZE、文件类型是否符合要求,上传后存放的路径是否存在。

可以通过上传的文件名获取到文件后缀,然后使用时间戳+文件后缀的方式为文件重新命名,这样就避免了重名。
可以自己设置上传文件的保存目录,与文件名拼凑形成一个文件路径,使用move_uploaded_file(),就可以完成
将文件保存到指定目录。


52. $_FILES是几维数组?第一维和第二维的索引下标分别是什么?批量上传文件的时候需要注意什么?
二维数组。第一维是上传控件的name,二维下标分别为name/type/tmp_name/size/error.

批量上传时,那么二维下标就是数组,而并非是字符串

53. header()函数主要的功能有哪些?使用过程中注意什么?
答:1、使用header函数进行跳转页面;
  header('Location:'.$url);
  其中$url就是将要跳转的url了。
  这种用法的注意事项有以下几点:
 

  • Location和":"之间不能有空格,否则会出现错误(注释:我刚测试了,在我本地环境下,没有跳转页面,但是也没有报错,不清楚什么原因);
  • 在用header前不能有任何的输出(注释:这点大家都知道的,如果header之前有任何的输出,包括空白,就会出现header already sent by xxx的错误);
  • header 后面的东西还会执行的;
    2、使用header声明content-type
      header('content-type:text/html;charset=utf-8');
      这个没有什么好说的;
    3、使用header返回response 状态码
      header(sprintf('%s %d %s', $http_version, $status_code, $description));
      样式就是这样的;
      例如:header('HTTP/1.1 404 Not Found');
    4、使用header在某个时间后执行跳转
      header("Refresh: {$delay}; url={$url}");
      其中$delay就是推迟跳转的时间,$url为需要跳转的url
      例如:header('Refresh: 10; url=http://www.example.org/'); 意思为10s后跳转到http://www.eexample.org这个网站
    5、使用header控制浏览器缓存
      header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
      header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT");
      header("Cache-Control: no-cache, must-revalidate");
      header("Pragma: no-cache");
    6、执行http验证
      header('HTTP/1.1 401 Unauthorized');
      header('WWW-Authenticate: Basic realm="Top Secret"');
    7、使用header进行下载操作
      header('Content-Type: application/octet-stream');//设置内容类型
      header('Content-Disposition: attachment; filename="example.zip"'); //设置MIME用户作为附件下载 如果将attachment换成inline意思为在线打开
      header('Content-Transfer-Encoding: binary');//设置传输方式
      header('Content-Length: '.filesize('example.zip'));//设置内容长度
      // load the file to send:
      readfile('example.zip');//读取需要下载的文件

    54. 文件下载的时候如何使用header()函数?
    答:header("content-type: application/octet-stream;charset=UTF-8"); //在这里加utf-8和在上面定义有什么区别?、??
    header("accept-ranges: bytes");
    header("accept-length: ".filesize($filedir.$filename));
    header("content-disposition: attachment; filename=".$filedir.$filename);


    55. 什么是ajaxajax的原理是什么?ajax的核心技术是什么?ajax的优缺点是什么?
    ajaxasynchronous javascript and xml的缩写,是javascriptxmlcssDOM等多个技术的组合。'$'jQuery的别名.

    页面中用户的请求通过ajax引擎异步地与服务器进行通信,服务器将请求的结果返回给这个ajax引擎,
    最后由这个ajax引擎来决定将返回的数据显示到页面中的指定位置。Ajax最终实现了在一个页面的指定位置可以加载另一个页面所有的输出内容。
    这样就实现了一个静态页面也能获取到数据库中的返回数据信息了。所以ajax技术实现了一个静态网页在不刷新整个页面的情况下与服务器通信,
    减少了用户等待时间,同时也从而降低了网络流量,增强了客户体验的友好程度。

    Ajax的优点是:
    1. 减轻了服务器端负担,将一部分以前由服务器负担的工作转移到客户端执行,利用客户端闲置的资源进行处理;
    2. 在只局部刷新的情况下更新页面,增加了页面反应速度,使用户体验更友好。
    Ajax的缺点是不利于seo推广优化,因为搜索引擎无法直接访问到ajax请求的内容。
    ajax的核心技术是XMLHttpRequest,它是javascript中的一个对象。

    56. jquery是什么?jquery简化ajax后的方法有哪些?
    jQueryJavascript的一种框架。
    $.get(),$.post(),$.ajax()$jQuery对象的别名。

    代码如下:
    $.post(异步访问的url地址 , {'参数名' : 参数值} , function(msg){
    $("#result").html(msg);
    });

    $.get(异步访问的url地址 , {'参数名' : 参数值} , function(msg){
    $("#result").html(msg);
    });

    $.ajax({
    type: "post",
    url: loadUrl,
    cache:false,
    data: "参数名=" + 参数值,
    success: function(msg) {
    $("#result").html(msg);
    }
    });


    57. 什么是会话控制?
    简单地说会话控制就是跟踪和识别用户信息的机制。会话控制的思想就是能够在网站中跟踪一个变量,通过这个变量,
    系统能识别出相应的用户信息,根据这个用户信息可以得知用户权限,从而展示给用户适合于其相应权限的页面内容。
    目前最主要的会话跟踪方式有cookiesession

    58. 会话跟踪的基本步骤
    1).访问与当前请求相关的会话对象
    2).查找与会话相关的信息
    3).存储会话信息
    4).废弃会话数据

    59. 使用cookie的注意事项有哪些?
    1) setcookie()之前不可以有任何页面输出,就是空格,空白行也不可以;
    2) setcookie()后,在当前页面调用$_COOKIE['cookiename']不会有输出,必须刷新或到下一个页面才可以看到cookie值;
    3) 不同的浏览器对cookie处理不同,客户端可以禁用cookie,浏览器也可以闲置cookie的数量,一个浏览器能创建的cookie数量最多300个,并且每个不可以超过4kb
    每个web站点能设置的cookie总数不能超过20个。
    4) cookie是保存在客户端的,用户禁用了cookie,那么setcookie就不会起作用了。所以不可以过度依赖cookie

    60. 使用session的时候,通过什么来表示当前用户,从而与其他用户进行区分?
    sessionid,通过session_id()函数可以取得当前的session_id

    61. sessioncookie的使用步骤分别是什么?什么是sesssioncookie的生命周期?sessioncookie的区别是什么?
    cookie是保存在客户端机器的,对于未设置过期时间的cookiecookie值会保存在机器的内存中,只要关闭浏览器则
    cookie自动消失。如果设置了cookie的过期时间,那么浏览器会把cookie以文本文件的形式保存到硬盘中,
    当再次打开浏览器时cookie值依然有效。

    session是把用户需要存储的信息保存在服务器端。每个用户的session信息就像是键值对一样存储在服务器端,
    其中的键就是sessionid,而值就是用户需要存储信息。服务器就是通过sessionid来区分存储的session信息是
    哪个用户的。

    两者最大的区别就是session存储在服务器端,而cookie是在客户端。session安全性更高,而cookie安全性弱。

    sessionweb开发中具有非常重要的份量。它可以将用户正确登录后的信息记录到服务器的内存中,当用户以此身份
    访问网站的管理后台时,无需再次登录即可得到身份确认。而没有正确登录的用户则不分配session空间,即便输入了
    管理后台的访问地址也不能看到页面内容。通过session确定了用户对页面的操作权限。

    使用session的步骤:
    1. 启动session
    使用session_start()函数来启动。
    2. 注册会话:
    直接给$_SESSION数组添加元素即可。
    3. 使用会话:
    判断session是否为空或者是否已经注册,如果已经存在则像普通数组使用即可。
    4. 删除会话:
    1.可以使用unset删除单个session
    2.使用$_SESSION=array()的方式,一次注销所有的会话变量;
    3.使用session_destroy()函数来彻底销毁session


    cookie怎么使用?
    1. 记录用户访问的部分信息
    2. 在页面间传递变量
    3. 将所查看的internet页存储在cookies临时文件夹中,可以提高以后的浏览速度。

    创建cookie
    setcookie(string cookiename , string value , int expire);
    读取cookie
    通过超级全局数组$_COOKIE来读取浏览器端的cookie的值。
    删除cookie:有两种方法
    1.手工删除方法:
    右击浏览器属性,可以看到删除cookies,执行操作即可将所有cookie文件删除。
    2.setcookie()方法:
    跟设置cookie的方法一样,不过此时将cookie的值设置为空,有效时间为0或小于当前时间戳。

    62. 如何设置一个cookie的名字为username,值为jack,并且让此cookie一周后失效?
    一个浏览器最多可以产生多少个cookie,每个cookie文件最大不能超过多少?
    setcookie(‘username’,’jack’,time()+7*24*3600);
    最多可以产生20cookie,每个最多不超过4K


    63. 设置或读取session之前,需要做什么?
    可以直接在php.ini中开启session.auto_start = 1或者在页面头部用session_start();
    开启sessionsession_start()前面不能有任何输出,包括空行。


    64. 在实际开发中,session在哪些场合使用?
    session用来存储用户登录信息和用在跨页面传值。
    1)常用在用户登录成功后,将用户登录信息赋值给session
    2)用在验证码图片生成,当随机码生成后赋值给session

    65. 注销session会话的形式有几种?
    unset() 
    $_SESSION=array();
    session_destroy();


    • 14
      点赞
    • 82
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值