php面试题二

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

答:echo $_SERVER['PHP_SELF']; echo $_SERVER["HTTP_REFERER"];

2.执行程序段<?php echo 8%(-2) ?>将输出。

答:0

 [break]

...

阅读全文→

smarteng 发布于 2009-10-27 12:12

php面试题

1. 如何用php的环境变量得到一个网页地址的内容?ip地址又要怎样得到?
复制代码
<?php
echo $_SERVER ['PHP_SELF'];
echo $_SERVER ['SERVER_ADDR'];
?>
 

2. 求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数
复制代码
<?php
$begin=strtotime('2007-2-5');
$end=strtotime('2007-3-6');
echo ($end-$begin)/(24*3600);
?>
 [break]

3. 请写一个函数,实现以下功能:
字符串“open_door” 转换成 “OpenDoor”、”make_by_id” 转换成 ”MakeById”。
复制代码
<?php
function changeStyle(& $str) {
 
 /*$str = str_replace ( "_", " ", $str );
 $str = ucwords ( $str );
 $str = str_replace ( " ", "", $str );
 return $str;*/
 
 $arrStr=explode('_',$str);
 foreach($arrStr as $key=>$value){
  $arrStr[$key]=strtoupper(substr($value,0,1)).substr($value,1);
 }
 return implode('',$arrStr);
}
$s = "open_door";
echo changeStyle ( $s );
?>
 

4. 要求写一段程序,实现以下数组$arr1转换成数组$arr2:
复制代码
$arr1 = array (
'0' => array ('fid' => 1, 'tid' => 1, 'name' =>'Name1' ),
'1' => array ('fid' => 1, 'tid' => 2 , 'name' =>'Name2' ),
'2' => array ('fid' => 1, 'tid' => 5 , 'name' =>'Name3' ),
'3' => array ('fid' => 1, 'tid' => 7 , 'name' =>'Name4' ),
'4' => array ('fid' => 3, 'tid' => 9, 'name' =>'Name5' ) 
);
$arr2 = array ( 
'0' => array ( 
'0' => array ( 'tid' => 1, 'name' => 'Name1'),
'1' => array ( 'tid' => 2, 'name' => 'Name2'),
'2' => array ( 'tid' => 5, 'name' => 'Name3'),
'3' => array ( 'tid' => 7, 'name' => 'Name4')
),
'1' => array ( 
'0' => array ( 'tid' => 9, 'name' => 'Name5' ) 
)
);
<?php
$arr1 = array (
'0' => array ('fid' => 1, 'tid' => 1, 'name' =>'Name1' ),
'1' => array ('fid' => 1, 'tid' => 2 , 'name' =>'Name2' ),
'2' => array ('fid' => 1, 'tid' => 5 , 'name' =>'Name3' ),
'3' => array ('fid' => 1, 'tid' => 7 , 'name' =>'Name4' ),
'4' => array ('fid' => 3, 'tid' => 9, 'name' =>'Name5' ) 
);
function changeArrayStyle($arr){
 foreach($arr as $key=>$value){
  $result[$value['fid']][]=$value;
 }
 return array_values($result);
}
$arr2=changeArrayStyle($arr1);
echo "<pre>";
var_dump($arr2);
?>
 

5. 请简述数据库设计的范式及应用。
一般第3范式就足以,用于表结构的优化,这样做既可以避免应用程序过于复杂同时也避免了SQL语句过于庞大所造成系统效率低下。
ANSWER:
第一范式:若关系模式R的每一个属性是不可再分解的,再属于第一范式。
第二范式:若R属于第一范式,且所有的非码属性都完全函数依赖于码属性,则为第二范式。
第三范式:若R属于第二范式,且所有的非码属性没有一个是传递函数依赖于候选码,则属于第三范式。
6.一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数,用SQL语句及视图、存储过程分别实现。
存储过程:
复制代码
DELIMITER //
create procedure proc_countNum(in columnId int,out rowsNo int)
begin
  select count(*) into rowsNo from member where member_id=columnId;    
end
call proc_countNum(1,@no);
select @no;
 

