赞
踩
来源于网络上的集锦,建议收藏点赞关注,慢慢看,蟹蟹
1,Http 和Https的区别
第一:http是超文本传输协议,信息是明文传输,https是具有安全性的ssl加密传输协议
第二:http和https使用的是完全不同的连接方式,端口也不一样,前者80 或者443
第三:http连接很简单,是无状态的。https协议是由ssl+http协议构建的可进行加密传输,身份认证的网络协议。
2.什么方法来加快页面的加载速度
1,用到服务器资源时在打开,不用时,立即关闭服务器资源。
2,数据库添加索引
3,页面可生成静态
4,图片等大文件单独放在一个服务器
5,能不查询数据库的尽量不去数据取数据,可以放在缓存中。
3.表单中 get与post提交方法的区别?
答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息.
4.echo ,print,print_r 的区别:
echo 是php语句,无返回值。
print,print_r是函数,有返回值。
print() 只能打印出简单类型变量的值(如int,string)
print_r() 可以打印出复杂类型变量的值(如数组,对象)
echo 输出一个或者多个字符串
5.session与cookie区别
session与cookie相同:跨页面、不跨用户
session与cookie不相同:
1、session可以存储任意类型的数据,但cookie只能存储字符串
2、cookie产生在服务器端、存储在客户端
session产生在服务器端、存储在服务器端
6.魔术常量
答案:
__LINE__文件中的当前行号。
__FILE__文件的完整路径和文件名。
__FUNCTION__函数名称
__CLASS__类的名称
__METHOD__类的方法名
7.数据库中的事务是什么?
答:事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。
8.1优化MYSQL数据库的方法。
1、选择合适的字段的数据类型
1)能用数字不用字符串
2)char、varchar、text 能用varchar不用char
3)给字段加not null 避免在表中出现NULL关键字(default 值)
2、选择合适的字段充当主键
1)建议每张表必须有主键
2)用数字类型的字段充当主键
拆分表
拆分字段,将文章的标题与内容分开
2)拆分记录,将今年的记录与往年的记录分开
给字段合理添加索引
a.格式:
(普通索引)->
创建:CREATE INDEX <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)
创表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引字段))
(唯一索引)->
创建:CREATE UNIQUE <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)
创表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引字段))
(主键)->
它是唯一索引,一般在创建表是建立,格式为:
CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])
5、事务处理:
a.保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败都失败
mysql_query("BEGIN");
mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')";
mysql_query("SELECT * FROM `orderinfo` where customerid=".$id");
mysql_query("COMMIT");
6、锁定表,优化事务处理:
a.我们用一个 SELECT 语句取出初始数据,通过一些计算,用 UPDATE 语句将新值更新到表中。
包含有 WRITE 关键字的 LOCK TABLE 语句可以保证在 UNLOCK TABLES 命令被执行之前,
不会有其它的访问来对 inventory 进行插入、更新或者删除的操作
mysql_query("LOCK TABLE customerinfo READ, orderinfo WRITE");
mysql_query("SELECT customerid FROM `customerinfo` where id=".$id);
mysql_query("UPDATE `orderinfo` SET ordertitle='$title' where
customerid=".$id);
mysql_query("UNLOCK TABLES");
7、使用外键,优化锁定表
a.把customerinfo里的customerid映射到orderinfo里的customerid,
任何一条没有合法的customerid的记录不会写到orderinfo里
CREATE TABLE customerinfo(
customerid INT NOT NULL,
PRIMARY KEY(customerid)
)TYPE = INNODB;
CREATE TABLE orderinfo(
orderid INT NOT NULL,
customerid INT NOT NULL,
PRIMARY KEY(customerid,orderid),
FOREIGN KEY (customerid) REFERENCES customerinfo
(customerid) ON DELETE CASCADE
)TYPE = INNODB;
注意:'ON DELETE CASCADE',该参数保证当customerinfo表中的一条记录删除的话同时也会删除order
表中的该用户的所有记录,注意使用外键要定义事务安全类型为INNODB;
8、优化查询语句
a用内连接代替子查询代替子查询,用sphinx代替like模糊查询
b最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作
例子1:
SELECT * FROM order WHERE YEAR(orderDate)<2008;(慢)
SELECT * FROM order WHERE orderDate<"2008-01-01";(快)
例子2:
SELECT * FROM order WHERE addtime/7<24;(慢)
SELECT * FROM order WHERE addtime<24*7;(快)
例子3:
SELECT * FROM order WHERE title like "%good%";
SELECT * FROM order WHERE title>="good" and name<"good";
缓存,静态化
选择合适存储引擎用Innodb增删改,用myisam查询
主从数据库
负载均衡
最好拿数字类型的字段充当where条件
最好拿相同类型的字段进行比对(避免发生数据类型的转换)
不要在具有索引的字段上添加数据库函数(索引失效)
8.2请简述项目中优化sql语句执行效率的方法,从哪些方面,sql语句性能如何分析?
答:(1)选择最有效率的表名顺序
(2)WHERE子句中的连接顺序
(3)SELECT子句中避免使用‘*’
(4)用Where子句替换HAVING子句
(5)通过内部函数提高SQL效率
(6)避免在索引列上使用计算。
(7)提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉。
9.对于大流量网站,采用什么方法解决访问量问题?
1,确认服务器的硬件是否足够支持当前的流量
2,优化数据库的访问
3,禁止外部的盗链
4,控制大文件的下载
5,使用不同主机分流主要流量
6,使用流量分析统计软件
10.一个函数,能够遍历一个文件夹下的所有文件和子文件夹(20分)
- function dir_recurse($dir) {
- $i = 1;
- if($handle = opendir($dir)) {
- while(false !== ($file = readdir($handle))) {
- if($file != "."&& $file != ".." ) {
- if(is_dir($dir."/".$file) == true) {
- $fullpath = $dir."/".$file;
- dir_recurse($fullpath);
- echo "$fullpathn";
- $i++;
- }else {
- $fullpath = $dir."/".$file;
- echo "$fullpathn";
-
- $i++;
- }
- }
- }
- closedir($handle);
- }
- }
10.2写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
- function my_scandir($dir){
- $files = array();
- if ( $handle = opendir($dir) ) {
- while ( ($file = readdir($handle)) !== false ) {
- if ( $file != ".."&& $file != "." ) {
- if ( is_dir($dir . "/" . $file) ) {
- $files[$file] = scandir($dir . "/" . $file);
- }else {
- $files[] = $file;
- }
- }
- }
- closedir($handle);
- return $files;
- }
- }
11、能够使HTML和PHP分离开使用的模板(1分)
答:Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate
12、使用哪些工具进行版本控制?(1分)
答:cvs,svn,vss;
13、如何实现字符串翻转?(3分)
英文:
strrev($a)
中文或其他文字:
中文:GB2312, 代码是使用GB2312编码
- <?php
- function reverse($str)
- {
- $ret = "";
- len=mb s trwidth( len=mbstrwidth(len = mb_strwidth(str,"GB2312");
- for(i=0; i=0;i=0; i< len; len;len; i++)
- {
- arr[]=mb s ubstr( arr[]=mbsubstr(arr[] = mb_substr(str, $i, 1, "GB2312");
- }
- return implode("", array_reverse($arr));
- }
- print_r(reverse("你好"));
14.PHP的意思(送1分)
PHP是一个基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页
15.MYSQL取得当前时间的函数是?,格式化日期的函数是(2分)
答:now(),date()
16.用PHP写出显示客户端IP与服务器IP的代码1分)
答:打印客户端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者: getenv('REMOTE_ADDR');
打印服务器IP:echo gethostbyname("http://www.bolaiwu.com")
17、语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们?
答:require->require是无条件包含也就是如果一个流程里加入require,无论条件成立与否 都会先执行require
include->include有返回值,而require没有(可能因为如此require的速度比include快)
注意:包含文件不存在或者语法错误的时候require是致命的,include不是
18.http请求返回状态码
400 请求无效
401 未授权
403 请求被禁止
404 请求资源不存在
405 请求资源被禁止
406 无法接受
407 要求代理身份验证
500 Internal Server Error 服务端源代码错误
600 源站没有返回响应头部,只返回实现内容
19,linux授权码:
600 属主有读写权限
644 属主有读写权限,属性组有读权限
700 属主有读写执行权限
755 属主有读写执行权限,属性组有读,执行权限
711 属主有读写执行权限,属性组有执行权限
666 所有用户都有文件的读写权限
777 所有用户都有文件的读写执行权限
20.有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?($1分)
答:方法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");
21.在PHP中error_reporting这个函数有什么作用? (1分)
答:设置错误级别与错误信息回报
22.JS表单弹出对话框函数是?获得输入焦点函数是? (2分)
答:弹出对话框: alert(),prompt(),confirm()
获得输入焦点 focus()
23.foo()和@foo()之间有什么区别?(1分)
答:@foo()控制错误输出
24、mysql_fetch_row() 和mysql_fetch_array之间有什么区别? (1分)
答:mysql_fetch_row是从结果集取出1行数组,作为枚举
mysql_fetch_array是从结果集取出一行数组作为关联数组,或数字数组,两者兼得
25、GD库是做什么用的? (1分)
答:gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。
在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。
26.面向对象编程
有两个重要的概念:类和对象
类是具备某项功能的抽象模型,实际应用中,还需要对类进行实例化后使用。这样就引入了对象的概念。
对象是类进行实例化后的一个产物,是一个实体。
封装 :把客观的事物封装成一个抽象的类。
继承:子类继承父类,可以使用父类的属性和方法。可以实现接口,同时实现接口中的所有方法
多态:覆盖和重载 子类可以覆盖父类中的方法;一个类中可以同时拥有同一个函数名的方法,但是方法的参数不同,实现的结果也不同。
27.php框架
熟悉YII ,Thinkphp还有laravel ,symfony2,cakephp
28.mysql存储引擎
ISAM: 查询速度快、增删改慢,支持全文索引、不支持外键、不支持事务
MyISAM: ISAM升级版
Memory: 数据驻留在内存、速度快、数据管理不稳定、断电后数据全部丢失
InnoDB: 速度较慢、支持外键、支持事务、不支持全文索引
使用的存储引擎
MyISAM:内容管理系统(新闻、官网、电商、软件下载、房屋、招聘...) 可读不可改 大部分是浏览信息
InnoDB:技术型网站(bbs、blog、webo、oa...)
29.数据库操作流程
- $link = mysql_connect("localhost","root","root");
- mysql_select_db("test",$link);
- $sql ="select * from table";
- $result = mysql_query($sql);
- while($row =mysql_fetch_****($result) ){
- $arr[]=$row;
- }
- $row = mysql_fetch_array($result) 意思:$row['name'] 和$row[1] 都可以取到值
- $row = mysql_fetch_row($result)) 意思:$row[1] 只有用索引取值,偏移量从0开始。
- $row = mysql_fetch_assoc($result)) 意思: $row['name'] 字段名作为索引取值 抽取一条记录转为 关联数组,失败返回false
30.php 加密函数
crypt($str[,$slat]) 可以完成单向加密功能
md5()
sha1() 返回一个40位的十六进制数,
加密扩展库
Mcrypt() 和Mash
31、字符串“to upper case” 分别用php,shell ,js实现将字符串中的字符全部转换成大写并输出。(5分)
Php实现: echo strtoupper(‘to upper case’)
Shell实现:echo "to upper case" | tr 'a-z' 'A-Z'
Js实现:
- <script language="javascript">
- var stmp1 = " to upper case ";
- alert(stmp1.toLocaleUpperCase());//转换成大写
- alert(stmp1.toUpperCase())//转换成大写
- </script>
32.防止SQL注入
1)一般使用 addslashes 函数
addslashes 函数在制定的预定义字符前添加反斜杠
对字段和密码MD5加密处理
预处理过滤处理
33、用PHP打印出前一天的时间,格式是2017-5-10 22:21:21
- <?php
- //echo date('Y-m-d H:i:s',time()-60*60*24
- echo date("Y:m:d H:i:s",strtotime("-1 day"));
- ?>
34.如何实现字符串翻转?
其实PHP本身就有字符串翻转的函数:strrev(),不妨试试echo strrev($str);不过
所有的这三种方法都不能解决中文字符串翻转的问题,会出错的。
代码
- <?php
- function reverse($var)
- {
- $res="";
- for($i=0,$j=strlen($var);$i<$j;$i++)
- {
- $res=$var[$i].$res;
- }
- return $res;
- }
- $tmpvar="wofang";
- $res=reverse($tmpvar);
- echo $res;
- ?>
35.实现中文字串截取无乱码的方法。
mb_substr()
36.以下哪一句不会把 John 新增到 users 阵列?
$users[] = 'john';
成功把 John 新增到阵列 users。
array_add($users,’john’);
函式 array_add() 无定义。
array_push($users,‘john’);
成功把 John 新增到阵列 users。
$users ||= 'john';
语法错误。
37.sort()、assort()、和 ksort() 有什么分别?它们分别在什么情况下使用?
sort()
根据阵列中元素的值,以英文字母顺序排序,索引键会由 0 到 n-1 重新编号。主
要是当阵列索引键的值无关疼痒时用来把 阵列排序。
assort()
PHP 没有 assort() 函式,所以可能是 asort() 的笔误。
asort()
与 sort() 一样把阵列的元素按英文字母顺序来排列,不同的是所有索引键都获得保留,特别适合替联想阵列排序。
ksort()
根据阵列中索引键的值,以英文字母顺序排序,特别适合用于希望把索引键排序的联想阵列。
38.以下的代码会产生什么?为什么?
- $num =10;
- function multiply(){
- $num =$num *10;
- }
- multiply();
- echo $num;
由于函式 multiply() 没有指定 $num 为全域变量(例如 global $num 或者
$_GLOBALS['num']),所以 $num 的值是 10。
39.些函式可以用来在现正执行的脚本中插入函式库?
对这道题目不同的理解会有不同的答案,我的第一个想法是插入 PHP 函式库不外乎
include()、include_once()、require ()、require_once(),但细心再想,“函式库”也应该包括 com 物件和 .net 函式库,所以我们的答案也要分别包括
com_load 和 dotnet_load,下次有人提起“函式库”的时候,别忘记这两个函式。
40.foo() 与 @foo() 有什么分别?
foo() 会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。
@foo() 在执行这个函式时,会隐藏所有上述的错误讯息。
很多应用程式都使用 @mysql_connect() 和 @mysql_query 来隐藏 mysql 的错误讯息,我认为这是很严重的失误,因为错误 不该被隐藏,你必须妥善处理它们,可能的话解决它们。
41、“===”是什么?试举一个“==”是真但“===”是假的例子。
“===”是给既可以送回布尔值“假”,也可以送回一个不是布尔值但却可以赋与“假”值的函式,strpos() 和 strrpos() 便是其中两个例子。
问题的第二部份有点困难,想一个“==”是假,但是“===”是真的例子却很容易,
相反的例子却很少。但我终于找到以下的 例子:
if (strpos("abc", "a") == true){ // 这部分永不会被执行,因为 "a" 的位
置是 0,换算成布尔值“假”}if (strpos("abc", "a") === true){ // 这部份
会被执行,因为“===”保证函式 strpos() 的送回值不会换算成布尔值.}
42、如何修改SESSION的生存时间(1分).
答:方法1:将php.ini中的session.gc_maxlifetime设置为9999重启apache
方法2:$savePath = "./session_save_dir/";
$lifeTime = 小时 * 秒;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
方法3:setcookie() and session_set_cookie_params($lifeTime);
43、在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?(1分)
答:heredoc的语法是用"<<<"加上自己定义成对的标签,在标签范围內的文字视为一
个字符串
例子:
$str = <<<SHOW
my name is Jiang Qihui!
SHOW;
答:设置错误级别与错误信息回报
- function checkEmail($email)
- {
- $pregEmail = "/([a-z0-9]*[-_.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-
- 9]+)+[.][a-z]{2,3}([.][a-z]{2})?/i";
- return preg_match($pregEmail,$email);
- }
46、请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char
有什么区别(2分)
答:int是数字类型,char固定长度字符串,varchar实际长度字符串,datetime日期时
间型,text文本字符串
char的场地固定为创建表设置的长度,varchar为可变长度的字符
47、检测一个变量是否有设置的函数是否?是否为空的函数是?(2分)
答:isset($str),empty($str);
48、取得查询结果集总数的函数是?(1分)
答:mysql_num_rows($result);
49 简述如何得到当前执行脚本路径,包括所得到参数。
- <?php
- echo "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?".$_SERVER
- ['QUERY_STRING'];
- //echo "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
- ?>
50 请举例说明在你的开发过程中用什么方法来加快页面的加载速度
51. 给定一个用逗号分隔一组值的字符串,以下哪个函数能在仅调用一次的情况下就
把每个独立的值放入一个新创建的数组?
A.strstr()
B.不可能只调用一次就完成
C.extract()
D.explode()√
E.strtok()
52.如果用+操作符把一个字符串和一个整型数字相加,结果将怎样?
A.解释器输出一个类型错误
B.字符串将被转换成数字,再与整型数字相加
C.字符串将被丢弃,只保留整型数字√
D.字符串和整型数字将连接成一个新字符串
E.整形数字将被丢弃,而保留字符串
53.以下脚本输出什么?
$s = '12345';
$s[$s[1]] = '2';
echo $s;
?>
A.12345
B.12245√
C.22345
D.11345
54.以下脚本输出什么?
$x = 'apple';
echo substr_replace ($x, 'x', 1, 2);
?>
A.x
B.axle√
C.axxle
D.applex
E.xapple
55. 函数______能读取文本文件中的一行。读取二进制文件或者其他文件时,应当
用______函数。
A.fgets(), fseek()
B.fread(), fgets()
C.fputs(), fgets()
D.fgets(), fread()√
E.fread(), fseek()
56.哪个函数能够往文本文件中写入一个字符串?
答案:fwrite()和fputs()两个函数在这里都可以,而后者其实是前者的别名。在
PHP中,写入二进制数据和写入字符串没有区别。
57.函数______能判断一个文件是否可写。
答案:is_writeable
58.以下哪个选项能将文件指针移到开头?
A.reset()
B.fseek(-1)
C.fseek(0, SEEK_END)
D.fseek(0, SEEK_SET)√
E.fseek(0, SEEK_CUR)
59、include的功能和require一样,不同的是,require不能用在[ ]
A、判断语句或循环里,
B、连接语句里
C、声明语句里
D、文件的开头
E、文件的中间√
50、下面建立与MySQL Server的连接语法正确的是:[ ]
A、$link=connect("host_name","user_name","password");
B、$link=mysql_connect("host_name","user_name","password");√
C、$link=mysqlconnect("host_name","user_name","password");
D、$link=mysql_pconnect("host_name","user_name","password");√
E、$link=pconnect("host_name","user_name","password");
51.将字符串转换成小写
strtolower(): 该函数将传入的字符串参数所有的字符都转换成小写,并以小定形式
放回这个字符串
52.将字符转成大写
strtoupper(): 该函数的作用同strtolower函数相反,是将传入的字符参数的字符全
部转换成大写,并以大写的形式返回这个字符串.用法同strtolowe()一 样.
53.将字符串首字符转换成大写
ucfirst(): 该函数的作用是将字符串的第一个字符改成大写,该函数返回首字符大
写的字符串.用法同strtolowe()一样.
54.将字符串每个单词的首字符转换成大写
ucwords(): 该函数将传入的字符串的每个单词的首字符变成大写.如"hello
world",经过该函数处理后,将返回"Hello Word".用法同strtolowe()一样.
55、NoSQL:Not Only SQL
思想:网站产生的数据,一部分存储数据库、一部分存到NoSQL相关产品
NoSQL产品
1、Memcache:内存(速度快、数据量小)、数据的过期时间
2、MongoDB:文档数据库
3、Redis:内存(速度快、数据量小)、库、没有过期时间
56、什么样的数据,存储在什么位置?
MySQL:稳定的数据
NoSQL:活跃的数据
57缓存分类
1、缓存数据存储位置不同
1)文件缓存
2)内存缓存
2、缓存的数据量的不同
1)页面缓存
2)局部缓存
3)局部不缓存
4)数据缓存(变量缓存、动态缓存)
Memcache:内存缓存、变量缓存
58 .LINUX命令
查看当前目录下所有内容 ls
在当前目录下,新建一个文件夹 mkdir 文件夹名
删除指定的文件夹 rmdir 文件夹名 只能删除空目录
在当前目录下新建一个空白文件 touch 文件名
删除当前目录下的一个文件 unlink文件名
删除文件或文件夹 rm
复制文件 cp
移动文件或文件夹 mv
文件或文件夹重命名 mv
查看完整的工作目录 pwd
切换目录: cd cd/ 返回根目录
文件传输 ftp
查看文件内容 cat 文件名
查看文件编码 file 文件名
查找文件 find 路径 -name 文件名
修改文件或文件夹权限
权限种类:r 4(读)、w 2(写)、x 1(执行)
权限操作符:+(赋予权限)、-(收回权限)
用户种类:a(所有人)、u(文件拥有者)、g(组用户)、o(其他用户)
查看权限:ls -l
-rw-r--r-- a.txt
drwxr-xr-x hello
第1位:是文件还是文件夹(-文件、d文件夹)
第234位:u用户的权限
第567位:g用户的权限
最后三位:o用户的权限
1)将最大权限赋予a.txt
chmod a+r+w+x a.txt
chmod 777 a.txt
2)设置a.txt权限,收回o用户的wx权限
chmod o-w-x a.txt
4)设置a.txt权限:u:rw g:r o:r
chmod 644 a.txt
5)设置hello文件夹权,给予最大权限(不影响子文件)
chmod 777 hello
6)设置hello文件夹权,给予最大权限(影响子文件)
chmod -R 777 hello
59、创建文件exer1,设置访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限,写出操作过程的命令(10分)
touch exer1
chmod 644 exer1
增加权限
chmod a+x exer1
chmod g+w exer1
或者
chmod 775 exer1
60、易出现编码的地方
文件保存格式的编码
<meta http-equiv=”content-type” content=”text/html;charset=utf-8”>
Header();
Msq本身的编码(修改ini)
Set names gbk;
Mysql_query(“set names utf8”);
Iconv()PHP的系统函数进行转码
61.PHP工作原理
一个网站运行时客户端有无数个,服务器通常只有一个(负载均衡)开发环境的安装2,PHP5.4,MYSQL5.3-------开源,可以跨平台
配置文件:conf(Apache), php.ini my.ini
PHP文档组成:HTML,css,js,jquery,PHP
PHP语法风格:xml风格,短风格,ASP风格(已过时),脚本风格
<?php ?>注意:位置任意,同一页面可以出现多次,不能嵌套,里面只能出现php代码,需要转字符串输出
运行在服务器端
注释:单行注释,多行注释
62数据类型:
标量类型:integer,Float,String,boolean
复合类型:Array,Object
特殊类型:Resource,Null
伪类型:mixed,number,callback(回调函数)
63.PHP中被认为是false的值:
0, 0.0, null, 空数组, 空字符串, false
64.求两个日期的差数,例如2017-2-27 ~ 2018-05-6 的日期差数
- <?php
- function get_days($date1, $date2){
- $time1 = strtotime($date1);
- $time2 = strtotime($date2);
- return ($time2-$time1)/86400;
- }
- echo get_days("2018-05-6", "2017-2-27");
- ?>
65什么是MVC?
回答:MVC由Model(模型), View(视图)和Controller(控制器)组成,PHP MVC可以更高效地管理好3个不同层的PHP代码。
Model:数据信息存取层。
View:view层负责将应用的数据以特定的方式展现在界面上。
Controller:通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
66.PHP中获取图像尺寸大小的方法是什么?
回答:getimagesize () 获取图片的尺寸
Imagesx () 获取图片的宽度
Imagesy () 获取图片的高度
67.如何在PHP中定义常量?
回答:PHP中使用Define () 来定义常量。
define (“Newconstant”, 30);
如果我们不想用submit按钮来提交表单,我们也可以用超链接来提交,我们可以这样写代码:
<a href=”javascript: document.myform.submit();”>Submit Me</a>
答:无限极分类,那么应该是考察递归函数吧!
第一步:建立测试数据库:
- CREATE TABLE `category` (
- `id` smallint(5) unsigned NOT NULL auto_increment,
- `fid` smallint(5) unsigned NOT NULL default '0',
- `value` varchar(50) NOT NULL default '',
- PRIMARY KEY (`id`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
第二步:插入测试数据:
INSERT INTO `category` ( `fid`, `value`) VALUES (0, 'PHP点点通博客PHPDDT.COM'), (1,'a'), (1,'b'), (2,'c'), (2,'d'), (4,'e')
第三步:递归输出分类:
70.试述isset()和empty()的区别
isset() 测试变量是否存在 empty() 测试变量是否为空
71.请用尽可能少的语句实现对输入Email地址进行验证的功能
eregi('^[_a-z0-9]+(/.[_a-z0-9-]+)*@[a-z0-9]+(/.[a-z0-9-]+)*$',$emailaddress)
- /冒泡排序(数组排序)
- function bubble_sort($array)
- {
- $count = count($array);
- if ($count <= 0) return false;
- for($i=0; $i<$count; $i++){
- for($j=$count-1; $j>$i; $j–){
- if ($array[$j] < $array[$j-1]){
- $tmp = $array[$j];
- $array[$j] = $array[$j-1];
- $array[$j-1] = $tmp;
- }
- }
- }
- return $array;
- }
- //快速排序(数组排序)
- function quick_sort($array) {
- if (count($array) <= 1) return $array;
- $key = $array[0];
- $left_arr = array();
- $right_arr = array();
- for ($i=1; $i<count($array); $i++){
- if ($array[$i] <= $key)
- $left_arr[] = $array[$i];
- else
- $right_arr[] = $array[$i];
- }
- $left_arr = quick_sort($left_arr);
- $right_arr = quick_sort($right_arr);
- return array_merge($left_arr, array($key), $right_arr);
- }
73、使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组
- //二分查找(数组里查找某个元素)
- function bin_sch($array, $low, $high, $k){
- if ($low <= $high){
- $mid = intval(($low+$high)/2);
- if ($array[$mid] == $k){
- return $mid;
- }elseif ($k < $array[$mid]){
- return bin_sch($array, $low, $mid-1, $k);
- }else{
- return bin_sch($array, $mid+1, $high, $k);
- }
- }
- return -1;
- }
- //顺序查找(数组里查找某个元素)
- function seq_sch($array, $n, $k){
- $array[$n] = $k;
- for($i=0; $i<$n; $i++){
- if($array[$i]==$k){
- break;
- }
- }
- if ($i<$n){
- return $i;
- }else{
- return -1;
- }
- }
74.写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数
- function array_sort($arr, $keys, $order=0) {
- if (!is_array($arr)) {
- return false;
- }
- $keysvalue = array();
- foreach($arr as $key => $val) {
- $keysvalue[$key] = $val[$keys];
- }
- if($order == 0){
- asort($keysvalue);
- }else {
- arsort($keysvalue);
- }
- reset($keysvalue);
- foreach($keysvalue as $key => $vals) {
- $keysort[$key] = $key;
- }
- $new_array = array();
- foreach($keysort as $key => $val) {
- $new_array[$key] = $arr[$val];
- }
- return $new_array;
- }
75.utf-8转换成gbk的函数是?
iconv("gbk",""UTF-8,"我们"); mb_convert_encoding($str, "GBK", "UTF-8")
76.Php中分割字符串成数组的函数和连接数组成字符串的函分别有哪些?
explode() split() ;implode() join()
单例模式: 保证一个类仅有一个实例,并提供一个访问他的全局访问点例如框架中的数据库连接
简单工厂模式: 它具有创建对象的某些方法,可以使用工厂类创建对象,而不直接使用 new。例如初始化数据库的时候会用到,比如MySQL,MSSQL
策略模式: 针对一组算法,将每一个算法封装到具有共同接口的独立的类中,例如进入个人主页时,根据浏览者的不同,给予不同的显示与操作
注册模式: 提供了在程序中有条理的存放并管理一组全局对象 (object),例如ZF框架中的Zend_Registry::set
适配器模式: 将不同接口适配成统一的API接口,例如数据操作有mysql、mysqli、pdo等,可利用适配器模式统一接口
观察者模式: 一个对象通过添加一个方法使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。例如实现实现消息推送
装饰器模式: 不修改原类代码和继承的情况下动态扩展类的功能,例如框架的每个Controller文件会提供before和after方法
迭代器模式: 提供一个方法顺序访问一个聚合对象中各个元素,在PHP中将继承 Iterator 类
原型模式: 实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。
78.echo,print(),print_r(),printf(),sprintf(),var_dump()有什么区别?
echo :是语句不是函数,没有返回值,可输出多个变量值,不需要圆括号。不能输出数组和对象,只能打印简单类型(如int,string)
print :是语句不是函数,有返回值 1 ,只能输出一个变量,不需要圆括号。不能输出数组和对象,只能打印简单类型(如int,string)。
print_r
:是函数,可以打印复合类型,例如:stirng、int、float、array、object等,输出array时会用结构表示,而且可以通过print_r($str,true)来使print_r不输出而返回print_r处理后的值
printf :是函数,把文字格式化以后输出(参看C语言)
sprintf :是函数,跟printf相似,但不打印,而是返回格式化后的文字,其他的与printf一样。
var_dump :函数,输出变量的内容、类型或字符串的内容、类型、长度。常用来调试。
79.echo count(“abc”); 输出什么?
答案:1
80.写个函数用来对二维数组排序。
答案:array_multisort() 。
81.对于大流量的网站,您采用什么样的方法来解决访问量问题?
首先,确认服务器硬件是否足够支持当前的流量。
其次,优化数据库访问。
第三,禁止外部的盗链。
第四,控制大文件的下载。
第五,使用不同主机分流主要流量
第六,使用流量分析统计软件。
82.error_reporting(2047)什么作用?
答案:相当于 error_reporting(‘E_ALL’); 输出所有的错误。
83、 简述如何得到当前执行脚本路径,包括所得到参数。
访问http://temp.com/phpinfo.php?id=1
- echo $_SERVER['SCRIPT_URL']; //得到/phpinfo.php
- echo $_SERVER["SCRIPT_URI"]; //得到http://temp.com/phpinfo.php
- echo $_SERVER["SCRIPT_FILENAME"]; //得到F:/www/Temp/phpinfo.php
- echo $_SERVER["REQUEST_URI"]; //得到/phpinfo.php?id=1
- echo $_SERVER["SCRIPT_NAME"]; //得到/phpinfo.php
参考server.php http://lesson.com/test/server.php?id=1
84、写出session的运行机制。
session创建时,是否会在服务端记录一个cookie?cookie里面的内容是什么?
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识-称为sessionid,如果已包含一个sessionid则说明以前已经为此客户端创建过session,服务器就按照sessionid把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含sessionid,则为此客户端创建一个session并且生成一个与此session相关联的sessionid,sessionid的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionid将被在本次响应中返回给客户端保存。_
保存这个sessionid的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发给服务器。一般这个cookie的名字都是类似于SEEESIONID。r
由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把sessionid传递回服务器。经常被使用的一种技术叫做URL重写,就是把sessionid直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http://…../xxx;SEEESIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764比
另一种是作为查询字符串附加在URL后面,表现形式为http://…../xxx?SEEESIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764参
为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个SEEESIONID。
85.Cookie的原理及使用?
Cookie是网站保存在浏览器客户端的信息,也就是说保存在访客的机器里的变量,一般随着HTTP头发送到服务器端。在Cookie生效之后及失效之前,客户每次发出页面请求的时候(包括PHP页面和静态html页面),都会把Cookie一块发送到服务器,只要我们针对它进行相应的处理,就可以实现变量”追随”。到
86.Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下:
a、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。
b、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用”?”连接,而各个变量之间使用”&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。u
c、Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说都是不可见的。而
d、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。
e、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
f、Get是Form的默认方法。
*.Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示。
*.Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度的限制,只能传递大约1024字节.
.Post顾名思义,就是为了将数据传送到服务器段,Get就是为了从服务器段取得数据.而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.Post的信息作为http请求的内容,而Get是在Http头部传输的。
87.PHP5中魔术方法函数有哪几个,请举例说明各自的用法
- __sleep
- __wakeup
- __toString
- __set_state
- __construct,
- __destruct
- __call,
- __get,
- __set,
- __isset,
- __unset
- __clone
- __autoload
88、isset()和empty()的区别
两者都是测试变量用的。但是isset()是 测试变量是否被赋值 ,而empty()是测试 一个已经被赋值的变量是否为空
。如果一个变量没被赋值就引用在php里是被允许的,但会有notice提示。如果一个变量被赋空值,$foo=””或者$foo=0或者$foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。要注销一个变量,可以用d
unset($foo)或者$foo=NULL。
89.以下哪一句不会把 John 新增到 users 阵列?
$users[] = ‘john’;
成功把 John 新增到阵列 users。
array_add($users,’john’);
函式 array_add() 无定义。
array_push($users,‘john’);
成功把 John 新增到阵列 users。
$users ||= ‘john’;
语法错误。
90.以下哪一个函式可以把浏览器转向到另一个页面?
redir()这不是一个 PHP 函式,会引致执行错误。
header()这个是正确答案,header() 用来插入卷头资料,可以用来使浏览器转向到另一个页面,例如:
header(“Location: http://www.phpmst.com/”);
location()这不是一个 PHP 函式,会引致执行错误。
redirect()这不是一个 PHP 函式,会引致执行错误。
91.PHP中的非静态方法可以通过静态调用吗,反之呢?
其实问题是问没有通过static定义的方法,能否通过”对象名::方法名“这样的形式来调用。答案是会产生一个strict错误,但在会继续执行代码。
反之,能否通过“对象名->方法名“的形式来调用static定义的方法?答案是不能,会出错并中断程序执行。
92.使用utf-8编码,以下代码输出结果是什么?strlen函数是计算字符串的字节数还是字符数?
$str = “您好hello”;
答案:echo strlen($str);
11 strlen() 函数返回字符串的长度。
93..什么是时间戳?时间戳能代表的最小年份和最大年份是多少?
答案:(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。
有效的时间戳典型范围是格林威治时间 1901 年 12 月 13 日 20:45:54 到 2038 年 1 月 19 日 03:14:07。(此范围符合
32 位有符号整数的最小值和最大值)。
不过在 PHP 5.1 之前此范围在某些系统(如 Windows)中限制为从 1970 年 1 月 1 日到 2038 年 1 月 19 日。
94、MyISAM与innoDB存储引擎有何差别?
答案:A、两者在文件构成上有区别;
B、InnoDB支持事务处理,MyISAM不支持;
C、对无WHERE子句的COUNT(*)操作的不同:MyISAM中保存了该值,直接读取,InnoDB需要作全表扫描;
D、锁的区别:InnoDB支持表级锁和行级锁,MyISAM只支持表级锁;
E、索引会缓存数据,而MYISAM不会;
F、INNODB不区分char和varchar;
G、INNODB支持hash索引,而MYISAM不支持;
H、InnoDB不支持FULLTEXT类型的索引;
I、InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from
table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含
where条件时,两种表的操作是一样的;
J、对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引;
K、DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除;
L、LOAD TABLE FROM
MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。
95..如何记录php程序错误至系统日志?
答案:将PHP的log_errors开启即可,默认是记录到WEB服务器的日志文件里,比如Apache的error.log文件。
当然也可以记录错误日志到指定的文件中。
代码如下:
# vim /etc/php.inidisplay_errors = Off
log_errors = On
error_log = /var/log/php-error.log
另外也可以设定error_log = syslog,使这些错误信息记录到操作系统的日志里。
display_errors = Off //不显示错误
error_reporting 设定错误讯息回报的等级
96.用最少的代码写一个求3值最大值的函数.
答案: function($a,$b,$c){
return $a>$b? ($a>$c? $a : $c) : ($b>$c? $b : $c );
}
97.在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?(1分)
答:heredoc的语法是用”<<<”加上自己定义成对的标签,在标签范围內的文字视为一个字符串
例子:
$str = <<<SHOW
my name is Jiang Qihui!
SHOW;
- chr — 通过ASCII码值返回指定的字符
- ord — 通过指定的字符返回ASCII码值
- explode — 使用一个字符串分割另一个字符串
- implode — 将一个一维数组的值转化为字符串
- join — 别名implode
- htmlspecialchars — 把预定义的字符转换为HTML实体(比如说大于小于)
- nl2br — 在字符串所有新行之前插入HTML换行标记
- strip_tags — 从字符串中去除 HTML 和 PHP 标记
- lcfirst — 使一个字符串的第一个字符小写
- ucfirst — 将字符串的首字母转换为大写
- ucwords — 将字符串中每个单词的首字母转换为大写
- md5 — 加密,返回32位的字符串
- sha1 — 加密,返回40位的字符串
- number_format — 以千位分隔符方式格式化一个数字
- trim — 去除字符串首尾处的空白字符(或者其他字符)
- ltrim — 删除字符串开头的空白字符(或其他字符)
- rtrim — 删除字符串末端的空白字符(或者其他字符)
- chop — rtrim 的别名
- str_replace — 子字符串替换
- str_ireplace — str_replace的忽略大小写版本
- str_pad — 使用另一个字符串填充字符串为指定长度
- str_repeat — 重复一个字符串
- str_shuffle — 随机打乱一个字符串
- str_split — 将字符串转换为数组
- strstr — 查找字符串的首次出现
- strchr — 别名 strstr
- stristr — strstr 函数的忽略大小写版本
- strrchr — 查找指定字符在字符串中的最后一次出现
- strpos — 查找字符串首次出现的位置
- stripos — 查找字符串首次出现的位置(不区分大小写)
- strripos — 计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)
- strrpos — 计算指定字符串在目标字符串中最后一次出现的位置
- strlen — 获取字符串长度
- strrev — 反转字符串
- strtolower — 将字符串转化为小写
- strtoupper — 将字符串转化为大写
- substr — 截取字符串
- array_shift — 将数组开头的单元移出数组
- array_pop — 将数组最后一个单元弹出(出栈)
- array_unshift — 在数组开头插入一个或多个单元
- array_push — 将一个或多个单元压入数组的末尾(入栈)
- array_keys — 返回数组中部分的或所有的键名
- array_values — 返回数组中所有的值
- in_array — 检查数组中是否存在某个值
- array_key_exists — 检查给定的键名或索引是否存在于数组中
- key_exists — 别名 array_key_exists
- array_rand — 从数组中随机取出一个或多个单元
- array_reverse — 返回一个单元顺序相反的数组
- array_unique — 移除数组中重复的值
- array_merge — 合并一个或多个数组
- count — 计算数组中的单元数目或对象中的属性个数
- sizeof — count 的别名
- array_sum — 计算数组中所有值的和
- array_flip — 交换数组中的键和值
- array_count_values — 统计数组中所有的值出现的次数
- shuffle — 将数组打乱
- reset — 将数组的内部指针指向第一个单元
- prev — 将数组的内部指针倒回一位
- current — 返回数组中的当前单元
- pos — current 的别名
- each — 返回数组中当前的键/值对并将数组指针向前移动一步
- next — 将数组中的内部指针向前移动一位
- end — 将数组的内部指针指向最后一个单元
-
- sort — 对数组排序
- rsort — 对数组逆向排序
- asort — 对数组进行排序并保持索引关系
- arsort — 对数组进行逆向排序并保持索引关系
- ksort — 对数组按照键名排序
- krsort — 对数组按照键名逆向排序
- compact — 建立一个数组,包括变量名和它们的值
- range — 快速创建数组
100、单例模式,创建mysqli数据库链接的单例对象
- class Db
- {
- private static $instance;
- public $handle;
- private function __construct($host, $username, $password, $dbname)
- {
- $this->handle = NULL;
- $this->getcon($host, $username, $password, $dbname);
- }
- public static function getBb()
- {
- self::$instance = new Db();
-
- return self::$instance;
- }
- private function getcon($host, $username, $password, $dbname)
- {
- if($this->handle!=NULL){
- return true;
- }
- $this->handle = mysqli_connect($host, $username, $password,
- $dbname);
- }
- }
102. SESSION 与 COOKIE的区别是什么,请从协议,产生的原因与作用说明?
1、http无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不同的页面不能看做是同一个用户。
2、SESSION存储在服务器端,COOKIE保存在客户端。Session比较安全,cookie用某些手段可以修改,不安全。Session依赖于cookie进行传递。
禁用cookie后,session不能正常使用。Session的缺点:保存在服务器端,每次读取都从服务器进行读取,对服务器有资源消耗。Session保存在服务器端的文件或数据库中,默认保存在文件中,文件路径由php配置文件的session.save_path指定。Session文件是公有的。
103. HTTP 状态中302、403、 500代码含义?
一二三四五原则: 一. 消息系列 二 成功系列 三. 重定向系列 四. 请求错误系列 五. 服务器端错误系列
302:临时转移成功,请求的内容已转移到新位置 403:禁止访问 500:服务器内部错误 401代表未授权。
104. Linux 下建立压缩包,解压缩包的命令
Tar.gz:
打包: tar czf file.tar.gz file.txt
解压: tar xzf file.tar.gz
Bz2:
打包: bzip2 [-k] 文件
解压: bunzip2 [-k] 文件
Gzip(只对文件,不保留原文件)
打包: gzip file1.txt
解压: gunzip file1.txt.gz
Zip: -r 对目录
打包: zip file1.zip file1.txt
解压: unzip file1.zip
105. 请写出数据类型(int char varchar datetime text)的意思;请问 varchar 和 char有什么区别?
Int 整数 char 定长字符 Varchar 变长字符 Datetime 日期时间型 Text 文本型 Varchar 与char的区别 char是固定长度的字符类型,分配多少空间,就占用多长空间。 Varchar是可变长度的字符类型,内容有多大就占用多大的空间,能有效节省空间。 由于varchar类型是可变的,所以在数据长度改变的时,服务器要进行额外的操作,所以效率比char类型低。
106. MyISAM 和 InnoDB 的基本区别?索引结构如何实现?
MyISAM类型不支持事务,表锁,易产生碎片,要经常优化,读写速度较快,而InnoDB类型支持事务,行锁,有崩溃恢复能力。读写速度比MyISAM慢。
创建索引:alert table tablename add index (`字段名`)
107. 不使用cookie向客户端发送一个cookie.
理解:session_start()开启时,生成一个常量 SID,当COOKIE开启时,这个常量为空,当COOKIE关闭时,这个常量中存储了PHPSESSID的值。通过在URL后加一个SID参数来传递SESSIONID的值,从而使客户端页面可以使用SESSION里面的值。 当客户端开启COOKIE和服务器端开启SESSION时。 浏览器第一次请求,服务器会向浏览器端发送一个COOKIE里面存储SESSIONID. 当浏览器第二次请求时,会把已存在
108. isset() 和 empty() 区别
Isset判断变量是否存在,可以传入多个变量,若其中一个变量不存在则返回假,empty判断变量是否为空为假,只可传一个变量,如果为空为假则返回真。
109. 如何在页面之间传递变量(至少两种方式) ? GET,POST,COOKIE,SESSION,隐藏表单
1. 写出匹配URL的正则表达式
‘/^(https?|ftps?)://(www).([^./]+).(com|cn|org)(/[w-./?%&=]*)?/i’
2. 请写出常见的排序算法,并用PHP实现冒泡排序,将数组$a = array()按照从小到大的方式进行排序。
常见的排序算法: 冒泡排序法、快速排序法、简单选择排序法、堆排序法、直接插入排序法、希尔排序法、合并排序法。
冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键字的次序与排序要求的规则不符时,就将这两个记录进行交换。这样,关键字较小的记录将逐渐从后面向前面移动,就象气泡在水中向上浮一样,所以该算法也称为气泡排序法。
- // 冒泡排序法
- Function mysort($arr){
- For($i=0; $i<count($arr); $i++){
- For($j=0; $j<count($arr)-1-$i; $j++){
- If($arr[$j] > $arr[$j+1]){
- $tmp=$arr[$j];
- $arr[$j]=$arr[$j+1];
- $arr[$j+1]=$tmp;
- }
- }
- }
- Return $arr;
- }
- $arr=array(3,2,1);
- print_r(mysort($arr));
3. 请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?
按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。
在PHP中error_reporting这个函数有什么作用?
设置 PHP 的报错级别并返回当前级别。
请用正则表达式(Regular Expression)写一个函数验证电子邮件的格式是否正确。
- if(isset($_POST['action']) && $_POST['action']==’submitted’){
- $email=$_POST['email'];
- if(!preg_match(“/^[0-9a-zA-Z-]+@[0-9a-zA-Z-]+(.[0-9a-zA-Z-]+){1,3}$/”,$email)){
- echo “电子邮件检测失败”;
- }else{
- echo “电子邮件检测成功”;
- }
- }
使用PHP描述快速排序算法,对象可以是一个数组?
原理:快速排序使用分治策略来把待排序数据序列分为两个子序列,具体步骤为:
(1)从数列中挑出一个元素,称该元素为“基准”。
(2)扫描一遍数列,将所有比“基准”小的元素排在基准前面,所有比“基准”大的元素排在基准后面。
(3)通过递归,将各子序列划分为更小的序列,直到把小于基准值元素的子数列和大于基准值元素的子数列排序。
- //快速排序(数组排序)
- function QuickSort($arr){
- $num = count($arr);
- $l=$r=0;
- for($i=1;$i<$num;$i++){
- if($arr[$i] < $arr[0]){
- $left[] = $arr[$i];
- $l++;
- }else{
- $right[] = $arr[$i];
- $r++;
- }
- }
- if($l > 1){
- $left = QuickSort($left);
- }
- $new_arr = $left;
- $new_arr[] = $arr[0];
- if($r > 1){
- $right = QuickSort($right);
- }
- for($i=0;$i<$r;$i++){
- $new_arr[] = $right[$i];
- }
- return $new_arr;
- }
使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组
- //二分查找(数组里查找某个元素)
-
- function bin_sch($array, $low, $high, $k){
-
- if ($low <= $high){
-
- $mid = intval(($low+$high)/2);
-
- if ($array[$mid] == $k){
-
- return $mid;
-
- }elseif ($k < $array[$mid]){
-
- return bin_sch($array, $low, $mid-1, $k);
-
- }else{
-
- return bin_sch($array, $mid+1, $high, $k);
-
- }
-
- }
-
- return -1;
-
- }
-
- //顺序查找(数组里查找某个元素)
-
- function seq_sch($array, $n, $k){
-
- $array[$n] = $k;
-
- for($i=0; $i<$n; $i++){
-
- if($array[$i]==$k){
-
- break;
-
- }
-
- }
-
- if ($i<$n){
-
- return $i;
-
- }else{
-
- return -1;
-
- }
-
- }
写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数(array_multisort())
- //二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序
- function array_sort($arr, $keys, $order=0) {
- if (!is_array($arr)) {
- return false;
- }
- $keysvalue = array();
- foreach($arr as $key => $val) {
- $keysvalue[$key] = $val[$keys];
- }
- if($order == 0){
- asort($keysvalue);
- }else {
- arsort($keysvalue);
- }
- reset($keysvalue);
- foreach($keysvalue as $key => $vals) {
- $keysort[$key] = $key;
- }
- $new_array = array();
- foreach($keysort as $key => $val) {
- $new_array[$key] = $arr[$val];
- }
- return $new_array;
- }
请以空格作为间隔,拆分字符串’Apple Orange Banana Strawberry’,组成数组$fruit,
* 数组中所有元素都用小写字母,并按照字母先后次序排序
- class sort {
- private $str;
- public function __construct($str) {
- $this->str=strtolower($str);
- }
- private function explodes() {
- if(empty($this->str)) return array();
- $arr=explode(" ",$this->str);
- return is_array($arr)?$arr:array($arr);
- }
- public function sort() {
- $explode=$this->explodes();
- sort($explode);
- return $explode;
- }
- }
- $str='Apple Orange Banana Strawberry';
- $sortob=new sort($str);
- var_dump($sortob->sort());
对于用户输入一串字符串$string,要求$string中只能包含大于0的数字和英文逗号,请用正则 表达式验证,对于不符合要求的$string返回出错信息
- class regx {
- public static function check($str) {
- if(preg_match("/^([1-9,])+$/",$str)) {
- return true;
- }
- return false;
- }
- }
- $str="12345,6";
- if(regx::check($str)) {
- echo "suc";
- } else {
- echo "fail";
- }
请写一段程序,在服务器创建一个文件fruit.dat,将试题3中得到的数组写入到改文件中,然后写一段程序从文件中读取并还原数组@author zhuwenqiong
- class sort {
- private $str;
- public function __construct($str) {
- $this->str=strtolower($str);
- }
- private function explodes(){
- if(empty($this->str)) return array();
- $arr=explode(" ",$this->str);
- return is_array($arr)?$arr:array($arr);
- }
- public function sort() {
- $explode=$this->explodes();
- sort($explode);
- return $explode;
- }
- }
- class file {
- private $sort=null;
- private $filepath;
- public function __construct($arrobj,$path) {
- $this->sort=$arrobj;
- $this->filepath=$path;
- }
- private function getresource($filename,$mode) {
- return fopen($this->filepath.$filename,$mode);
- }
- private function closeresource($resource) {
- fclose($resource);
- }
- public function savefile($filename) {
- $arr=$this->sort->sort();
- $fopen=$this->getresource($filename,"a+");
- if(!$fopen){
- echo "文件打开失败!";
- exit;
- }
- var_dump($arr);
- foreach($arr as $key=>$value) {
- fwrite($fopen,$value."n");
- }
- $this->closeresource($fopen);
- }
- public function readfile($filename) {
- $this->savefile($filename);
- $fopen=$this->getresource($filename,"r");
- if(!$fopen){
- echo "文件打开失败!";exit;
- }
- $arr=array();
- while(!feof($fopen)) {
- $get=fgets($fopen);
- if(!empty($get))
- $arr[]=str_replace("n","",$get);
- }
- $this->closeresource($fopen);
- return $arr;
- }
- }
- $file=new file(new sort('Apple Orange Banana Strawberry'),"E:");
- $arr=$file->readfile("fruit.dat");
- var_dump($arr);
单例模式,创建mysqli数据库链接的单例对象
- class Db {
- private static $instance;
- public $handle;
- Private function __construct($host,$username,$password,$dbname) {
- $this->handle=NULL;
- $this->getcon($host,$username,$password,$dbname);
- }
- public static function getBb() {
- self::$instance=new Db();
- return self::$instance;
- }
- private function getcon($host,$username,$password,$dbname) {
- if($this->handle!=NULL){
- return true;
- }
- $this->handle=mysqli_connect($host,$username,$password,$dbname);
- }
- }
windows平台, Apache Http Server启动失败, 排错思路是什么?
检查apache使用的80端口是否被占用,如果被占用,先停止占用80端口的服务,然后启动apache服务器
PHP session扩展默认将session数据储存在哪里? D
- A) SQLite Database
- B) MySQL Database
- C) Shared Memory
- D) File System
- E) Session Server
如果你想要自动加载类,下面哪种函数声明是正确的 C
- A) function autoload($class_name)
- B) function __autoload($class_name, $file)
- C) function __autoload($class_name)
- D) function _autoload($class_name)
- E) function autoload($class_name, $file)
PHP程序使用utf-8编码, 以下程序输出结果是什么? B
- <?php
- $str = ’hello你好世界’;
- echo strlen($str);
- ?>
- A) 9
- B) 13(gbk)
- C) 18
- D) 17(utf8)
你所知道的php数组相关的函数?
array()----创建数组
array_combine()----通过合并两个数组来创建一个新数组
range()----创建并返回一个包含指定范围的元素的数组
compact()----建立一个数组
array_chunk()----将一个数组分割成多个
array_merge()----把两个或多个数组合并成一个数组
array_slice()----在数组中根据条件取出一段值
array_diff()----返回两个数组的差集数组
array_intersect()----计算数组的交集
array_search()----在数组中搜索给定的值
array_splice()----移除数组的一部分且替代它
array_key_exists()----判断某个数组中是否存在指定的key
shuffle()----把数组中的元素按随机顺序重新排列
array_flip()----交换数组中的键和值
array_reverse()----将原数组中的元素顺序翻转,创建新的数组并返回
array_unique()----移除数组中重复的值
php读取文件内容的几种方法和函数?
打开文件,然后读取。Fopen() fread()
打开读取一次完成 file_get_contents()
以下程序,变量str什么值的情况下输入111?
if( ! $str
) { echo
111; }
在$str值为:0,’0′,false,null,”"
你所知道的PHP的一些技术(smarty等)?
Smarty,jquery,ajax,memcache,div+css,js,mysqli,pdo,svn,thinkphp,brophp,yii
说说你对缓存技术的了解?
1、缓存技术是将动态内容缓存到文件中,在一定时间内访问动态页面直接调用缓存文件,而不必重新访问数据库。
2、使用memcache可以做缓存。
你所知道的设计模式有哪些?
工厂模式、策略模式、单元素模式、观察者模式、命令链模式
说说你对代码管理的了解? 常使用那些代码版本控制软件?
通常一个项目是由一个团队去开发,每个人将自己写好的代码提交到版本服务器,由项目负责人按照版本进行管理,方便版本的控制,提高开发效率,保证需要时可以回到旧版本。
常用的版本控制器:SVN
说说你对SVN的了解?优缺点?
SVN是一种版本控制器,程序员开发的代码递交到版本服务器进行集中管理。
SVN的优点:代码进行集中管理,版本控制容易,操作比较简单,权限控制方便。
缺点:不能随意修改服务器项目文件夹。
怎么找到PHP.ini的路径?
一般都在php的安装目录下,或者window系统的windows目录下。
PHP加速模式/扩展? PHP调试模式/工具?
Zend Optimizer加速扩展
调试工具:xdebug
你常用到的mysql命令?
- Show databases
- Show tables
- Insert into 表名() values()
- Update 表名 set 字段=值 where ...
- Delete from 表名 where ...
- Select * from 表名 where 条件 order by ... Desc/asc limit ... Group by ... Having ...
进入mysql管理命令行的命令?
Mysql -uroot -p 回车 密码
show databases; 这个命令的作用?
显示当前mysql服务器中有哪些数据库
show create database mysql; 这个命令的作用?
显示创建数据库的sql语句
show create table user; 这个命令的作用?
显示创建表的sql语句
desc user; 这个命令的作用?
查询user表的结构
explain select * from user; 这个命令的作用?
获取select相关信息
show processlist; 这个命令的作用?
显示哪些线程正在运行
SHOW VARIABLES; 这个命令的作用?
显示系统变量和值
SHOW VARIABLES like ’%conn%’; 这个命令的作用?
显示系统变量名包含conn的值
LEFT JOIN 写一个SQL语句?
SELECT A.id,A.class
FROM A LEFT JOIN B ON A.cid=B.id
in, not ni, exist, not exist的作用和区别?
- in在什么中
- Not in 不在什么中
- Exists 存在
- Not exists 不存在
怎么找到数据库的配置文件路径?
在数据库安装目录下,my.ini
简述Linux下安装PHP的过程?
安装软件之前先安装编译工具gcc、gcc-c++
拷贝源码包,解包解压缩
Cd /lamp/php进入php目录
./configure –prefix=/usr/local/php –with-config-file-path=/usr/local/php/etc指定安装目录和配置文件目录
Make 编译
Make install安装
简述Linux下安装Mysql的过程?
Groupadd mysql 添加一个用户组mysql
Useradd -g mysql mysql 添加一个mysql用户指定分组为mysql
Cd /lamp/mysql 进入mysql目录
./configure –prefix=/usr/local/mysql/ –with-extra-charsets=all
Make
Make all
简述Linux下安装apache的过程?
Cd /lamp/httpd 进去apache软件目录
./configure –prefix=/usr/local/apache2/ –sysconfdir=/etc/httpd/ –with-included-apr
Make
Make all
HTML/CSS/DIV/Javascritp:
1. 设计一个页面(4个 div 第一个div 宽960px 居中;第2-4个div 3等分960px;)
- <style>
- Body{ Text-align:center; Margin:0; Padding:0; }
- #box{ Width:960px; Margin:0 auto; }
- .small{ Width:320px; Float:left; }
- </style>
- <div id=’box’>
- <div class=’small’></div>
- <div class=’small’></div>
- <div class=’small’></div>
- </div>
用javascript取得一个input的值?取得一个input的属性?
document.getElementById(‘name’).value;
document.getElementById(‘name’).type;
用Jquery取得一个input的值?取得一个input的属性?
- $(“input[name='aa']“).val();
- $(“input[name='aa']“).attr(‘type’);
- 请您写一段ajax提交的js代码,或者写出ajax提交的过程逻辑。
- var xmlhttp;
- if(window.XMLHttpRquest){
- xmlhttp=new XMLHttpRequest();
- }else if(window.ActiveXObject){
- xmlhttp=new ActiveXObject(‘Microsoft.XMLHTTP’);
- }
- xmlhttp.open(‘GET’,’1.php?aa=name’,true);
- xmlhttp.onreadystatechange=function(){
- if(xmlhttp.readyState==4){
- if(xmlhttp.status==200){
- var text=xmlhttp.responseText;
- }
- }
- }
- xmlhttp.send(null);
简述Cookie的设置及获取过程
设置COOKIE的值:
Setcookie(名称,值,保存时间,有效域);
获取值:$_COOKIE['名称'];
面向对象中接口和抽象类的区别及应用场景?
1、有抽象方法的类叫做抽象类,抽象类中不一定只有抽象方法,抽象方法必须使用abstract关键字定义。
2、接口中全部是抽象方法,方法不用使用abstract定义。
3、当多个同类的类要设计一个上层,通常设计为抽象类,当多个异构的类要设计一个上层,通常设计为接口。
用面向对象来实现A对象继承B和C对象
Interface B{ ... }
Interface C{ ... }
Class A implements
B,C{ ... }
写出Smarty模板引擎中你最常用的关键词
Assign Display Foreach
Section Loop Item
$smarty
Now Const get
l 增加一个字段性别sex,写出修改语句
Alert table user add sex enum(’0′,’1′);
查询出年龄介于20岁到30岁之间的用户
Select * from user where age>20 and
age<30
如果是一个Web频繁访问的查询,上题的查询如何优化?
可对where后面的字段 age 建立索引,也可对语句建立存储过程。
echo(),print(),print_r()的区别?
Echo,print是PHP语句, print_r是函数,
Print()只能打印出简单类型变量的值(如int,string),有返回值。
print_r()可以打印出复杂类型变量的值(如数组,对象)
echo 输出一个或者多个字符串,无返回值
什么是模板技术、能够使HTML和PHP分离开使用的模板?
模板技术就是使程序的逻辑代码和界面分开的技术。
能够使HTML和PHP分开的模板有:Smarty、Template、PHPlib Template、FastTemplate
对于大流量的网站,您采用什么样的方法来解决访问量问题?
优化程序,优化数据库,如果程序和数据库已经最优化,使用以下解决方法:
1、确定当前服务器设备是否满足流量需求。
2、使用Memcache缓存技术,把动态内容缓存到文件中,动态网页直接调用这些文件,而不必再访问数据库。
3、禁止外部盗链,图片和文件外部盗链会给服务器带来大量的负载压力,可以通过refer来禁止外部盗链,或者使用apache来配置禁止盗链。
4、控制大文件的下载,大文件的下载对于非SCSI硬盘来说会占用大量的资源,导致服务器的响应能力下降。
5、使用不同的主机分流主要流量,使服务器均衡负载。
6、使用流量统计软件统计分析网站流量,可以知道哪些地方耗费了大量的流量,哪些页面需要再进行优化。
mysql_fetch_row() 和mysql_fetch_array之间有什么区别?
Mysql_fetch_row()是从结果集中取出一行作为枚举数组,mysql_fetch_array()是从结果集中取出一行作为索引数组或关联数组或两种方式都有。
实现中文字串截取无乱码的方法
Mb_substr();
用PHP写出显示客户端IP与服务器IP的代码
获取客户端IP:$_SERVER(“REMOTE_ADDR”);
获取服务器端IP:$_SERVER["SERVER_ADDR"];
有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?
获取网页内容:
$url=”http://www.phpres.com/index.html“;
$str=file_get_contents($url);
或 $ch=curl_init();
curl_setopt($ch,CURLOPT_URL,’’);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_exec($ch);
curl_close($ch);
function
checkemail($email){
echo
preg_match(‘/^[0-9a-zA-Z-]+@[0-9a-zA-Z-]+.[0-9a-zA-Z]+$/’,$email)?’email格式正确‘:’email格式不正确‘;
}
简述如何得到当前执行脚本路径,包括所得到参数
用$_SERVER['SCRIPT_FILENAME'].$_SERVER['REQUEST_URI'];取得当前页面的完整路径和参数。
取得参数:$_SERVER['QUERY_STRING'];
JS表单弹出对话框函数是?获得输入焦点函数是?
1
Alert(); focus();
写一个函数,算出两个文件的相对路径
如 $a = ’/a/b/c/d/e.php’;
$b = ’/a/b/12/34/c.php’;
计算出 $b 相对于 $a 的相对路径应该是 http://www.cnblogs.com/c/d将()添上
$a=”http://www.cnblogs.com/a/b/c/d/e.php”;
$b=”http://www.cnblogs.com/a/b/12/34/c.php”;
$ainfo=parse_url($a);
$binfo=parse_url($b);
$apath=ltrim($ainfo['path'],'/');
$bpath=ltrim($binfo['path'],'/');
$arr=explode('/',$apath);
$brr=explode('/',$bpath);
$flag=false;
for($i=0;$i<count($arr);$i++){
if($arr[$i]!==$brr[$i]){
$ab[$i]='..';
if(!$flag){
for($j=$i;$j<count($brr);$j++){
$bb[]=$brr[$j];
}
$flag=true;
}
}
}
$cha=array_merge($ab,$bb);
$cha=implode('/',$cha);
print_r($cha);
写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
function
my_scandir($dir){
$files
= array();
if
( $handle
= opendir($dir) ){
while
( ($file
= readdir($handle)) !== false ) {
if
( $file
!= ".."
&& $file
!= "."
) {
if
( is_dir($dir
. "/"
. $file) ) {
$files[$file] = scandir($dir
. "/"
. $file);
}else
{
$files[] = $file;
}
}
}
closedir($handle);
return
$files;
}
}
数据库索引有几类,分别是什么?什么时候该用索引?
普通索引、主键索引、唯一索引
并非所有的数据库都以相同的方式使用索引,作为通用规则,只有当经常查询列中的数据时才需要在表上创建索引。
写几个魔术方法并说明作用?
__call()当调用不存在的方法时会自动调用的方法
__autoload()在实例化一个尚未被定义的类是会自动调用次方法来加载类文件
__set()当给未定义的变量赋值时会自动调用的方法
__get()当获取未定义变量的值时会自动调用的方法
__construct()构造方法,实例化类时自动调用的方法
__destroy()销毁对象时自动调用的方法
__unset()当对一个未定义变量调用unset()时自动调用的方法
__isset()当对一个未定义变量调用isset()方法时自动调用的方法
__clone()克隆一个对象
__tostring()当输出一个对象时自动调用的方法
它们都是PHP预定义变量
$_REQUEST用来获取post或get方式提交的值
$_POST用来获取post方式提交的值
$_GET用来获取get方式提交的值
$_COOKIE用来获取cookie存储的值
$_SESSION用来获取session存储的值
$_FILES用来获取上传文件表单的值
数组中下标最好是什么类型的,为什么?
数组的下标最好是数字类型的,数字类型的处理速度快。
++i和i++哪一个效率高,为什么?
++i效率比i++的效率更高,因为++i少了一个返回i的过程。
magic_quotes_gpc()、magic_quotes_runtime()的意思是什么?
Magic_quotes_gpc()是php配置文件中的,如果设置为on则会自动POST,GET,COOKIE中的字符串进行转义,在‘之前加
Magic_quotes_runtime()是php中的函数,如果参数为true则会数据库中取出来的单引号、双引号、反斜线自动加上反斜杠进行转义。
框架中什么是单一入口和多入口,单一入口的优缺点?
1、多入口就是通过访问不同的文件来完成用户请求。
单一入口指web程序所有的请求都指向一个脚本文件的。
2、单一入口更容易控制权限,方便对http请求可以进行安全性检查。
缺点:URL看起来不那么美观,特别是对搜索引擎来说不友好。
你对Memcach的理解,优点有哪些?
Memcache是一种缓存技术,在一定的时间内将动态网页经过解析之后保存到文件,下次访问时动态网页就直接调用这个文件,而不必在重新访问数据库。使用memcache做缓存的好处是:提高网站的访问速度,减轻高并发时服务器的压力。
Memcache的优点:稳定、配置简单、多机分布式存储、速度快。
对关系型数据库而言,索引是相当重要的概念,请回答有关索引几个问题:
a) 索引的目的是什么?
1、快速访问数据表中的特定信息,提高检索速度
2、创建唯一性索引,保证数据库表中每一行数据的唯一性
3、加速表和表之间的连接
4、使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间
b) 索引对数据库系统的负面影响是什么?
负面影响:创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改的时候索引也要动态维护,这样就降低了数据的维护速度。
c) 为数据表建立索引的原则有哪些?
1、在最频繁使用的、用以缩小查询范围的字段上建立索引
2、在平频繁使用的、需要排序的字段上建立索引
d) 什么情况下不宜建立索引?
1、对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引
2、对于一些特殊的数据类型,不宜建立索引,比如文本字段(text),值范围较少的知道等。
web应用中,数据库的读取频率远高于写入频率, 如何优化MySQL而应对此种情景?
使用memcache缓存技术,将动态数据缓存到文件,访问动态页面时直接调用缓存文件,而不必重新访问数据库,这样就减少了查询数据库的次数。
如果网站的访问量很大,可以把数据库读写服务器分开,使用多台服务器去处理数据库查询,使用较少的服务器去处理数据库的写入和修改。
include与require的区别?
1.include()在执行文件时每次都要进行读取和评估
require()文件只处理一次(实际上文件内容替换了require()语句)
2.require()通常放在PHP脚本程序的最前面
include()的使用和require()一样,一般放在流程控制的处理区段中,PHP脚本文件读到include()语句时,才将它包含的文件读进来,这种方式,可以把程序执行时的流程简单化
3,require()和include()语句是语言结构,不是真正的函数,可以像PHP的其他语言结构一样
4,include_once()和require_once()语句也是在脚本执行期间包括并运行指定文件,与include()require()唯一的区别是如果文件中的代码已经被包括了,则不会再次包括.
5,require()包含文件失败,停止执行,给出错误(致命的)
include()常用于动态包含.
通常是自动加载的文件,即使加载出错,整个程序还是继续执行
一个页面声明,另一个页面调用
包函文件失败,继续向下执行,返回一条警告
PHP字符串中单引号与双引号的区别?
单引号不能解释变量,而双引号可以解释变量。
单引号不能转义字符,在双引号中可以转义字符。
php中,模板引擎的目的是什么? 你用过哪些模板引擎?
使用模板引擎的目的是使程序的逻辑代码和html界面代码分离开,是程序的结构更清晰。
使用过的模板引擎:Smarty、ThinkPHP的ThinkTemplate
指出以下代码片段中的SQL注入漏洞以及解决方法(magic_quotes_gpc = off)
1
mysql_query(“select id,title from content where catid=’{$_GET[catid]}’ and
title like ’%$_GET[keywords]%’”, $link);
注入漏洞主要存在用户提交的数据上,这里的注入漏洞主要是$_GET[catid]和$_GET[keyword]
解决注入漏洞:
$_GET[catid]=intval($_GET[catid]);
$sql=”select id,title from content where catid=’{$_GET[catid]}’ and
title like ’%$_GET[keywords]%”;
$sql=addslashes($sql);
Mysql_query($sql);
分别指出php.ini中 magic_quotes_gpc, magic_quotes_runtime两项参数的作用.
Magic_quotes_gpc的作用是在POST、GET、COOKIE数据上使用addslashes()自动转义。
Magic_quotes_runtime参数的作用是设置状态,当状态为0时则关闭自动转义,设置为1则自动转义,将数据库中取出来的单引号、双引号、反斜线这些字符加上反斜杠转义。
写出以下php代码的运行结果:
<?php
function
foo($i) {
$i++;
echo
$i
;
}
function
bar(&$i) {
}
$i
= 10 ;
echo
$i++ , ++$i; 输出:10,12
foo($i); 输出:13
bar($i); 输出:无输出
如何快速下载一个远程http服务器上的图片文件到本地?
$file=”";
$fp=fopen($file,’rb’);
$img=fread($fp,10000);
$dir=”./”;
$local=fopen($dir.’/’.basename($file),’w');
Fwrite($local,$img);
什么是时间戳? 如何取得当前时间戳?
时间戳是从1970年1月1日 00:00:00到指定日期的秒数。
获取当前时间戳:time()
了解XSS攻击吗? 如何防止 ?
XSS是跨站脚本攻击,首先是利用跨站脚本漏洞以一个特权模式去执行攻击者构造的脚本,然后利用不安全的Activex控件执行恶意的行为。
使用htmlspecialchars()函数对提交的内容进行过滤,使字符串里面的特殊符号实体化。
SQL注入漏洞产生的原因 ? 如何防止?
SQL注入产生的原因:程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。
防止SQL注入:
1、开启配置文件中的magic_quotes_gpc和magic_quotes_runtime设置
2、执行sql语句时使用addslashes进行sql语句转换
3、Sql语句书写尽量不要省略小引号和单引号
4、过滤掉sql语句中的一些关键字:update、insert、delete、select、*
5、提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。
6、Php配置文件中设置register_globals为off,关闭全局变量注册
7、控制错误信息,不要再浏览器上输出错误信息,将错误信息写到日志文件中。
一个字节占多少bit ? 一个IPv4地址占几个字节? 一个IPv6地址呢?
一个字节占8bit,一个IPV4占用4字节,一个IPV6占用16字节。
142.M ADSL宽带连接, 理想情况下, 最大下载速度是多少KB/s ?
256KB/s
143.请写出一个正则表达式,用于匹配一个HTML文件中<img />标记中的图片地址
$url=”<img src=’11.jpg’/>”;
/<img[s]*src=['|"](.*)['|"][s]*/>/
145.Fatal error: Call to undefined method ge_user() in /website/index.php on line 39
调用了未定义的方法ge_user(),检查程序中有没有定义此方法
146.Fatal error: Class ’client’ not found in /website/index.php on line 173
类client没有找到,检查文件中有没有client类,或者有没有包含client类文件
Warning: Cannot modify header information - headers already sent by (output started at /website/index.php:1) in /website/index.php on line 3
提示文件前面有输出,检查是否有输出,或者编码
148.Warning:session_start(): open(/website/tmp/sess_47e067121facf033785f9a1cb16d243b, O_RDWR) failed: No such file or directory (2) in /website/index.php on line 10
没有找到文件或目录,检查文件是否存在
149.Parse error: syntax error, unexpected T_STRING in /website/index.php on line 18
18行语法错误,检查语法
150.Warning:fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in /website/index.php on line 2
没有找到welcome.txt文件,检查文件是否存在
1、抓取远程图片到本地,你会用什么函数?
fsockopen, A
3、用PHP打印出前一天的时间,打印格式是2007年5月10日22:21:21
Echo
date(‘Y-m-d H:i:s’,strtotime(‘-1 day’));
4、javascript能否定义二维数组,如果不能你如何解决?
javascript不支持二维数组定义,可以用arr[0] = new array()来解决
5、假设a.html和b.html在同一个文件夹下面,用javascript实现当打开a.html五秒钟后,自动跳转到b.html。
<script>
function
go2b(){
window.location = “b.html”;
window.close();
}
setTimeout( “go2b()”,5000 ); //5秒钟后自动执行go2b()
</script>
//正在浏览当前页面用户的 IP 地址:127.0.0.1
echo
$_SERVER["REMOTE_ADDR"].”<br />”;
//查询(query)的字符串(URL 中第一个问号 ? 之后的内容):id=1&bi=2
echo
$_SERVER["QUERY_STRING"].”<br />”;
//当前运行脚本所在的文档根目录:d:inetpubwwwroot
echo
$_SERVER["DOCUMENT_ROOT"].”<br />”;
7、在HTTP 1.0中,状态码 401 的含义是未授权____;如果返回“找不到文件”的提示,则可用 header 函数,其语句为header(“HTTP/1.0 404 Not Found”);
401表示未授权;header(“HTTP/1.0 404 Not Found”);
9、把 John 新增到 users 阵列?
$users[] = ‘john’; array_push($users,‘john’);
在PHP中error_reporting这个函数有什么作用?
error_reporting() 设置 PHP 的报错级别并返回当前级别。
13、如何修改SESSION的生存时间(1分).
方法1:将php.ini中的session.gc_maxlifetime设置为9999重启apache
方法2:$savePath = “./session_save_dir/”;
$lifeTime = 小时 * 秒;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
14、有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?($1分)
方法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”);
16、写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
答案1:
function
getExt($url){
$arr
= parse_url($url);
$file
= basename($arr['path']);
$ext
= explode(“.”,$file);
return
$ext[1];
}
答案2:
function
getExt($url) {
$url
= basename($url);
$pos1
= strpos($url,”.”);
$pos2
= strpos($url,”?”);
if(strstr($url,”?”)){
Return substr($url,$pos1
+ 1,$pos2
– $pos1
– 1);
} else
{
return
substr($url,$pos1);
}
}
使用五种以上方式获取一个文件的扩展名
要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,
必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数 get_ext1($file_name), get_ext2($file_name)
function
get_ext1($file_name){
return
strrchr($file_name, ‘.’);
}
function
get_ext2($file_name){
return
substr($file_name,strrpos($file_name, ‘.’));
}
function
get_ext3($file_name){
return
array_pop(explode(‘.’, $file_name));
}
function
get_ext4($file_name){
$p
= pathinfo($file_name);
return
$p['extension'];
}
function
get_ext5($file_name){
return
strrev(substr(strrev($file_name), 0, strpos(strrev($file_name), ‘.’)));
}
18、<?php
$str1
= null;
$str2
= false;
echo
$str1==$str2
? ‘相等’ : ‘不相等’;
$str3
= ”;
$str4
= 0;
echo
$str3==$str4
? ‘相等’ : ‘不相等’;
$str5
= 0;
$str6
= ’0′;
echo
$str5===$str6
? ‘相等’ : ‘不相等’;
?>
相等 相等 不相等
MySQL数据库中的字段类型varchar和char的主要区别是什么?那种字段的查找效率要高,为什么?
Varchar是变长,节省存储空间,char是固定长度。查找效率要varchar型快,因为varchar是非定长,必须先查找长度,然后进行数据的提取,比char定长类型多了一个步骤,所以效率低一些
请使用JavaScript写出三种产生一个Image 标签的方法(提示:从方法、对象、HTML角度考虑)
(1)var
img = new
Image();
(2)var
img = document.createElement(“image”)
(3)img.innerHTML = “<img src=”xxx.jpg” />”
请描述出两点以上XHTML和HTML最显著的区别
(1)XHTML必须强制指定文档类型DocType,HTML不需要
(2)XHTML所有标签必须闭合,HTML比较随意
写出三种以上MySQL数据库存储引擎的名称(提示:不区分大小写)
MyISAM、InnoDB、BDB(Berkeley DB)、Merge、Memory(Heap)、Example、Federated、Archive、CSV、Blackhole、MaxDB 等等十几个引擎
求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数
方法一:
<?php
class
Dtime{
function
get_days($date1, $date2){
$time1
= strtotime($date1);
$time2
= strtotime($date2);
return
($time2-$time1)/86400;
}
}
$Dtime
= new
Dtime;
echo
$Dtime->get_days(’2007-2-5′, ’2007-3-6′);
?>
方法二:
<?php
$temp
= explode(‘-’, ’2007-2-5′);
$time1
= mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
$temp
= explode(‘-’, ’2007-3-6′);
$time2
= mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
echo
($time2-$time1)/86400;
字数超过,来源于百度查找等等 集锦
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。