PHP面试题及答案
murray/index.php/2009/10/php-interview-answer
Posted by murray10月 21, 2009
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,如何实现PHP、
JSP交互
$foo = new
Java(’java.lang.System’);
5,使用哪些工具进行版本控制
CVS或SVN
CVS Server on Apache作服务端,WinCVS作客户端
Subversion on Apache/DAV 做服务端,TortoiseSVN做客户端
6,如何实现字符串翻转
$str=strrev("Wilson Peng");
echo $str;
?>
7,优化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”);
my
sql_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";
8,实现中文字串截取无乱码的方法
$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是按字节来切分字符,但是都不会产生半个字符的现象
9,用
PHP写出显示客户端IP与服务器IP的代码
echo $_SERVER[‘REMOTE_ADDR’];
gete
nv('REMOTE_ADDR');
//客户端IP
$ip=gethostbyname ("murray");
//服务器IP
echo $ip;
?>
10,在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量中;而链接到当前页面的URL记录在预定义变量中
echo $_SERVER['PHP_SELF'];
echo $_SERVER["HTTP_REFERER"];
11,
$null = NULL;
$bool = FALSE;
$notSet;
$array = array();
//以下是问题
$a = "hello";
$b = &;$a;
unset($b);
//答案为:hello
echo $a;
$b = "world";
//答案为:hello
echo $a;
//以下是
问题 $a = 1;
$x = &;$a;
$b = $a++;
//答案为:1
echo $b;
//以下是问题
$x = empty($array);
//答案为:1
echo $x;
//答案为:true
echo $x?"true":"false";
?>
12,表单中 get与post提交方法的区别
get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以