视图:
复制代码
create view v_countNum as select member_id,count(*) as countNum from member group by member_id
select countNum from v_countNum where member_id=1
 

7 表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
复制代码
select
 case
  when first_name>middle_name then
  case when first_name>last_name then first_name
  else last_name end
 else
  case when middle_name>last_name then middle_name else last_name
   end
  end as name
 from member
 

8请简述项目中优化sql语句执行效率的方法,从哪些方面,sql语句性能如何分析?
    ANSWER:  sql优化有鸟用,不如直接加索引。
9 如果模板是用smarty模板。怎样用section语句来显示一个名为$data的数组。比如:
复制代码
$data = array(
[0] => array( [id]=8  [name]='name1')
[1] => array( [id]=10 [name]='name2')
[2] => array( [id]=15 [name]='name3')
  ......
)
 

写出在模板页的代码? 若用foreach语句又要怎样显示呢?
 ANSWER: 没用过smarty??????????????????????以后更新。
10 写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。(目录操作)
复制代码
 <?php
$d = dir(dirname(__file__));
//echo "Handle: " . $d->handle . "\n";
//echo "Path: " . $d->path . "\n";
while ( false !== ($entry = $d->read ()) ) {
 echo $entry . "<br />";
}
$d->close ();
?>
 

11 两张表 city表和province表。分别为城市与省份的关系表。
city:
id City Provinceid
1 广州 1
2 深圳 1
3 惠州 1
4 长沙 2
5 武汉 3
………. 广州
province:
id Province
1 广东
2 湖南
3 湖北
……….
(1) 写一条sql语句关系两个表,实现:显示城市的基本信息。?
(2) 显示字段:城市id ,城市名, 所属省份 。
如:
Id(城市id) Cityname(城市名) Privence(所属省份)
。。。。。。。。。
。。。。。。。。。
(2)如果要统计每个省份有多少个城市,请用group by 查询出来。? 
显示字段:省份id ,省份名,包含多少个城市。
ANSWER:
1.select A.id,A.Cityname,B.Province from city A,province B where A.provinceid=B.id
2.select B.id,B.Province,count(*) as num from city A,province B where A.provinceid=B.id group by B.id
12. 按照你的经验请简述软件工程进行软件开发的步骤。以下工具Rational Rose、PowerDesigner、Project、VSS或CVS、TestDirector使用过那种,有缺点是什么?
 公司用dbdesigner及cvs,测试管理工具用的是Mantis
13. 请简述操作系统的线程与进程的区别。列举LINUX下面你使用过的软件?
        
14. 请使用伪语言结合数据结构冒泡排序法对以下一组数据进行排序 10 2 36 14 10 25 23 85 99 45。
复制代码
  <?php
function bubble_sort(& $arr){
 $number=count($arr);
 for($i=0;$i<$number-1;$i++){
  for($j=0;$j<$number-1-$i;$j++){
   if($arr[$j]>$arr[$j+1]){
    $tmp=$arr[$j];
    $arr[$j]=$arr[$j+1];
    $arr[$j+1]=$tmp;
   }
  }
 }
}
$str="10 2 36 14 10 25 23 85 99 45";
$arr=explode(" ",$str);
bubble_sort($arr);
echo "<pre>";
var_dump($arr);
?> 
 
 


smarteng 发布于 2009-10-27 12:10

tom.com php面试题

都不算太难,应该说很简单就过了。

拿其中一道题说说吧

题目要求大体是这样的:

给一个字符串 $s = 'Welcome to tom!',要他把这个字符串里面的每个单词翻转,
注意不是从头到尾翻转,而是把每个单词翻转,应该输出为:

$s='emocleW ot !mot';不能用php自带的函数,

当时还有两个题,要求在一定时间内完成,写的不好,现在来重新写一下,

开始用的递归,后来想想,太浪费了,其实很简单(受徐哥启发)

下面是给出的完整代码:[break]

/**
 * @Fun:把一个串中的单词翻转
 *
 * @param string &$word 想翻转的字符串,直接来操作所给的字符串
 * @param int $start 串中单词开始的位置
 * @param int $end 串中单词结束的位置
 * @return void
 * @author smarteng <smarteng@yeah.net>
 */
