2018-06-26 基础应用
(1)PHP mysql_num_fields() 函数
mysql_num_fields()返回结果集中字段的数。
示例:
设有一个数据库mydb中有一个表tb1,表中有六个字段,主键为ID,有十条记录,ID从0到9,以下代码输出结果是? ( )
$link = mysql_connect("localhost","mysql_user", "mysql_password") or die("Could not connect: " . mysql_error());
$result = mysql_query("SELECT id,name,age FROM mydb、tb1 where id < 5") or die("Could not query: . mysql_error());
echo mysql_num_fields($result);
mysql_close($link);
选项:A.6 B.5 C.4 D.3
正确答案:D。mysql_num_fields()返回查询的字段数,sql语句查询了3个字段。不要被题目的表中有6个字段迷惑。
(2)浮点数
$sum = 13;
$len = 3;
var_dump($sum/$len); //结果为 float(4.3333333333333)
var_dump(number_format($sum / $len,1));//结果为:string(3) "4.3"
var_dump(floatval(number_format($sum / $len,1)));//结果为:float(4.3)
var_dump((float)(number_format($sum / $len,1)));//结果为:float(4.3)
var_dump(round($sum/$len,1));//结果为:float(4.3)
结论:
number_format()函数是四舍五入处理,处理后是字符串;
其它类型转换成浮点数的方式可以使用floatval()和(float);
round()函数是四舍五入方式,处理后是浮点型。
(3)类的一些函数
get_class 返回一个对象的类的名称
get_object_vars 得到给定对象的属性
get_class_methods 获取类方法的名字
(4)关于cookie
如果不给cookie设置过期时间会怎么样?
A.立刻过期 B.永不过期 C.cookie 无法设置 D.在浏览器会话结束时过期
正确答案:D。
(5)关于php路径
问题:
假设你有一个名为'index.php'的文件,路径为c:/apache/htdocs/phptutor/index.php。
那么basename()、$_SERVER['PHP_SELF']、__FILE__的返回值分别为什么?
答案:
__FILE__ 常量包含当前文件的完整路径和文件名。返回结果为 c:/apache/htdocs/phptutor/index.php
basename() 函数返回路径中的文件名部分。返回结果为 index.php
$_SERVER['PHP_SELF'] 返回当前执行脚本的相对于web目录的绝对路径和文件名。返回结果为 /phptutor/index.php
(6)php 类与对象
实例化类的时候的括号可以有,而又可以没有。
class Foo { private $name; public function __construct($name='22') { $this->name = $name; } public function getName(){ echo $this->name . '<br/>'; } public function __destruct() { echo 'Destroying: ', $this->name, PHP_EOL . '<br/>'; } } $foo = new Foo('hello'); $foo->getName(); $bar = new Foo(); $bar->getName(); $bar = new Foo; $bar->getName();
结果为:
hello
22
Destroying: 22
22
Destroying: 22
Destroying: hello
结论:
1、实例化时,可以有括号,也可以没有括号;
2、第一个实例化的析构会在最后执行。
3、__construct在类被实例化时就会被调用,无需调用其他方法就会被触发。
(7)取余运算
echo 24%(-5);//结果为 4
echo (-24)%5;//结果为 -4
echo -24%5;//结果为 -4
echo -24%(-5);//结果为 -4
echo (-24)%(-5);//结果为 -4
echo echo -24/-5;//结果为 4.8
echo 24/(-5);//结果为 -4.8
echo (-24)/5;//结果为 -4.8
结论:
1、被除数为负数时,不管除数是正数还是负数,结果都是负数(在PHP中,取模运算符%的结果和被除数的符号(正负号)相同);
2、-号优先级大于%号,以上的括号都可以去掉。
3、除号/按照正常计算。
(8)PHP安全有关问题
下列PHP配置项中,哪一个和安全最不相关?
A、open_basedir
B、register_globals
C、disable_functions
D、file_uploads
答案:D。
open_basedir 可将用户访问文件的活动范围限制在指定的区域 ,通常是其家目录的路径,也 可用符号 "." 来代表当前目录。注意用open_basedir 指定的限制实际上是前缀 , 而不是目录名。 举例来说 : 若 "open_basedir = /dir/user", 那么目录 "/dir/user" 和 "/dir/user1"都是 可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名。例如设置成 : "open_basedir = /dir/user/"
register_globals 的意思就是注册为全局变量 ,所以当 On 的时候,传递过来的值会被直接的注册为全局变量直接使用,而 Off 的时候,我们需要到特定的数组里去得到它。 1.PHP 4.2.0 版开始配置文件中 register_globals 的默认值从 on 改为 off 了,虽然你可以设置它为 On ,但是当你无法控制服务器的时候,你的代码的兼容性就成为一个大问题,所以,你最好从现在就开始用 Off 的风格开始编程。 2. 当 register_globals 打开以后,各种变量都被注入代码,例如来自 HTML 表单的请求变量。再加上 PHP 在使用变量之前是无需进行初始化的,这就使得更容易写出不安全的代码。 当打开时,人们使用变量时确实不知道变量是哪里来的,只能想当然。但是 register_globals 的关闭改变了这种代码内部变量和客户端发送的变量混杂在一起的糟糕情况。
disable_functions 限制程序使用一些可以直接执行系统命令的函数 ,如 system , exec , passthru , shell_exec , proc_open 等等。所以如果想保证服务器的安全,请将这个函数加到 disable_functions 里或者将安全模式打开吧
file_uploads , PHP 文件上传功能记录 file_uploads 指令决定是否启用,默认值: On 。
(9)DML语句
DML(data manipulation language):
它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言
DDL(data definition language):
DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用
DCL(Data Control Language):
是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL 。
(10)哪种方式可以用于服务器共享session?
利用NFS共享Session数据、基于数据库的Session共享、基于Cookie的Session共享、使用类似BIG-IP的负载设备来实现资源共享。
1. 基于NFS的Session共享
NFS是Net FileSystem的简称,最早由Sun公司为解决Unix网络主机间的目录共享而研发。
这个方案实现最为简单,无需做过多的二次开发,仅需将共享目录服务器mount到各频道服务器的本地session目录即可,缺点是NFS依托于复杂的安全机制和文件系统,因此并发效率不高,尤其对于session这类高并发读写的小文件,会由于共享目录服务器的io-wait过高,最终拖累前端WEB应用程序的执行效率。
2. 基于数据库的Session共享
首选当然是大名鼎鼎的Mysql数据库,并且建议使用内存表Heap,提高session操作的读写效率。这个方案的实用性比较强,相信大家普遍在使用,它的缺点在于session的并发读写能力取决于Mysql数据库的性能,同时需要自己实现session淘汰逻辑,以便定时从数据表中更新、删除 session记录,当并发过高时容易出现表锁,虽然我们可以选择行级锁的表引擎,但不得不否认使用数据库存储Session还是有些杀鸡用牛刀的架势。
3. 基于Cookie的Session共享
4. 基于Memcache的Session共享
Memcache由于是一款基于Libevent多路异步I/O技术的内存共享系统,简单的Key + Value数据存储模式使得代码逻辑小巧高效,因此在并发处理能力上占据了绝对优势。另外值得一提的是Memcache的内存hash表所特有的Expires数据过期淘汰机制,正好和Session的过期机制不谋而合,降低了过期Session数据删除的代码复杂度,对比“基于数据库的存储方案”,仅这块逻辑就给数据表产生巨大的查询压力。
(11)在PHP面向对象中,下面关于final修饰符描述:
final---用于类、方法前。
final类---不可被继承。
final方法---不可被覆盖。
不能使用final标识成员属性。
(12)PHP 地址符&的使用
$a="hello";
$b = &$a;
unset($b);
var_dump($a);//string(5) "hello"
$a="hello";
$b= &$a;
$b = null;
var_dump($a);//NULL
$a="hello";
$b = &$a;
$a = 'world';
var_dump($b);//string(5) "world"
(13)preg_match()函数
$str = 'Eat to live, but not live to eat';
echo preg_match("/^to/", $str);//结果为0
preg_match()函数,匹配成功返回1,匹配失败返回0,遇到错误返回false。
(14)php fopen打开文件的方式有:
'r' 只读方式打开,将文件指针指向文件头。
'r+' 读写方式打开,将文件指针指向文件头。
'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。
'x+' 创建并以读写方式打开,其他的行为和 'x' 一样。
注意:没有rw这种方式。
(15)比较字符串函数: