PHP常见面试题及答案

 

1,用PHP打印出前一天的时间,格式是2006-5-10 22:21:21

echo date("Y:m:d H:i:s",strtotime("-1 day"));

2,echo(),print(),print_r()的区别

echo是语言结构,无返回值;print功能和echo基本相同,不同的是print是函数,有返回值;print_r是递归打印,用于输出数组对象

3,能够使HTML和PHP分离开使用的模板

smarty, PHPLib, FastTemplate, Savant,MiniTemplator,TagTemplate

4,如何实现字符串翻转

$str=strrev("Wilson Peng");

echo $str;

?>

5,优化MYSQL数据库的方法

(1)选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置NOT NULL,例如’省份,性别’,最好设置为ENUM

(2)使用连接(JOIN)来代替子查询:

(3)使用联合(UNION)来代替手动创建的临时表

(4)事务处理:

保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败都失败

mysql_query(”BEGIN”);

mysql_query(”INSERT INTO customerinfo (name) VALUES (’$name1′)”;

mysql_query(”SELECT * FROM `orderinfo` where customerid=”.$id”);

mysql_query(”COMMIT”);

(5)锁定表,优化事务处理:

我们用一个 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”);

(6)使用外键,优化锁定表

(7)建立索引:

(8)优化查询语句

最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作

SELECT * FROM order WHERE YEAR(orderDate)<2008;(慢)

SELECT * FROM order WHERE orderDate<"2008-01-01";(快)

SELECT * FROM order WHERE addtime/7<24;(慢)

SELECT * FROM order WHERE addtime<24*7;(快)

SELECT * FROM order WHERE title like "%good%";

SELECT * FROM order WHERE title>=”good” and name<"good";

6,实现中文字串截取无乱码的方法

$str = "我是一串比较长的中";

echo "mb_substr:" . mb_substr($str, 0, 6, "utf-8");

echo "mb_strcut:" . mb_strcut($str, 0, 6, "utf-8");

mb_substr:我是一串比较

mb_strcut:我是

mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,但是都不会产生半个字符的现象

7,用PHP写出显示客户端IP与服务器IP的代码

echo $_SERVER[‘REMOTE_ADDR’];

getenv("REMOTE_ADDR");

//客户端IP

$ip=gethostbyname ("www.789dazhe.com");

//服务器IP

echo $ip;

8,在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量中;而链接到当前页面的URL记录在预定义变量中

echo $_SERVER["PHP_SELF"];

echo $_SERVER["HTTP_REFERER"];

9,表单中 get与post提交方法的区别

get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息

10,session与cookie的区别

session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放

cookie:用来存储连续訪問一个頁面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。

两者都可通过时间来设置时间长短

 

11,数据库中的事务是什么

事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消

12,MYSQL取得当前时间的函数是 now()

格式化日期的函数是 date()

13,语句include和require的区别是什么

require->require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require

include->include有返回值,而require没有(可能因为如此require的速度比include快)

14如何修改SESSION的生存时间

将php.ini中的session.gc_maxlifetime设置为9999重启apache

或:$savePath = “./session_save_dir/”;

$lifeTime = 小时 * 秒;

session_save_path($savePath);

session_set_cookie_params($lifeTime);

session_start();

15有一个网页地址,比如http://www.murray.cn/,如何得到它的内容

echo file_get_contents(”http://www.murray.cn/”);

16请说明php中传值与传引用的区别。什么时候传值什么时候传引用?

按值传递:函数范围内对值的任何改变在函数外部都会被忽略

按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改

优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。

按引用传递则不需要复制值,对于性能提高很有好处。

17在PHP中error_reporting这个函数有什么作用

设置错误级别与错误信息回报

18请写一个函数验证电子邮件的格式是否正确

$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);

19如何得到当前执行脚本路径,包括所得到参数

$script_name = basename(__file__);

print_r($script_name);

20写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名

function getExt($url){

$arr = parse_url($url);

$file = basename($arr["path"]);

$ext = explode(”.”,$file);

return $ext[1];

}

21对于大流量的网站,您采用什么样的方法来解决访问量问题?

      ①最根本的是服务器硬件条件。服务器硬件设备如果太差,那不管怎么优化都是徒劳!

      ②对数据库进行优化。主要是减少对数据库的访问量。访问过多会造成服务器CPU过度消耗,导致服务器受访能力严重下降,解决方法是是前台使用静态或者动态缓存!

      ③防盗链。对于Apache服务器,主要是是用model_rewrite 模块通过对URL的正则,进行限制和重定向!

      ④控制大文件下载。不提供超过2MB的文件下载,或使用专门的下载服务器,或者上传到web2.0共享网站上。

      ⑤多主机分流。将不同文件放置在不同的主机,提供镜像之类的文件下载方式。

      ⑥是用专业的流量分析软件。如google流量分析。对网站进行精细的流量控制!

22一个函数,能够遍历一个文件夹下的所有文件和子文件夹。

$d = dir(dirname(__file__));

while ( false !== ($entry = $d->read ()) ) {

echo $entry . "<br />";

}

$d->close ();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值