PHP经典面试题(基础型)附答案
发布时间:2024-08-27 10:08:18浏览次数:23PHP 经典面试题(基础型 I)附答案求职与招聘 往往少不了面试与笔试,作为一个 php 程序员、多多少少都会有类似的经历……以下是本人收集并整理的 PHP 面试题目,希望对同行们有所帮助,找到一份合适的 php 开发工作!(共三节)以下是面试的题目(一),下一篇: PHP 经典面试题(基础型 II) 已经赋予答案:1、用 PHP 打印出前一天的时间格式是 2009-02-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 -- 输出一个或者多个字符串 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 语句,比如生成笛卡尔积的全连接啊,大量的 GroupBy 和 order by,没有 limit 等等.必要的时候,把数据库逻辑封装到 DBMS 端的存储过程里面.缓存查询结果,explain 每一个 sql 语句 (5).所得皆必须,只从数据库取必需的数据,比如查询某篇文章的评论数,select count(*) ... where article_id = 就可以了,不要先 select * ... where article_id = 然后 msql_num_rows.只传送必须的 SQL 语句,比如修改文章的时候,如果用户只修改了标题,那就 update ... set title = wherearticle_id = 不要 set content = (大文本)(6).必要的时候用不同的存储引擎.比如 InnoDB 可以减少死锁.HEAP 可以提高一个数量级的查询速度8、PHP 的意思(送 1 分)Hypertext Preprocessor9、MYSQL 取得当前时间的函数是?,格式化日期的函数是(2 分)now(), DATE_FORMAT(date,format)10、实现中文字串截取无乱码的方法。(3 分)mb_substr()---------------------------------------------------------------11、您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?(1 分)TortoiseSVN-1.2.6 svn-1.2.312、您是否用过模板引擎? 如果有您用的模板引擎的名字是?(1 分)smarty13、请简单阐述您最得意的开发之作(4 分)这个自己想,因为你不再是菜鸟,每个人都有不同的思路,思路也会随之自己的知识而改变……14、对于大流量的网站,您采用什么样的方法来解决访问量问题?(4 分)首先,确认服务器硬件是否足够支持当前的流量其次,优化数据库访问。第三,禁止外部的盗链。第四,控制大文件的下载。第五,使用不同主机分流主要流量第六,使用流量分析统计软件。-----------------------------------------------------------------15、用 PHP 写出显示客户端 IP 与服务器 IP 的代码 1 分)//显示客户端 Ifunction 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;}//服务器 IPfunction 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()可以有选择地包含.www.代替用include_oncerequire_once17、如何修改 SESSION 的生存时间(1 分).(没有测试)$savePath = "./session_save_dir/";$lifeTime = 24 * 3600;session_save_path($savePath);session_set_cookie_params($lifeTime);session_start();18、有一个网页地址, 比如 PHPma 主页: http://www.phpma.com,如何得到它的内容?($1 分)file_get_contents($url)19、在 HTTP 1.0 中,状态码 401 的含义是(?);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(?);(2 分)未授权(Unauthorized)Header("http/1.0 403 Forbidden"); 经典面试题(PHP 基础型 II)附答案来源:本站编辑 作者:phpma 时间:2009-02-13 Tag:PHP 经典面试题 (基础型 II) 附答案 点击: 44 求职与招聘 往往少不了面试与笔试,作为一个php 程序员、多多少少都会有类似的经历……以下是本人收集并整理的 PHP 面试题目,希望对同行们有所帮助,找到一份合适的 php 开发工作!(共三节)以下是面试的题目(一), 下一篇:经典面试题(PHP 基础型 III)附答案 PHP 已经赋予答案: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.usernamefrom membersorder by posts DESClimit 1016. 请说明 php 中传值与传引用的区别。什么时候传值什么时候传引用?(2 分)按值传递:函数范围内对值的任何改变在函数外部都会被忽略按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改 PHPma优缺点:按值传递时,php 必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。17. 在 PHP 中 error_reporting 这个函数有什么作用? (1 分)用来配置错误信息回报的等级18. 请写一个函数验证电子邮件的格式是否正确 (2 分)//if the email address is valid, return true,else return falsefunction 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 分) (b)(c)(d)(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 分)
表名 UserName 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");经典面试题(PHP 基础型 III)PHP 来源:本站编辑 作者:phpma 时间:2009-02-13 Tag:经典面试题(PHP 基础型 III)PHP 点击: 31 求职与招聘 往往少不了面试与笔试,作为一个 php 程序员、多多少少都会有类似的经历……以下是本人收集并整理的 PHP 面试题目,希望对同行们有所帮助,找到一份合适的 php 开发工作!(共三节)以下是经典面试题(PHP 基础型 III)附答案 PHP 已经赋予答案:35、写出 SQL 语句的格式 : 插入 ,更新 ,删除 (4 分) 表名 UserName 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;?>答案:439、检测一个变量是否有设置的函数是否?是否为空的函数是?(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 文章 idtitle 文章标题content 文章内容category_id 文章分类 idhits 点击量 (二)同样上述新闻发布系统:表 comment 记录用户回复内容,字段如下 (4 分)comment_id 回复 idid 文章 id,关联 message 表中的 idcomment_content 回复内容现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面
文章 id 文章标题 点击量 回复数量用一个 SQL 语句完成上述查询,如果文章没有回复则回复数量显示为 0select 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>