function reverse(&$word,$start,$end)
{
 $len=$end-$start+1;
 $mid= ceil( $len/2 );

 for($i=0;$i<$mid;$i++)
 {
  $tmp=$word[$start+$i];
  $word[$start+$i]=$word[$end-$i];
  $word[$end-$i]=$tmp;
 }
}

 

function resortString(&$word){
 $len = strlen($word);
 
 for($i=0;$i<$len;$i++)
 {
  
  //welcome to tom
  //第一个非空白字符
  while($i<$len && $word[$i]==' ') $i++;
  //获得单词开始的位置
  $start_pos = $i;
  
  while($i<$len && $word[$i]!=' ') $i++;
        //获得单词结束的位置
  $end_pos=$i-1;
  
  reverse($word,$start_pos,$end_pos);
  
 }

}

$s = ‘Welcome to      the   Real World !’;

resortString($s);
echo $s;

————————今天看到一个更猛的——————————

分析
主要是字符串定位,提取和反转,用正则是最应该先想到的方向

代码
<?php
$str = '[];/hello../,world/frds';
$pattern = '/([a-z0-9]+)/ie';
$replacement = 'strrev("
\\1")';
 
echo preg_replace($pattern, $replacement, $str);
补充
这是我在看了其他人的解法之后另外想的一个,这种情况下思路就被别人的方法束缚了,所以弄个差不多的出来,算是让大家重新熟悉一下这种语法吧。主要是e修正符的使用。

 原文地址:http://vipzhicheng.com/node/169

 另一个是返回Key 的

<?
$array=array(2,3,1,5,-1,4);

function returnKey($a)
{
 $number = count($a);
 $pos=0;
 while($a[$pos]!=-1)
 {
  $tmp=$pos;
  if($a[$pos]==-2) return -1;
  $pos=$a[$pos];
  $a[$tmp]=-2;
  if($pos > $number) return -1;
 }
 return $pos;
}

echo returnKey($array);
?>

 

还有一个求中间值的:

<?
$array=array(2,3,1,5,-1,4);

function returnKey($a)
{
 $number = count($a);
 $pos=0;
 while($a[$pos]!=-1)
 {
  $tmp=$pos;
  if($a[$pos]==-2) return -1;
  $pos=$a[$pos];
  $a[$tmp]=-2;
  if($pos > $number) return -1;
 }
 return $pos;
}

echo returnKey($array);

//之后做相应的处理

 

查找中间位置:
当然可以用二分查找,使查找的更迅速,我只是简单的实现了,也可以像徐哥那样

        1   2   3   4   5   ....  100
       ==============================
Lsum    1   3   6   10  15  ....   5050
Rsum    5050                   199 100
 

先遍历一下,做好两个数字 ,之后比对,对多次查询,是一个灰常不错的方法~

<?
$a=array(1,1,1,1,1,1,1,13,7);

function findmiddle($a)
{
 $number =count($a);
 $leftsum = $a[0];
 $rightsum = array_sum($a)-$a[0]-$a[1];
 for ($i = 1;$i <$number;$i++) {
//  echo " start for: leftsum=$leftsum ,rithtsum= '$rightsum' <br>";
  if($leftsum != $rightsum){
   $leftsum += $a[$i];
   $rightsum -= $a[$i+1];
//   echo " leftsum=$leftsum ,rithtsum= '$rightsum' <br>";
  }else if($leftsum == $rightsum){
   return $a[$i];
  }else {
   return -1;//没找到
  }
 }
 
}
$theNumber = findmiddle($a);
echo $theNumber;
?>
 


smarteng 发布于 2009-10-10 20:42

php面试题集合

简述题(50分)()
1、用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2分)
echo date('Y-m-d H:i:s', strtotime('-1 day'));
或者
$yesterday = time() - (24 * 60 * 60);
echo 'today:'.date('Y-m-d H:i:s')."\n";
echo 'yesterday:'. date('Y-m-d H:i:s', $yesterday)."\n";
2、echo(),print(),print_r()的区别(3分)
echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)
print只能打印出简单类型变量的值(如int,string)
print_r可以打印出复杂类型变量的值(如数组,对象)
echo -- 输出一个或者多个字符串[break]
3、能够使HTML和PHP分离开使用的模板(1分)
smarty,Heyes Template Class等
5、使用哪些工具进行版本控制?(1分)
CVS和SVN,SVN号称下一代CVS,功能强大,不过CVS是老牌,市占率很高.我一直用SVN,题目是问用什么工具呃,这个可能需要这么回答:CVS Server on Apache作服务端,WinCVS作客户端;Subversion on Apache/DAV 做服务端,TortoiseSVN做客户端,或者Subclipse做客户端.
6、如何实现字符串翻转?(3分)
strrev()
或者
$str = "abcdefg";

function strrevv($str)
{
$len=strlen($str);
$newstr = '';
for($i=$len;$i>=0;$i--)
{
$newstr .= $str{$i};
}
return $newstr;
}
$showstr = strrevv($str);
echo $showstr."<br>";


---------------------------------------------------------------
7、优化MYSQL数据库的方法。(4分,多写多得)
(1).选取最适用的字段属性,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。
(2).使用连接(JOIN)来代替子查询(Sub-Queries)
(3).使用联合(UNION)来代替手动创建的临时表
(4).尽量少使用 LIKE 关键字和通配符
(5).使用事务和外键
或者
(1).数据库设计方面,这是DBA和Architect的责任,设计结构良好的数据库,必要的时候,去正规化(英文是这个:denormalize,中文翻译成啥我不知道),允许部分数据冗余,避免JOIN操作,以提高查询效率
(2).系统架构设计方面,表散列,把海量数据散列到几个不同的表里面.快慢表,快表只留最新数据,慢表是历史存档.集群,主服务器Read & write,从服务器read only,或者N台服务器,各机器互为Master
(3).(1)和(2)超越PHP Programmer的要求了,会更好,不会没关系.检查有没有少加索引
(4).写高效的SQL语句,看看有没有写低效的SQL语句,比如生成笛卡尔积的全连接啊,大量的Group By和order by,没有limit等等.必要的时候,把数据库逻辑封装到DBMS端的存储过程里面.缓存查询结果,explain每一个sql语句
(5).所得皆必须,只从数据库取必需的数据,比如查询某篇文章的评论数,select count(*) ... where article_id = 就可以了,不要先select * ... where article_id = 然后msql_num_rows.只传送必须的SQL语句,比如修改文章的时候,如果用户只修改了标题,那就update ... set title = where article_id = 不要set content = (大文本)
(6).必要的时候用不同的存储引擎.比如InnoDB可以减少死锁.HEAP可以提高一个数量级的查询速度
8、PHP的意思(送1分)
Hypertext Preprocessor
9、MYSQL取得当前时间的函数是?,格式化日期的函数是(2分)
now(), DATE_FORMAT(date,format)
10、实现中文字串截取无乱码的方法。(3分)
mb_substr()
---------------------------------------------------------------
11、您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?(1分)
TortoiseSVN-1.2.6 svn-1.2.3
12、您是否用过模板引擎? 如果有您用的模板引擎的名字是?(1分)
smarty
13、请简单阐述您最得意的开发之作(4分)
14、对于大流量的网站,您采用什么样的方法来解决访问量问题?(4分)
首先,确认服务器硬件是否足够支持当前的流量
其次,优化数据库访问。
第三,禁止外部的盗链。
第四,控制大文件的下载。
第五,使用不同主机分流主要流量
第六,使用流量分析统计软件。
-----------------------------------------------------------------
15、用PHP写出显示客户端IP与服务器IP的代码1分)
//显示客户端I
function get_client_ip() {#
if(getenv('HTTP_CLIENT_IP')) {
$client_ip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR')) {
$client_ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR')) {
$client_ip = getenv('REMOTE_ADDR');
} else {
$client_ip = $HTTP_SERVER_VAR['REMOTE_ADDR'];
}
return $client_ip;
}
//服务器IP
function get_server_ip(){
if (isset($_SERVER))
{
if($_SERVER['SERVER_ADDR']) $huoqu_ip=$_SERVER['SERVER_ADDR'];
else $huoqu_ip=$_SERVER['LOCAL_ADDR'];
}
else
{
$huoqu_ip=getenv('SERVER_ADDR');
}
return $huoqu_ip;
}
16、语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们? (2分)
require()和include()除了怎样处理失败之外在各方面都完全一样。include()产生一个警告而require()则导致一个致命错误。
换句话说,如果你想在丢失文件时停止处理页面,用require()。include() 就不是这样,脚本会继续运行。
require()无论如何都会包含文件,而include()可以有选择地包含.
代替用
include_once
require_once
17、如何修改SESSION的生存时间(1分).(没有测试)
$savePath = "./session_save_dir/";
$lifeTime = 24 * 3600;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
18、有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html ,如何得到它的内容?($1分)
file_get_contents($url)
19、在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(?);(2分)
未授权(Unauthorized)
//Header("http/1.0 403 Forbidden");
Header("http/1.0 404 Not found");
12、在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?(1分)
在大部分语言里,双引号是字符串,单引号是字符。但是在PHP里,字符串的表现形式有3种。即:

单引号
双引号
定界符(heredoc syntax)
看见了吧,单引号居然可以用来表示字符串。那么如果我想表示单引号怎么办?和大多数语言一样,使用转义符号吧。即反斜线"\".那么使用单引号和双引号有什么区别呢?我的观点是没有多大区别。唯一的区别就是双引号可以应用更多的转义符。
让我们定界符吧。它的语法是"<<<"。用法是在其后提供一个标识符,并且是在行首开始写,然后在标识符后提供字符串,再在字符串后提供此标识符来结尾。例如:

<?php
$str = <<<EOD
Hello, this is an example for HEREDOC Syntax.
Please attention to it.
EOD;
echo $str;
?>注意,这里的提供的标志符是EOD,中间的是字符串。
<<<EOD这个开头并没有分号
结束标志必须顶格写,并且要有分号结束
13、谈谈asp,php,jsp的优缺点(1分)--(具体请自己搜索)
14、谈谈对mvc的认识(1分)
MVC(Model/View/Controller)模式包括三类对象。Model是应用对象,View是它在屏幕上的表示,
Controller定义用户界面对用户输入的响应方式。
模型-视图-控制器(MVC)是80年代Smalltalk-80出现的一种软件设计模式,现在已经被广泛的使用。
1)模型(Model)
模型是应用程序的主体部分。模型表示业务数据,或者业务逻辑.
2)视图(View)
视图是应用程序中用户界面相关的部分,是用户看到并与之交互的界面。
3)控制器(controller)
控制器工作就是根据用户的输入,控制用户界面数据显示和更新model对象状态。
-------------------------------------------------------------------
15、写出发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email)(2分)
select members.username
from members
order by posts DESC
limit 10
16. 请说明php中传值与传引用的区别。什么时候传值什么时候传引用?(2分)
按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。
按引用传递则不需要复制值,对于性能提高很有好处。
17. 在PHP中error_reporting这个函数有什么作用? (1分)
用来配置错误信息回报的等级
18. 请写一个函数验证电子邮件的格式是否正确 (2分)
//if the email address is valid, return true,else return false
function validateEmail($email)
{
if(eregi('^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$',$email) ){
return true;
}else{
return false;
}
}
19. 简述如何得到当前执行脚本路径,包括所得到参数。(2分)
echo $_SERVER['SCRIPT_FILENAME']."?".$_SERVER['QUERY_STRING'];
20.如何修改SESSION的生存时间. (1分)
setcookie()

