(转贴)PHP面试题系列一【附答案】

时间:2022-10-24 19:38:34

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

将输出(3)。 3.在HTTP 1.0中,状态码 401 的含义是(4);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(5)。 4.数组函数 arsort 的作用是(6);语句 error_reporting(2047)的作用是(7)。 5.PEAR中的数据库连接字符串格式是(8)。 6.写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把标记及其内容都去掉):(9)。 7.以Apache模块的方式安装PHP,在文件http.conf中首先要用语句(10)动态装载PHP模块,然后再用语句(11)使得Apache把所有扩展名为php的文件都作为PHP脚本处理。 8.语句 include 和 require 都能把另外一个文件包含到当前文件中,它们的区别是(12);为了避免多次包含同一文件,可以用语句(13)来代替它们。 9.类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是(14)。 10.一个函数的参数不能是对变量的引用,除非在php.ini中把(15)设为on. 11.SQL 中LEFT JOIN的含义是(16)。如果 tbl_user记录了学生的姓名(name)和学号(ID), tbl_score记录了学生(有的学生考试以后被开除了,没有其记录)的学号(ID)和考试成绩(score)以及考试科目(subject),要想打印出各个学生姓名及对应的的各科总成绩,则可以用SQL语句(17)。 12.在PHP中,heredoc是一种特殊的字符串,它的结束标志必须(18)。 13.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。 14.简述论坛中无限分类的实现原理。 15.设计一个网页,使得打开它时弹出一个全屏的窗口,该窗口中有一个文本框和一个按钮。用户在文本框中输入信息后点击按钮就可以把窗口关闭,而输入的信息却在主网页中显示。 答案(填空): 1. echo $_SERVER['PHP_SELF']; echo $_SERVER["HTTP_REFERER"]; 2. 0 3. (4)未授权 (5) header("HTTP/1.0 404 Not Found"); 4. (6)对数组进行逆向排序并保持索引关系 (7)All errors and warnings 5. 没弄明白 6. /<[^>].*?>.*?<//>/si 7.(10) LoadModule php5_module "D:/xampp/apache/bin/php5apache2.dll" (11) AddType application/x-httpd-php-source .phps AddType application/x-httpd-php .php .php5 .php4 .php3 .phtml 8.(12) 发生异常时include产生警告require产生致命错误 (13) require_once()/include_once() 9. serialize() /unserialize() 10. allow_call_time_pass_reference 11. (16) 自然左外连接 (17) select name , count(score) as sum_score from tbl_user left join tbl_score on tbl_user.ID=tbl_score.ID group by tbl_user.ID 12. 结束标识符所在的行不能包含任何其它字符除";" 13. /** * 遍历目录,结果存入数组。支持php4及以上。php5以后可用scandir()函数代替while循环。 * @param string $dir * @return array */ my_scandir($dir) { $files = array(); if ( $handle = opendir($dir) ) { while ( ($file = readdir($handle)) !== false ) { if ( $file != ".." && $file != "." ) { if ( is_dir($dir . "/" . $file) ) { $files[$file] = rec_scandir($dir . "/" . $file); } else { $files[] = $file; } } } closedir($handle); return $files; } } =============================================================================== PHP面试题系列二【附答案】 1、用PHP打印出前一天的时间格式是2006-5-10 22:21:21 2、echo(),print(),print_r()的区别 3、能够使HTML和PHP分离开使用的模板 4、如何实现PHP、JSP交互? 5、使用哪些工具进行版本控制? 6、如何实现字符串翻转? 7、优化MYSQL数据库的方法。 8、谈谈事务处理 9、apache+mysql+php实现最大负载的方法 10、实现中文字串截取无乱码的方法。 答案: 1.echo date('Y-m-d H:i:s', strtotime('-1 day')); 2.echo是语言结构,无返回值;print功能和echo基本相同,不同的是print是函数,有返回值;print_r是递归打印,用于输出数组对象 3.so much,其实PHP本身就是一种模版引擎,我用过的是smarty,常见的还有PHPLib,FastTemplate,Savant这里有个模板引擎列表:http://www.sitepoint.com/forums/showthread.php?t=123769 4. 题目有点含糊不清,SOAP,XML_RPC,Socket ,CURL都可以实现这些,如果是考PHP和Java的整合,PHP内置了这种机制(如果考PHP和.NET的整合,也可以这么回答),例如$foo = new Java('java.lang.System'); 5.CVS 和SVN,SVN号称下一代CVS,功能强大,不过CVS是老牌,市占率很高.我一直用SVN,题目是问用什么工具,呃,这个可能需要这么回答:CVS Server on Apache作服务端,WinCVS作客户端;Subversion on Apache/DAV 做服务端,TortoiseSVN做客户端,或者Subclipse做客户端. 6.用strrev函数呗,不准用PHP内置的就自己写: strrev($str) { $len=strlen($str); $newstr = ''; for($i=$len;$i>=0;$i--) { $newstr .= $str{$i}; } return $newstr; } 7.高考政治题,把你知道的知识点都写上吧.我的答案: (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.如同是个编程语言都会有答应Hello World的例子一样,是本数据库的教材都会讲A给B的账户转账50美元的例子,回答这个就好了.不过据我所知,用MySQL的企业,很少用MySQL来实现事务处理.何况现在Oracle收购了InnoDB的公司. 9.参见第七题的答案,那个地方搞好了这个问题就迎刃而解了. 10.哈哈哈,我猜出题的人是不是被substr的中文处理问题烦恼很久了,是不是还用了网上流传的用正则匹配中文字符然后截取的函数,其实,有非常简单的解决方法:mb_substr() =============================================================================== PHP 面试题系列三【附答案】 1、使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来表名User Name Tel Content Date 张三 13333663366 大专毕业 2006-10-11 张三 13612312331 本科毕业 2006-10-15 张四 021-55665566 中专毕业 2006-10-15 2、请根据上面的题目完成代码: $mysql_db=mysql_connect("local","root","pass"); @mysql_select_db("DB",$mysql_db); 3、如何使用下面的类,并解释下面什么意思? class test { Get_test($num) { $num=md5(md5($num)."En"); return $num; } } 4、用javascipt打印 “上海爱吉” 5、写出 SQL语句的格式 : 插入 ,更新 ,删除 6、谈谈对你PHP认识或你擅长的技术? 答案: 1.SELECT Name,Tel,Content,Date FROM User WHERE Name='张三' 2. $mysql_db = mysql_connect("local","root","pass"); @mysql_select_db("DB",$mysql_db); $sql = "SELECT Name,Tel,Content,Date FROM User WHERE Name='张三'"; $result = mysql_query($sql); while ($row = mysql_fetch_array($result)) { echo $row['Name'] . ' ' . $row['Tel'] . ' ' . $row['Content'] . ' ' . $row['Date'] . "
/r/n"; } 3. 用法: $get_test = new test(); $result = $get_test->Get_test(2); 将$num变量进行两次md5后返回,第2次的md5中的参数,在第一次md5($num)后多加了En 4. <> write('上海爱吉'); 5. 插入 INSERT INTO table (a1,a2,a3) S ($val1, '$val2', $val3); 修改 UPDATE table SET a1=$a1, a2='$a2' WHERE id=3; 删除 DELETE FROM table WHERE id=3; 6. 自己发挥 =============================================================================== PHP面试题系列四【附答案】 1、假定要使用Apache+Php的配置,并将php3编译成Apache的一个模块。那麽以下httpd.conf文件的语句是必须的:【 】 A、AddModule mod_php3.c B、LoadModule php3_module libexec/libphp3.so C、AddType application/x-httpd-php3.php3 D、setup E、make install 2、PHP支持的数据类型有七种,以下被支持的有:【】 A、array B、floating-point numbers(double) C、integer D、date E、string 3、以下程序:

程序输出为:[ ] A、15 B、35 C、20 D、5 4、以下程序

程序输出为:[ ] A、$str1 => 01 B、$str1 => 2 C、$str1 => 03 D、$str1 => 3 E、$str1 => 1 5、全局变量与局部变量 $a=1; sum() { echo $a; } sum(); 程序输出为:[ ] A、1 B、10 C、100 D、1000 E、空值 6、PHP的控制语句

$b) { echo "a 比 b 大"; } elseif ($a == $b) { echo "a 等于 b"; } else { echo "a 比 b 小"; } ?> 输出结果为:[ ] A、a 比 b 大 B、a 等于 b C、a 比 b 小 D、"a 比 b 小" E、无输出 7、include的功能和require一样,不同的是,require不能用在[ ] A、判断语句或循环里, B、连接语句里 C、声明语句里 D、文件的开头 E、文件的中间 8、PHP对字符串的处理程序 $name="Jollen"; echo 'Name:$name'; echo "Name:$name"; 输出结果为:[ ] A、Name:Jollen Name:Jollen B、Name:Jollen Name:$name C、Name:$name Name:Jollen D、Name:$name Name:$name E、Name:"Jollen" Name:Jollen 9、数据处理程序 $string="This is a test."; echo ereg_replace(" is"," was",$string)."
"; echo ereg_replace("() is","//1was",$string)."
"; echo ereg_replace("(() is)","//2was",$string)."
"; 输出为:[ ] A、This was a test. This is a test. This was a test. B、This is a test. This is a test. This was a test. C、This is a test. This is a test. This is a test. D、This was a test. This is a test. This is a test. E、This was a test. This was a test. This was a test. 10、下面建立与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"); 11、下面程序

