T1
一、填空题
1.PHP是用什么语言编写的?
:脚本语言
2. LAMP的全称是?
:linux 、apache、 mysql、 php
3. PHP的三种注释方式?
:#、//、/**/
4. PHP使用什么符号定义变量?
:$
二、简答题
1. 请列出PHP的8种数据类型。?
:整型、浮点型、字符串、数组、逻辑、对象、null、资源型
:资源 resource 是一种特殊变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。
2. 写出如下程序的输出结果?
<?
$test = ‘aaaaaa’;
$abc = & $test;
unset($test);
echo $abc;
?>
:aaaaaa
3.
4.$I=2,编程实现判断$I是否为整型,是则输出$I,不是则输出“非整型变量”?
<?
$l=2
If(is_int($l)){
Echo $l;
}else{
Echo “非整型变量”;
}
?>
bool is_int ( mixed $var ):检测变量是否为整数
bool is_integer ( mixed $var ):为is_int()的别名
bool is_float ( mixed $varvarchar2最大长度 ):检测变量是否为浮点型
bool is_real (mixed $var):为is_float()的别名
bool is_scalar ( mixed $var ):检测变量是否是一个标量
标量:标量变量是指那些包含了 integer、float、string 或 boolean的变量,而 array、object 和resource 则不是标量
is_array is_bool is_callable is_double is_float is_along
is_numberic is_object is_resource is_string
T2
php基础部分
1. 以下php代码的输出结果?
$i=10;
$n = $i++;
echo $n, $i++, ++$i
:10,11,13
2. include与require的区别?
: require 的使用方法如 require("MyRequireFile.php"); 。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。
include 使用方法如 include("MyIncludeFile.php"); 。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。
他们两个的用途是完全一样的,不一定非得哪个放在最前面哪个放在中间。他们最根本的区别在于错误处理的方式不一样。
require一个文件存在错误的话,那么程序就会中断执行了,并显示致命错误
include一个文件存在错误的话,那么程序不会中端,而是继续执行,并显示一个警告错误。
3. 以下代码,是判断字符串中是否存在#符号, 错误之处在于?
if ( strpos($str, “#”)) { … }
: 如果#在字符串的首位那就是返回0,php会将0自动转换成false进行判断,因此错误,正确写法是:if ( strpos($str, “#”) !== false) { … }
4. 程序代码使用utf-编码,以下代码输出结果是什么?strlen函数是计算字符串的字节数还是字符数?
$str = “您好hello”; echo strlen($str);
:utf-8:对英文使用8位(1个字节),对中文使用24位(3个字节)来编码,对于英文较多的论坛使用utf-8比较节省空间
GBK:使用双字节编码,不论中英文字符,为了区分中文,将其最高位定义为1
strlen: 返回给定的字符串 string 的长度,计算的是字节数
5. 什么是时间戳? 时间戳能代表的最小年份和最大年份是多少?
:时间戳是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数;时间戳能代表的最小年份是1970,最大年份是2038年
int time ( void )返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。
6. php.ini配置文件中magic_quotes_gpc, magic_quotes_runtime的作用是什么?应该开启还是关闭?
:PHP magic_quotes_gpc=on的情况:我们可以不对输入和输出数据库的字符串数
据作addslashes()和stripslashes()的操作,数据也会正常显示。你对输入的数据作了addslashes()处理,那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。PHP magic_quotes_gpc=off的情况:使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出,因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。
magic_quotes_runtime 转义字符:当你的数据中有一些 \ ” ‘ 这样的字符要写入到数据库里面,又想不被过滤掉的时候,它就很有用,会在这些字符前加上\
7. 现有一个文本体积大约2G, 计算机内存只有1G, 需要使用php对数据进行分析,如何读取如此体积的文件?分行读取,fopen、fread当然还可以使用fseek
fopen() 将 filename 指定的名字资源绑定到一个流上。
string fread ( resource $handle , int $length ):fread() 从文件指针 handle 读取最多 length 个字节。
Handle:文件系统指针,是典型地由 fopen() 创建的 resource(资源)。
8. php的序列化各反序列化,有何用途?
序列serialize是为了产生一个可存储的值,便于存储除resource类型的所有数据,反序列unserialize即将序列的数据还原为原来的值
9. php的魔术方式包含哪些(越多越好)? 在何情况下被自动调用?
以下为总结的在使用类时可用的魔术方法,魔术方法会在某种待定情况下被自动调用,但前提是该方法被定义。有些方法不一定要定义在类中,还可以写在程序中作为一个函数。
__construct() 构造函数,创建对象时自动调用
__destruct() 析构函数,不需要创建
__clone() 克隆函数,调用clone方法时自动调用
__set() 当程序试图写入一个不存在或不可见的成员变量时自动调用。该函数在类中定义时必须有两个参数:变量称和变量值 。
__get() 当程序调用一个未定义或不可见的成员变量时自动调用__get()来读取变量值。定义时必有有一个参数:变量名
__call() 当程度试图调用不存在或不可见的成员方法时,自动调用__call()来存储方法名及其参数。该方法包含两个参数:方法名和方法参数。其中方法参数以数组形式存在。
__sleep() 使用serialize()实现序列化对象时,先执行该方法,清除对象并返回一个该对象中所有变量的数组。
__wakeup() 使用unserialize()还原一个被序列化的对象时,先执行该方法,恢复在序列化中可能丢失的数据库连接及相关工作
__toString() 当使用echo或print输出对象时,将对象转化为字符串
__autoload() 调用未被实例化的类时,自动调用,在指定路径下查和该类名称相同的文件。
10. ArrayAccess接口的作用是什么?
让对象使用起来像一个PHP数组,而不用使用对象操作符->直接使用数组符号[]就可以了
11. php类的静态成员变量与非静态成员变量有何区别?
静态成员变量 :可以用类名直接访问,也可以用类的实例化来访问,静态成员变量是所有对象共用的,只有一份,不会为每一个对象都分配一个不同的值
非静态成员变量:不可以直接使用类名访问, 需用实例化来访问,为对象独有的
非静态成员变量:不可以直接使用类名访问, 需用实例化来访问,为对象独有的
12. 如何记录php程序错误至系统日志(如windows的事件查看器,Linux的syslog)?
编辑php.ini配置文件,修改或添加
log_errors = On
error_log = syslog
log_errors = On
error_log = syslog
13. SQL注入最有效的防御方式是什么?
参数化查询,参数格式是以 “?” 字符加上参数名称而成。例如:UPDATE myTable SET c1 = ?c1, c2 = ?c2, c3 = ?c3 WHERE c4 = ?c4
因为:1、参数过滤2.执行计划重用
mysql数据库部分(mysql版本为 5.0+)
1. 假设mysql数据表使用utf-8编码, 数字类型均使用指出以下各个数据类型的范围和长度
类型 字节数 值范围
unsigned TinyINT(2)
unsigned SmallINT(3)
unsigned MediumINT(4)
unsigned INT(5)
unsigned BigINT(6)
2. 假设mysql数据表使用utf-8编码, 填写以下表格
类型 最大字节数 最长字符数
char(100)
varchar(200)
3. char(100)与varchar(100)有何区别?
char(n)是定长格式,格式为char(n)的字段固定占用n个字符宽度,如果实际存放的数据长度超过n将被截取多出部分,如果长度小于n就用空字符填充。
varchar(n)是变长格式,这种格式的字段根据实际数据长度分配空间,不浪费对于的空间,但是搜索数据的速度会麻烦一点。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论