session_set_cookie_params($lifeTime)
--------------------------------------------------------------------
21、JS表单弹出对话框函数是?获得输入焦点函数是? (2分)
alert(),prompt(),confirm()
focus()
22、JS的转向函数是?怎么引入一个外部JS文件?(2分)
window.location.href
<script type="text/javascript" src="prototype.js"></script>
23、foo()和@foo()之间有什么区别?(1分)
PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
注意: @ 运算符只对表达式有效。对新手来说一个简单的规则就是:如果能从某处得到值,就能在它前面加上 @ 运算符。例如,可以把它放在变量,函数和include()调用,常量,等等之前。不能把它放在函数或类的定义之前,也不能用于条件结构例如 if 和 foreach 等。
24、如何声明一个名为”myclass”的没有方法和属性的类? (1分)
class myclass{};
25、如何实例化一个名为”myclass”的对象?(1分)
$newmyclass = new myclass();
26、你如何访问和设置一个类的属性? (2分)
通过-⟩
$newmyclass = new myclass();
$temp=$newmyclass->testvalue;
$newmyclass->testvalue="a";
27、mysql_fetch_row() 和mysql_fetch_array之间有什么区别? (1分)
mysql_fetch_row -- 从结果集中取得一行作为枚举数组
mysql_fetch_array -- 从结果集中取得一行作为关联数组,或数字数组,或二者兼有

--------------------------------------------------------------------
28、GD库是做什么用的? (1分)
GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。
在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。
29、指出一些在PHP输入一段HTML代码的办法。(1分)
print("<br/>");
echo "<br/>";
30、下面哪个函数可以打开一个文件,以对文件进行读和写操作?(1分)(c)
(a) fget() (b) file_open() (c) fopen() (d) open_file()
31、下面哪个选项没有将 john 添加到users 数组中? (1分) (a)(c)
(a) $users[] = ‘john’;
(b) array_add($users,’john’);//这个选项不敢确定,但是测试着没有这个函数
(c) array_push($users,‘john’);
(d) $users ||= ‘john’;
32、下面的程序会输入是否?(1分)
<?php
$num = 10;
function multiply(){
$num = $num * 10;
}
multiply();
echo $num;
?>
否,局部变量
33、使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来 (2分)
表名User
Name Tel Content Date
张三 13333663366 大专毕业 2006-10-11
张三 13612312331 本科毕业 2006-10-15
张四 021-55665566 中专毕业 2006-10-15

请根据上面的题目完成代码:
$mysql_db=mysql_connect("local","root","pass");
@mysql_select_db("DB",$mysql_db);
$result=mysql_query("select * from User where Name='张三'");
while($row=mysql_fetch_array($result))
{
echo $row['Name'].$row['Tel'].$row['Content'].$row['Date'];
echo "<br>";
}
34、如何使用下面的类,并解释下面什么意思?(3)

class test{
function Get_test($num){
$num=md5(md5($num)."En");
return $num;
}
}
双重md5加密
$testObject = new test();
$encryption = $testObject->Get_test("xiaotian_ls");
----------------------------------------------------------------------------
35、写出 SQL语句的格式 : 插入 ,更新 ,删除 (4分)
表名User
Name Tel Content Date
张三 13333663366 大专毕业 2006-10-11
张三 13612312331 本科毕业 2006-10-15
张四 021-55665566 中专毕业 2006-10-15
(a) 有一新记录(小王 13254748547 高中毕业 2007-05-06)请用SQL语句新增至表中
INSERT INTO User('Name','Tel','Content','Date') VALUES('小王','13254748547','高中毕业','2007-05-06')
(b) 请用sql语句把张三的时间更新成为当前系统时间
UPDATE User SET Date=DATE_FORMAT(NOW(),'%Y-%m-%d') WHERE Name='张三'
(c) 请写出删除名为张四的全部记录
DELETE FROM User WHERE Name='张四'
36、请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别(2分)
37、MySQ自增类型(通常为表ID字段)必需将其设为(?)字段(1分)
38、写出以下程序的输出结果 (1分)
<?
$b=201;
$c=40;
$a=$b>$c?4:5;
echo $a;
?>
答案:4
39、检测一个变量是否有设置的函数是否?是否为空的函数是?(2分)
isset();empty();
-----------------------------------------------------------------------------
40、取得查询结果集总数的函数是?(1分)
mysql_fetch_array();
41、$arr = array('james', 'tom', 'symfony'); 请打印出第一个元素的值 (1分)
echo $arr['0'];
42、请将41题的数组的值用','号分隔并合并成字串输出(1分)
$arr_im = implode(",",$arr);
print_r($arr_im);
43、$a = 'abcdef'; 请取出$a的值并打印出第一个字母(1分)
$a = 'abcdef';
echo $a;
$a_exp = substr($a,0,1);
echo "<br>";
echo $a_exp;
44、PHP可以和sql server/oracle等数据库连接吗?(1分)
当然可以
45、请写出PHP5权限控制修饰符(3分)
PHP5引入了访问修饰,被放在属性和方法声明的前面用以控制它们的可见性。PHP5中支持以下三种不同的访问修饰:
   1、默认的是public(公共),即当你没有为属性和方法指定访问修饰时就默认为public的。而这些public的项目在类内类外都可以访问。
   2、private(私有)访问修饰,意味着被修饰的项只能在类中被访问。如果你没使用__get()和__set(),就最好给每个属性都加上 private修饰。也可以给方法加private修饰,例如一些只在类中才用到的函数。private修饰的项不能被继承(更多详细内容会在本章后续部分提到)。
   3、protected(保护)修饰的项能在类及其子类中访问。同样更多详细内容会在本章后续部分提到。现在暂时可以把protected看成界于public和private之间的修饰。
46、请写出php5的构造函数和析构函数(2分)
如果你在一个类中声明一个函数,命名为__construct,这个函数将被当成是一个构造函数并在建立一个对象实例时被执行. 清楚地说,__是两个下划线. 就像其它任何函数一样,构造函数可能有参数或者默认值. 你可以定义一个类来建立一个对象并将其属性全放在一个语句(statement)中.
你也可以定义一个名为__destruct的函数,PHP将在对象被销毁前调用这个函数. 它称为析构函数.
------------------------------------------------------------------------------

47、以下请用PHPMYADMIN完成--(没有测试)

(一)创建新闻发布系统,表名为message有如下字段 (3分)

id 文章id
title 文章标题
content 文章内容
category_id 文章分类id
hits 点击量

(二)同样上述新闻发布系统:表comment记录用户回复内容,字段如下 (4分)

comment_id 回复id
id 文章id,关联message表中的id
comment_content 回复内容
现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面
文章id 文章标题 点击量 回复数量
用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示为0
select message.id,message.title, message.hits sum(select count(0) from comment where message.id=comment.id) as comsums from message comment order by comsums;

(三)上述内容管理系统,表category保存分类信息,字段如下 (3分)

category_id int(4) not null auto_increment;
categroy_name varchar(40) not null;
用户输入文章时,通过选择下拉菜单选定文章分类
写出如何实现这个下拉菜单
//以下使用的adodb
$cnn =& NewADOConnection('mysql');
$cnn -> Connect($db_hostspec, $db_username, $db_password, $db_database);
$cnn -> SetFetchMode(ADODB_FETCH_ASSOC);
if (!$cnn) message("无法连接数据库 $db_database");
$sql = "SELECT * FROM `category` WHERE 1;
$rst =& $cnn -> Execute($sql);
if (!$rst) die($cnn -> ErrorMsg());
$arr_categroy = $rst -> GetArray();
<select>
<?php foreach ($arr_categroy as $i => $row): ?>
<option value="<?php echo $i;?> "><?php echo $row;?></option>
<?php endforeach; ?>
</select>


smarteng 发布于 2009-10-09 14:29

最新php面试题及答案

首先声明这是是从网上搜的,当然答案我看过,觉得对的就贴上了,正则题,大多是自己写的,

如有不对,请留言~

笔试题:

1. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名(8分)
   例如: http://www.cmstop.com/abc/123/test.php?id=1&catid=15 需要取出 php

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

[break]

2. 写一个函数,算出两个文件的相对路径(8分)
   如 $a = '/a/b/c/d/e.php';
      $b = '/a/b/12/34/c.php';

