P h p面试宝典100题汇总-标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KIIPhp面试100题汇总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是实体数据,可以通过表单提交大量信息.,print,print_r 的区别:echo 是php语句,无返回值。
print,print_r是函数,有返回值。
print()只能打印出简单类型变量的值(如int,string)print_r()可以打印出复杂类型变量的值(如数组,对象)echo 输出一个或者多个字符串与cookie区别session与cookie相同:跨页面、不跨用户session与cookie不相同:1、session可以存储任意类型的数据,但cookie只能存储字符串2、cookie产生在服务器端、存储在客户端session产生在服务器端、存储在服务器端6.魔术常量答案:__LINE__文件中的当前行号。
__FILE__文件的完整路径和文件名。
__FUNCTION__函数名称__CLASS__类的名称__METHOD__类的方法名7.数据库中的事务是什么?答:事务(transaction)是作为一个单元的一组有序的数据库操作。
如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。
如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。
如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。
优化MYSQL数据库的方法。
1、选择合适的字段的数据类型1)能用数字不用字符串2)char、varchar、text 能用varchar不用char3)给字段加not null 避免在表中出现NULL关键字(default 值)2、选择合适的字段充当主键1)建议每张表必须有主键2)用数字类型的字段充当主键3、拆分表1)拆分字段,将文章的标题与内容分开2)拆分记录,将今年的记录与往年的记录分开4、给字段合理添加索引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' wherecustomerid=".$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";9、缓存,静态化10、选择合适存储引擎用Innodb增删改,用myisam查询11、主从数据库12、负载均衡13、最好拿数字类型的字段充当where条件14、最好拿相同类型的字段进行比对(避免发生数据类型的转换)15、不要在具有索引的字段上添加数据库函数(索引失效)请简述项目中优化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 "$fullpath\n";$i++;}else {$fullpath = $dir."/".$file;echo "$fullpath\n";$i++;}}}closedir($handle);}}写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
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,XTemplate12、使用哪些工具进行版本控制(1分)答:cvs,svn,vss;13、如何实现字符串翻转(3分)英文:strrev($a)中文或其他文字:中文:GB2312,代码是使用GB2312编码<?phpfunction 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("你好"));的意思(送1分)PHP是一个基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页取得当前时间的函数是,格式化日期的函数是(2分)答:now(),date()16.用PHP写出显示客户端IP与服务器IP的代码1分)答:打印客户端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者:getenv('REMOTE_ADDR');打印服务器IP:echo gethostbyname("")17、语句include和require的区别是什么为避免多次包含同一文件,可用()语句代替它们答:require->require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行requireinclude->include有返回值,而require没有(可能因为如此require的速度比include快)注意:包含文件不存在或者语法错误的时候require是致命的,include不是请求返回状态码400 请求无效401 未授权403 请求被禁止404 请求资源不存在405 请求资源被禁止406 无法接受407 要求代理身份验证500 Internal Server Error 服务端源代码错误600 源站没有返回响应头部,只返回实现内容19,linux授权码:600 属主有读写权限644 属主有读写权限,属性组有读权限700 属主有读写执行权限755 属主有读写执行权限,属性组有读,执行权限711 属主有读写执行权限,属性组有执行权限666 所有用户都有文件的读写权限777 所有用户都有文件的读写执行权限20.有一个网页地址, 比如PHP开发资源网主页: 如何得到它的内容($1分)答:方法1(对于PHP5及更高版本):$readcontents = fopen("", "rb");$contents = stream_get_contents($readcontents);fclose($readcontents);echo $contents;方法2:echo file_get_contents("");21.在PHP中error_reporting这个函数有什么作用(1分)答:设置错误级别与错误信息回报表单弹出对话框函数是获得输入焦点函数是 (2分)答:弹出对话框: alert(),prompt(),confirm()获得输入焦点 focus()()和@foo()之间有什么区别(1分)答:@foo()控制错误输出24、mysql_fetch_row() 和mysql_fetch_array之间有什么区别 (1分)答:mysql_fetch_row是从结果集取出1行数组,作为枚举mysql_fetch_array是从结果集取出一行数组作为关联数组,或数字数组,两者兼得25、GD库是做什么用的 (1分)答:gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。