[ ] A、从php@wilson.gs接收邮件 B、发送邮件到reply@wahaha.org.tw C、发送邮件到php@wilson.gs D、从reply@wahaha.org.tw接收邮件 E、不能发送任何邮件 12、rawurlencode()的作用是[ ] A、对PHP3将要输出的URL部分进行编码 B、对PHP3将要输入的URL部分进行编码 C、对PHP3已经输出的URL部分进行编码 D、对PHP3已经输出的URL部分进行编码 E、对PHP3将要输出的URL部分进行解码 13、假如我们要删除一个,再建立一个同样的,应写成:[ ] A、set("fullname"); set("fullname","Jacky"); B、set("fullname","Jacky"); C、set("fullname","Jacky"); set("fullname"); D、set("fullname"); E、sets("fullname","Jacky"); sets("fullname"); 14、如果要在大量的数据里读取一个字段的数据,则最好使用mysql_fetch_row()、mysql_fetch_array()、 mysql_fetch_object()函数。因为这几个函数的速度都比[ ] A、mysql_num_rows B、mysql_num_fields C、mysql_result D、mysql_list_fields E、mysql_insert_id 来得快。 15、在PHP中,如果派生类与父类有相同名字的函数,则派生类的函数会替换父类的函数,程序 class A { disName() { echo "Picachu"; } } class B extends A { var tmp; disName() { echo "Doraemon"; } } $cartoon = new B; $cartoon->disName(); 结果为:[ ] A、tmp B、Picachu C、disName D、Doraemon E、无输出 答案: 1.[C] 2.[ A B C E ] PHP的变量属于松散数据类型,在计算时动态(dynamic)决定。如果要强制设置变量的数据类型的话,可以利用 settype() 函数。或利用 c 语言的强制转型方式(type casting)。 3.[ A C ] 4.[ D ] 5.[ E ] 6.[ A ] 7.[ E ] 但include可以。 8.[ C ] 9.[ E ] 10.[ B D ] 11.[ C ] 12.[ C D ] 13.[ B ] 14.[ C ] 15.[ D ] =============================================================================== PHP面试题系列五【附答案】 一、基础题 1. 写出如下程序的输出结果

2. 写出如下程序的输出结果

3. 写出如下程序的输出结果

4. 写出如下程序的输出结果

5. 写出如下程序的输出结果

6. 写出如下程序的输出结果

7. 使用五种以上方式获取一个文件的扩展名 要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数,比如 get_ext1($file_name), get_ext2($file_name) 二、算法题 1. 使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组 2. 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组 3. 写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数 答案(以下答案不一定是最好的,只是一个简单的参考) 一、基础题 1. 相等 相等 不相等 2. true true true true true false true false 3. aaaaaa 4. 5 0 1 5. 5 2 6. 1 2 7. 使用五种以上方式获取一个文件的扩展名 1) get_ext1($file_name) { return strrchr($file_name, '.'); } 2) get_ext2($file_name) { return substr($file_name, strrpos($file_name, '.')); } 3) get_ext3($file_name) { return array_pop(explode('.', $file_name)); } 4) get_ext4($file_name) { $p = pathinfo($file_name); return $p['extension']; } 5) get_ext5($file_name) { return strrev(substr(strrev($file_name), 0, strpos(strrev($file_name), '.'))); } 二、算法题 1. 使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组 //冒泡排序(数组排序) 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; } //快速排序(数组排序) quick_sort($array) { if (count($array) <= 1) return $array; $key = $array[0]; $left_arr = array(); $right_arr = array(); for ($i=1; $i $val) { $keys[$key] = $val[$keys]; } if($order == 0) { asort($keys); } else { arsort($keys); } reset($keys); foreach($keys as $key => $vals) { $keysort[$key] = $key; } $new_array = array(); foreach($keysort as $key => $val) { $new_array[$key] = $arr[$val]; } return $new_array; }