function getRelativePath($a, $b) {  
    $returnPath = array(dirname($b));  
    $arrA = explode('/', $a);  
    $arrB = explode('/', $returnPath[0]);  
    for ($n = 1, $len = count($arrB); $n < $len; $n++) {  
        if ($arrA[$n] != $arrB[$n]) {  
            break;  
        }   
    }  
    if ($len - $n > 0) {  
        $returnPath = array_merge($returnPath, array_fill(1, $len - $n, '..'));  
    }  
      
    $returnPath = array_merge($returnPath, array_slice($arrA, $n));  
    return implode('/', $returnPath);  
   }  
   echo getRelativePath($a, $b);


3. 写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。(10分)
function myScandir($dir){
     $files = array();
     if ( $handle = opendir($dir) ){
         while ($file = readdir($handle))  {
             if ($file != ".." && $file != ".") {
                 if ( is_dir($dir . "/" . $file) ) {
                     $files[$file] = myScandir($dir . "/" . $file);
                 }else {
                     $files[] = $file;
                 }
             }
         }
         closedir($handle);
         return $files;
     }
}
4. PHP5中魔术方法函数有哪几个,请举例说明各自的用法(8分)
类中的魔术方法:
The function names __construct 类的构造函数,
 __destruct 类的析构函数,
 __get 取得类的属性, __set 设置类的属性, __isset 判断是否设置, __unset 销毁(see Overloading),
 __toString , __clone are magical in PHP classes.

PHP中的魔术方法
取得是否自动加转义符的设置
get_magic_quotes_gpc();

5.请说明在php.ini中safe_mode开启之后对于PHP系统函数的影响(10分)
exec()
system()
passthru()
popen()
escapeshellcmd()
pcntl_exec()


6.将1234567890转换成1,234,567,890 每3位用逗号隔开的形式。(7分)
<?php
$num = "1234567890.11"; 
$num = preg_replace('/(?<=[0-9])(?=(?:[0-9]{3})+(?![0-9]))/', ',', $num);
echo $num;
?>

7.使用正则表达式提取一段标识语言(html或xml)代码段中指定标签的指定属性值(需考虑属性值对不规则的

情况,如大小写不敏感,属性名值与等号间有空格等)(12分)
   此处假设需提取test标签的attr属性值,请自行构建包含该标签的串
   <test attr = "abcd" />
<?php
$string ='<test attr = "ddfdf" />';
$match = '/\<\w{4} \w{4} = \"(\w+)\" \/\>/';
preg_match($match,$string, $matches);
echo  $matches[1];
?>

8.请建立一个索引同时提升以下两个SQL语句的性能,如何知道你建立的索引被使用了?(10分)
   select * from content where modelid=2 and catid=1 and status=1 order by published desc,

contentid desc
   select * from content where catid=1 and status=1 order by contentid desc

CREATE INDEX content_id ON content (catid,status)

 

9. 设计一个网页,使得打开它时弹出一个全屏的窗口,该窗口中有一个文本框和一个按钮。用户在文本框中输

入信息后点击按钮就可以把窗口关闭,而输入的信息却在主网页中显示(12分)

var theResponse = window.prompt("欢迎?","请在此输入您的姓名。");

 

10.基于jquery框架实现以下行的向上、向下和删除(15分)

<ul>
   <li><span>一</span><span id="1"><a href="javascript: move_up(1)">上移</a> | <a

href="javascript: move_down(1)">下移</a> | <a href="javascript: del(1)">删除</a></span></li>
   <li><span>二</span><span id="2"><a href="javascript: move_up(2)">上移</a> | <a

href="javascript: move_down(2)">下移</a> | <a href="javascript: del(2)">删除</a></span></li>
   <li><span>三</span><span id="3"><a href="javascript: move_up(3)">上移</a> | <a

href="javascript: move_down(3)">下移</a> | <a href="javascript: del(3)">删除</a></span></li>
</ul>

<script type="text/javascript">
function move_up(id)
{
   $(body #1)
}

function move_down(id)
{

}

function del(id)
{

}
</script>


smarteng 发布于 2009-10-09 14:25