第一篇:PHP面试题
PHP程序员初级面试题
一、解释一下语句作用,并标示出以下哪一句不会把 John 新增到 users 阵列?
$users[] = 'john';
array_add($users,‟john‟);
array_push($users,„john‟);
$users ||= 'john';
二、sort()、assort()、和 ksort()有什么分别?它们分别在什么情况下使用? sort()
asort()
ksort()
三、以下的代码会产生什么?为什么? $num =10;function multiply(){ $num =$num *10;} multiply();echo $num;
四、reference 跟一个正规的变量有什么分别?如何 pass by reference?在什么情况下我们需要这样做?
五、哪些函式可以用来向正在执行的脚本中插入函式库?
六、foo()与 @foo()有什么分别?
七、你如何替 PHP 的应用程式侦错?
八、“===”是什么?试举一个“==”是真但“===”是假的例子。
九、你会如何定义一个没有成员函式或特性的类别 myclass?
十、include 和 include_once 有什么分别?require 又如何?
十一、以下哪一个函式可以把浏览器转向到另一个页面? redir()
header()
location()
redirect()
十二、以下哪一个函式可以用来开启档案以便读/写? fget()
file_open()
fopen()
open_file()
十三、mysql_fetch_row()和 mysql_fetch_array()有什么分别?
十四、下面的代码用来做什么?请解释。
$date='08/26/2003';print ereg_replace(“([0-9]+)/([0-9]+)/([0-9]+)”,“[url=file://2///1///3%22,$date]2/1/3”,$date[/url]);
十五、试写出几个输出一段 HTML 代码的方法。(一)
成功把 John 新增到阵列 users。函式 array_add()无定义。
成功把 John 新增到阵列 users。
语法错误。
(二)根据阵列中元素的值,以英文字母顺序排序,索引键会由 0 到 n-1 重新编号。主要是当阵列索引键的值无关疼痒时用来把阵列排序。
与 sort()一样把阵列的元素按英文字母顺序来排列,不同的是所有索引键都获得保留,特别适合替联想阵列排序。
根据阵列中索引键的值,以英文字母顺序排序,特别适合用于希望把索引键排序的联想阵列。
(三)由于函式 multiply()没有指定 $num 为全域变量(例如 global $num 或者 $_GLOBALS['num']),所以 $num 的值是 10。
(四)Reference 传送的是变量的地址而非它的值,所以在函式中改变一个变量的值时,整个应用都见到这个变量的新值。一个正规变量传送给函式的是它的值,当函式改变这个变量的值时,只有这个函式才见到新值,应用的其他部分仍然见到旧值。
$myVariable = “its' value”;Myfunction(&$myVariable);// 以 reference 传送参数以 reference 传送参数给函式,可以使函式改变了的变量,即使在函式结束后仍然保留新值。
(五)对这道题目不同的理解会有不同的答案,我的第一个想法是插入 PHP 函式库不外乎 include()、include_once()、require()、require_once(),但细心再想,“函式库”也应该包括 com 物件和.net 函式库,所以我们的答案也要分别包括 com_load 和 dotnet_load,下次有人提起“函式库”的时候,别忘记这两个函式。
(六)foo()会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。@foo()在执行这个函式时,会隐藏所有上述的错误讯息。
很多应用程式都使用 @mysql_connect()和 @mysql_query 来隐藏 mysql 的错误讯息,我认为这是很严重的失误,因为错误不该被隐藏,你必须妥善处理它们,可能的话解决它们。
(七)我并不常这样做,我曾经试过很多不同的侦错工具,在 Linux 系统中设定这些工具一点也不容易。不过以下我会介绍一个近来颇受注目的侦错工具。
PHPAPD,第一步是执行以下的指令安装: pear install apd安装后在你的脚本的开头位置加入以下的语句开始进行侦错: apd_set_pprof_trace();执行完毕,打开以下档案来查阅执行日志: apd.dumpdir 你也可以使用 pprofp 来格式化日志。
(八)“===”是给既可以送回布尔值“假”,也可以送回一个不是布尔值但却可以赋与“假”值的函式,strpos()和 strrpos()便是其中两个例子。
问题的第二部份有点困难,想一个“==”是假,但是“===”是真的例子却很容易,相反的例子却很少。但我终于找到以下的例子:
if(strpos(“abc”, “a”)== true){ // 这部分永不会被执行,因为 “a” 的位置是 0,换算成布尔值“假”}if(strpos(“abc”, “a”)=== true){ // 这部份会被执行,因为“===”保证函式 strpos()的送回值不会换算成布尔值.}(九)
class myclass{}(十)$obj = new myclass();(十一)
使用语句:$this->propertyName,例如:
class myclass{ private $propertyName;public function __construct(){ $this->propertyName = “value”;}}(十二)
三者都是用来在脚本中插入其他档案,视乎 url_allow_fopen 是否核准,这个档案可以从系统内部或外部取得。但他们之间也有微细的分别:
include():这个函式容许你在脚本中把同一个档案插入多次,若果档案不存在,它会发出系统警告并继续执行脚本。include_once():它跟 include()的功能相似,正如它的名字所示,在脚本的执行期间,有关档案只会被插入一次。require():跟 include()差不多,它也是用来在脚本中插入其他档案,但若果档案不存在,它会发出系统警告,这个警告会引致致命错误令脚本中止执行
(十三)这不是一个 PHP 函式,会引致执行错误。
这个是正确答案,header()用来插入卷头资料,可以用来使浏览器转向到另一个页面,例如:
header(“Location: http:// 标签,为何要自行编写正规表达式?好了,便当作是面试的一道考题吧,我会这样回答:
$stringOfText = ”
This is a test
“;$expression = ”/<(.*?)>(.*?)(.*?)>/“;echo preg_replace($expression, ”[url=file://2/]2[/url]“, $stringOfText);// 有人说也可以使用 /(<[^>]*>)/ $expression = ”/(<[^>]*>)/“;echo preg_replace($expression, ”“, $stringOfText);(十八)这正是为何我老是告诉别人选择适当的编程语言,若果你只用一种语言的话你怎么能回答这道问题?这道问题很简单,Perl 所有阵列变量都是以 @ 开头,例如 @myArray,PHP 则沿用 $ 作为所有变量的开头,例如 $myArray。至于 Perl 表示散列表则用 %,例如 %myHash,PHP 则没有分别,仍是使用 $,例如
$myHash。
(十九)最主要的俩各选择是 session 和 cookie。使用 session 的方法是在每一页的开始加上 session_start(),然后利用 $_SESSION 散列表来储存 session 变量。至于 cookie 你只需记着一个原则:在输出任何文字之前调用 set_cookie()函式,此外只需使用 $_COOKIE 散列表便可以存取所有 cookie 变量。
还有一个不那么可靠的方法,就是利用访客的 IP 地址,这个方法有特定的危险性。
(二十)这个可能是我最喜欢的函式库,自从 PHP 4.3.0 版本后 GD 便内建在 PHP 系统中。这个函式库让你处理和显示各式格式的图档,它的另一个常见用途是制作所图档。GD 以外的另一个选择是 ImageMagick,但这个函式库并不内建于 PHP 之中,必须由系统管理员安装在伺服器上。
(二十一)嗯,你可以使用 PHP 中任何一种输出语句,包括 echo、print、printf,大部分人都使用如下例的 echo: echo ”My string $variable";你也可以使用这种方法:
echo <<
我们不要为一个简单的问题引发一场舌战,正如我经常说的:“为工作选择适合的语言,不要把工作迁就语言。”我个人认为 Perl 十分适合用作命令行工具,虽然它在网页应用上也有不错的表现,但是它的真正实力在命令行上才能充分发挥。同样地,PHP 虽然可以在控制台的环境中使用,但是个人认为它在网页应用上有更好的表现,PHP 有大量专门为网页应用而设计的函式,Perl 则似乎以命令行为设计之本。
个人来说两种语言我都喜欢,在大学期间我经常使用 Perl、PHP 和 Java,可惜工作上我使用 C#,但在家里我花不少时间操练 PHP、Perl、Ruby(现正学习)和 Java,保持我的技能知识在最新状态。很多人问我 C 和 C++ 怎么样,它们是否仍有机会在我的应用中占一席位,我的答案基本上是“否”,我近来的工作主要集中在网页开发,虽然 C 和 C++ 也可以用来写网页,但它们到底不是为这种工作而设计的,“为工作选择适合的语言”,若果我需要编写一个控制台应用,用来展示 bubble sort、quick sort 和 merge sort 的效能比较,我一定会使用 C / C++。若果我需要编写一个相片簿系统,我会使用 PHP 或者 C#(我认为制作用户介面方面.NET 语言比网页更加)。
第二篇:PHP程序员面试题
北京融入网络科技有限公司
PHP工程师面试题
1、请写一个实现中文字串截取无乱码的方法。(超出部分用’…..’替换)。
2、ThinkPHP框架中,下列定义有什么不同?
$userModel = M(“User”);
$userMode l= D(“User”);
3、如果让你模拟登陆微信公众平台并设置微信的开发模式中的URL和Token,你会如何去做?(思路或代码皆可)。
4、谈谈对你对PHP的认识或你擅长的技术。
5、假设有一个博客系统,数据库存储采用mysql,用户数量为1000万,预计文章总数为10亿,每天有至少10万的更新量,每天访问量为5000万,对数据库的读写操作的比例超过10:1,你如何设计该系统,以确保其系统高效,稳定的运行?
提示:可以从数据库设计,系统框架,及网络架构方面进行描述,可以自由发挥。
6、你经常去那些网站?有没有自己的博客或git 开源项目。
/ 1
第三篇:PHP面试题(一)
PHP程序员面试题
1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中;而链接到当前页面的的前一页面URL记录在预定义变量(2)中 ”;//链接到当前页面的前一页面的 URL 地址: echo $_SERVER['HTTP_REFERER'].“
”;
//其它的见参考手册:语言参考》变量》预定义变量
//前执行脚本的绝对路径名:D:Inetpub,如何得到它的内容?($1分)
//需要读取的page地址
$http_page_url=“http://”;//打开远程文件
$read_file=fopen($http_page_url,“rb”);if(!feof($read_file)){ //读取远程文件 $file_stream = “";do { $data = fread($read_file, 8192);if(strlen($data)== 0){ break;} $file_stream.= $data;} while(true);}
echo $file_stream;//输出内容
对 PHP 5 及更高版本可以:
$handle = fopen(”http://“, ”rb“);
$contents = stream_get_contents($handle);
fclose($handle);
echo $contents;?>
最简单的方法是调用函数:
print file_get_contents('http://');
?>
18、在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(?);(2分)
状态值为401,代表未被授权;header(”Location: http://代码的办法。(1分)
1.echo ‘’;直接输出
2.require include 包含进来一段html代码
3.由XML文件得到
36、下面哪个函数可以打开一个文件,以对文件进行读和写操作?(1分)(a)fget()(b)file_open()(c)fopen()(d)open_file()
(c)是正确的
37、下面哪个选项没有将 john 添加到users 数组中?(1分)(a)$users[] = ‘john’;
(b)array_add($users,’john’);
(c)array_push($users,‘john’);(d)$users ||= ‘john’;
(b)(d)均是错误的写法
38、下面的程序会输入是否?(1分)$num = 10;function multiply(){ $num = $num * 10;} multiply();echo $num;?> 输出 10
39、使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来(2分)表名User Name Tel Content Date 张三 *** 大专毕业 2006-10-11 张三 *** 本科毕业 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 “ ”;}
40、如何使用下面的类,并解释下面什么意思?(3)class test{ function Get_test($num){ $num=md5(md5($num).“En”);return $num;} }
双重md5加密
$testObject = new test();$encryption = $testObject->Get_test(“xiaotian_ls”);
41、写出 SQL语句的格式 : 插入,更新,删除(4分)表名User Name Tel Content Date 张三 *** 大专毕业 2006-10-11 张三 *** 本科毕业 2006-10-15 张四 021-55665566 中专毕业 2006-10-15(a)有一新记录(小王 *** 高中毕业 2007-05-06)请用SQL语句新增至表中
Insert INTO User('Name','Tel','Content','Date')VALUES('小王','***','高中毕业','2007-05-06')(b)请用sql语句把张三的时间更新成为当前系统时间
Update User SET Date=DATE_FORMAT(NOW(),'%Y-%m-%d')Where Name='张三'(c)请写出删除名为张四的全部记录
Delete FROM User Where Name='张四'
42、请写出数据类型(int char varchar datetime text)的意思;请问varchar和char有什么区别(2分)
int 数值类型 char 固定长度字符串 varchar 可变长字符串 datetime 日期时间型 text 字符字符串
char列的长度固定为创建表时声明的长度.varchar列中的值为可变长字符串.43、MySQ自增类型(通常为表ID字段)必需将其设为(?)字段(1分)
AUTO_INCREMENT
44、写出以下程序的输出结果(1分)$b=201;$c=40;$a=$b>$c?4:5;echo $a;?> 4
45、检测一个变量是否有设置的函数是否?是否为空的函数是?(2分)
isset($a)empty($a)
46、取得查询结果集总数的函数是?(1分)
mysql_num_rows($res);
47、$arr = array('james', 'tom', 'symfony');请打印出第一个元素的值(1分)
echo $arr[0];
48、请将47题的数组的值用','号分隔并合并成字串输出(1分)
echo $arr[0].$arr[1].$arr[2];
49、$a = 'abcdef';请取出$a的值并打印出第一个字母(1分)
echo $a{0};
50、PHP可以和sql server/oracle等数据库连接吗?(1分)可以
51、请写出PHP5权限控制修饰符(3分)
private protected public
52、请写出php5的构造函数和析构函数(2分)
__construct __destruct
53、以下请用PHPMYADMIN完成
(一)创建新闻发布系统,表名为message有如下字段(3分)id 文章id title 文章标题 content 文章内容
category_id 文章分类id hits 点击量
Create TABLE 'message'('id' int(11)NOT NULL auto_increment, 'title' varchar(200)default NULL, 'content' blob, 'category_id' int(11)default NULL, 'hits' int(11)default NULL, PRIMARY KEY('id'))ENGINE=InnoDB DEFAULT CHARSET=utf8(二)同样上述新闻发布系统:表comment记录用户回复内容,字段如下(4分)comment_id 回复id id 文章id,关联message表中的id comment_content 回复内容
现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面
文章id 文章标题 点击量 回复数量
用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示为0
Select message.id id,message.title title,IF(message.`hits` IS NULL,0,message.`hits`)hits,IF(comment.`id` is NULL,0,count(*))number FROM message LEFT JOIN comment ON message.id=comment.id GROUP BY message.`id`
(三)上述内容管理系统,表category保存分类信息,字段如下(3分)category_id int(4)not null auto_increment;categroy_name varchar(40)not null;用户输入文章时,通过选择下拉菜单选定文章分类 写出如何实现这个下拉菜单
function categoryList(){ $result=mysql_query(“select category_id,categroy_name from category”)or die(“Invalid query: ”.mysql_error());print(“n”);while($rowArray=mysql_fetch_array($result)){ print(“".$rowArray['categroy_name'].”n“);} print(”");}
第四篇:php极品面试题
求职与招聘 往往少不了面试与笔试,作为一个php程序员、多多少少都会有类似的经历……以下是本人收集并整理的PHP面试题目,希望对同行们有所帮助,找到一份合适的php开发工作!(共三节)
以下是面试的题目
(一),下一篇:经典面试题(PHP基础型III)附答案 PHP已经赋予答案:
12、在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?(1分)PHPMA.COM 在大部分语言里,双引号是字符串,单引号是字符。但是在PHP里,字符串的表现形式有3种。即: 单引号 双引号
定界符(heredoc syntax)
看见了吧,单引号居然可以用来表示字符串。那么如果我想表示单引号怎么办?和大多数语言一样,使用转义符号吧。即反斜线‖".那么使用单引号和双引号有什么区别呢?我的观点是没有多大区别。唯一的区别就是双引号可以应用更多的转义符。
让我们定界符吧。它的语法是‖<<<‖。用法是在其后提供一个标识符,然后在标识符后提供字符串,再在字符串后提供此标识符来结尾。例如: 注意,这里的提供的标志符是EOD,中间的是字符串。PHPMA.COM << 结束标志必须顶格写,并且要有分号结束 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对象状态。PHPMA.COM ——————————————————————- 15、写出发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email)(2分)select members.username from members order by posts DESC limit 10 16.请说明php中传值与传引用的区别。什么时候传值什么时候传引用?(2分)按值传递:函数范围内对值的任何改变在函数外部都会被忽略 按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改phpma.com PHPma 优缺点:按值传递时,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 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(― echo ― 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分) 否,局部变量 33、使用php写一段简单查询,查出所有姓名为―张三‖的内容并打印出来(2分)表名User Name Tel Content Date 张三 *** 大专毕业 2006-10-11 张三 *** 本科毕业 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 ― 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程序员面试题 一、选择题 1、下列不属于PHP的开始结束标记的是:() A、 B、?> C、<%%> D、<> 2、下列程序的输出结果为() function test($a){ $a=’456’; } $a=’123’; test($a); echo $a++; ?> A、456 B、123 C、124 D、会报错 4、下列代码的输出结果为() function test($i) { return++$i+5; } echo test(1); ?> A、6 B、7 C、8 D、空 5、下列代码的输出结果为() $a=’123’; $b=&$a; $a=’789’; $b=’456’; echo $a; ?> A、123 B、456 C、789 D、空 二、简答题: 1、试写一个PHP脚本对数组进行排序,要求将数字数组中所有奇数放在左边,0放在中间,偶数放在右 边。如数组:array(23, 94, 0, 2, 56, 10, 77, 231, 75, 48) 2、表uesr,有如下几个字段:id,username,userpwd,regtime。 (1)、试写出查询该表所有记录的sql语句 (2)、要将id为5的记录中,username字段的值更新为“小王”,请写出sql语句 (3)、要删除id为10的记录,请写出sql语句 (4)、现在要新增一条记录。username的值为:小李;userpwd的值为:123456;regtime的值为:2012-09-01。请写出sql语句 3、试写一个PHP函数遍历一个文件夹【注:只需输出该目录的文件和子目录,无须对子目录再进行遍历】 4、请根据你的理解设计一个站内信系统的数据库,并简要说明字段意义和脚本实现细节 5、请使用PHP写一个文件上传脚本,要求只能上传gif/jpeg图像,并且图像大小不能超过1024KB。 三、附加题 试述你对程序员职业的理解以及你的工作习惯和为人处事的态度。【提示:回答本题时应该实事求是,尽量向面试官表现真实的自我】
‖);
‖;
‖;}第五篇:PHP程序员面试题