php面试题10(复习)
一、总结
复习
二、php面试题10
21、谈谈 asp,php,jsp 的优缺点(1 分)(asp要钱,jsp学习成本大)
答:ASP 全名 Active Server Pages,是一个 WEB 服务器端的开发环境, 利用它可以产生
和运
行动态的、交互的、高性能的 WEB 服务应用程序。ASP 采用脚本语言 VB Script 作为自
己的开发语言。
PHP 是一种跨平台的服务器端的嵌入式脚本语言. 它大量地借用 C,Java 和 Perl 语言
的语法, 并耦合 PHP 自己的特性,使 WEB 开发者能够快速地写出动态生成页面.它支持目前
绝大多数数据库。还有一点,PHP 是完全免费的,不用花钱,你可以从 PHP 官方站点
(http://www.php.net)*下载。而且你可以不受限制地获得源码,甚至可以从中加进你
自己需要的特色。
JSP 是 Sun 公司推出的新一代站点开发语言,他完全解决了目前 ASP,PHP 的一个通
云知梦,只为有梦想的人!
病--脚本级执行(据说 PHP4 也已经在 Zend 的支持下,实现编译运行).Sun 公司借
助自己在 Java 上的不凡造诣,将 Java 从 Java 应用程序 和 Java Applet 之外,又有
新的硕果,就是 Jsp--Java Server Page。Jsp 可以在 Serverlet 和 JavaBean 的支持
下,完成功能强大的站点程序。
三者都提供在 HTML 代码中混合某种程序代码、由语言引擎解释执行程序代码的能
力。但 JSP 代码被编译成 Servlet 并由 Java 虚拟机解释执行,这种编译操作仅在对 JSP
页面的第一次请求时发生。在 ASP 、PHP、JSP 环境下, HTML 代码主要负责描述信
息的显样式,而程序代码则用来描述处理逻辑。普通的 HTML 页面只依赖于 Web 服务
器,而 ASP 、PHP、JSP 页面需要附加的语言引擎分析和执行程序代码。程序代码的执
行结果被重新嵌入到 HTML 代码中,然后一起发送给浏览器。 ASP 、PHP、 JSP 三者
都是面向 Web 服务器的技术,客户端浏览器不需要任何附加的软件支持。
22、谈谈对 mvc 的认识(1 分)
答:由模型(model),视图(view),控制器(controller)完成的应用程序
由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;
23、写出发贴数最多的十个人名字的 SQL,利用下表:
members(id,username,posts,pass,email)(2 分)
答: select username,count(id) from members group by id order by count(id)
desc limit 10;
id name class
1 user1 1
2 user2 2
3 user3 1
4 user4 2
5 user5 1
select name from (select * from table order by id desc) table group by class;
24. 请说明 php 中传值与传引用的区别。什么时候传值什么时候传引用?(2 分)
答:按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时,php 必须复制值。特别是对于大型的字符串和对象来说,这将会
是一个代价很大的操作。
按引用传递则不需要复制值,对于性能提高很有好处。
25. 在 PHP 中 error_reporting 这个函数有什么作用? (1 分)
答:设置错误级别与错误信息回报
26. 请写一个函数验证电子邮件的格式是否正确 (2 分)
答:function checkEmail($email)
{
$pregEmail =
"/([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{
2})?/i";
return preg_match($pregEmail,$email);
}
$ptn="/\w+@(\w+)(\.\w+)+/";
27. 简述如何得到当前执行脚本路径,包括所得到参数。(2 分)
答:
[REQUEST_URI] => /index.php?id=3&name=user1&age=20
Script_filename
28、JS 表单弹出对话框函数是?获得输入焦点函数是? (2 分)
答:弹出对话框: alert(),prompt(),confirm()
获得输入焦点 focus()
29、JS 的转向函数是?怎么引入一个外部 JS 文件?(2 分)
答:window.location.href,<script type="text/javascript"
src="js/js_function.js"></script>
30、foo()和@foo()之间有什么区别?(1 分)
答:@foo()控制错误输出
31、如何声明一个名为”myclass”的没有方法和属性的类? (1 分)
答:class myclass{ }
32、如何实例化一个名为”myclass”的对象?(1 分)
答:new myclass()
33、你如何访问和设置一个类的属性? (2 分)
答:$object = new myclass();
$newstr = $object->test;
$object->test = "info";
34、mysql_fetch_row() 和 mysql_fetch_array 之间有什么区别? (1 分)
答:mysql_fetch_row 是从结果集取出 1 行数组,作为枚举
mysql_fetch_array 是从结果集取出一行数组作为关联数组,或数字数组,两者兼得
mysql_affected_rows() 增删改
mysql_num_rows() 查
35、GD 库是做什么用的? (1 分)
答:gd 库提供了一系列用来处理图片的 API,使用 GD 库可以处理图片,或者生成图片。
在网站上 GD 库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。
36、指出一些在 PHP 输入一段 HTML 代码的办法。(1 分)
答:echo "<a href='index.php'>aaa</a>";
37、下面哪个函数可以打开一个文件,以对文件进行读和写操作?(1 分)
(a) fget() (b) file_open() (c) fopen() (d) open_file() [ c ]
38、下面哪个选项没有将 john 添加到 users 数组中? (1 分)
(a) $users[] = ‘john’;
(b) array_add($users,’john’);
(c) array_push($users,‘john’);
(d) $users ||= ‘john’; [ a , c ]
bd
39、下面的程序会输入是否?(1 分)
$num = 10;
function multiply(){
$num = $num * 10;
}
multiply();
echo $num;
?>
输出:10
40、使用 php 写一段简单查询,查出所有姓名为“张三”的内容并打印出来 (2 分)
表名 User
NameTelContentDate
张三 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);
$sql="SELECT * FROM `user` WHERE name='张三'";
$result = mysql_query($sql);
while($rs = mysql_fetch_array($result)){
echo $rs["tel"].$rs["content"].$rs["date"];
}
41、如何使用下面的类,并解释下面什么意思?(3)
classtest{
functionGet_test($num){
$num=md5(md5($num)."En");
return$num;
}
}
答:$testnum = "123";
$object = new test();
$encrypt = $object->Get_test($testnum);
echo $encrypt;
类 test 里面包含 Get_test 方法,实例化类调用方法给字符串加密
42、写出 SQL 语句的格式 : 插入 ,更新 ,删除 (4 分)
表名 User
NameTelContentDate
张三 13333663366 大专毕业 2006-10-11
张三 13612312331 本科毕业 2006-10-15
张四 021-55665566 中专毕业 2006-10-15
(a) 有一新记录(小王 13254748547 高中毕业 2007-05-06)请用 SQL 语句新增至表
中
mysql_query("INSERT INTO `user` (name,tel,content,date) VALUES
('小王','13254748547','高中毕业','2007-05-06')")
(b) 请用 sql 语句把张三的时间更新成为当前系统时间
$nowDate = date("Ymd");
mysql_query("UPDATE `user` SET date='".$nowDate."' WHERE name='张山
'");
(c) 请写出删除名为张四的全部记录
mysql_query("DELETE FROM `user` WHERE name='张四'");
43、请写出数据类型(int char varchar datetime text)的意思; 请问 varchar 和 char 有
什么区别(2 分)
答:int 是数字类型,char 固定长度字符串,varchar 实际长度字符串,datetime 日期时间
型,text 文本字符串,char 的场地固定为创建表设置的长度,varchar 为可变长度的字符
44、写出以下程序的输出结果 (1 分)
$b=201;
$c=40;
$a=$b>$c?4:5;
echo$a;
?>
答:4
45、检测一个变量是否有设置的函数是否?是否为空的函数是?(2 分)
答:isset($str),empty($str);
46、取得查询结果集总数的函数是?(1 分)
答:mysql_num_rows($result);
47、$arr = array('james', 'tom', 'symfony'); 请打印出第一个元素的值 (1 分)
答:echo $array[0];
48、请将 41 题的数组的值用','号分隔并合并成字串输出(1 分)
答:for($i=0;$i<count($array);$i++){ echo $array[$i].",";}
Join()
49、$a = 'abcdef'; 请取出$a 的值并打印出第一个字母(1 分)
答:echo $a{0} 或 echo substr($a,0,1)
50、PHP 可以和 sql server/oracle 等数据库连接吗?(1 分)
答:当然可以
pdo
51、请写出 PHP5 权限控制修饰符(3 分)
答:public(公共),private(私用),protected(继承)
52、请写出 php5 的构造函数和析构函数(2 分)
答:__construct , __destruct
53、完成以下:
(一)创建新闻发布系统,表名为 message 有如下字段 (3 分)
id文章 id
title 文章标题
content 文章内容
category_id文章分类 id
hits 点击量
答:CREATE TABLE 'message'(
'id' int(10) NOT NULL auto_increment,
'title' varchar(200) default NULL,
'content' text,
'category_id' int(10) NOT NULL,
'hits' int(20),
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_idint(4)notnullauto_increment;
categroy_namevarchar(40)notnull;
用户输入文章时,通过选择下拉菜单选定文章分类
写出如何实现这个下拉菜单
答:function categoryList()
{
$result=mysql_query("select category_id,categroy_name from category")
or die("Invalid query: " . mysql_error());
print("<select name='category' value=''>\n");
while($rowArray=mysql_fetch_array($result))
{
print("<option
value='".$rowArray['category_id']."'>".$rowArray['categroy_name']."</option
>\n");
}
print("</select>");
}
编程题:
1. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
例如:http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
答案
第一种:
function getExt($url){
$arr = parse_url($url);
$file = basename($arr['path']);
$ext = explode(".",$file);
return $ext[1];
}
第二种 pathinfo();
2. 在 HTML 语言中,页面头部的 meta 标记可以用来输出文件的编码格式,以下是一个
标准的 meta 语句
请使用 PHP 语言写一个函数,把一个标准 HTML 页面中的类似 meta 标记中的
charset 部分值改为 big5
请注意:
1. 需要处理完整的 html 页面,即不光此 meta 语句
2. 忽略大小写
3.' 和 " 在此处是可以互换的
4.'Content-Type' 两侧的引号是可以忽略的,但 'text/html;charset=gbk' 两侧的不
行
5. 注意处理多余空格
header('content-type:text/html;charset=big5');
3. 写一个函数,算出两个文件的相对路径
如 $a='/a/b/c/d/e.php';
$b='/a/b/12/34/c.php';
cd../../c/d/e.php
计算出 $b 相对于 $a 的相对路径应该是 ../../c/d 将()添上
答:
<?php
$a = '/a/b/c/d/e/f/g.php';
$b = '/a/b/12/34/a/d/c/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));
$str=dirname(implode('/',array_slice($returnPath,1)));
return $str;
}
echo getRelativePath($a,$b);
填空题:
1. 在 PHP 中 , 当 前 脚 本 的 名 称 ( 不 包 括 路 径 和 查 询 字 符 串 ) 记 录 在 预 定 义 变 量
__$_SERVER['script_filename']__中 ;而链 接到 当前页面 的 URL 记录在预定 义 变量
__$_SERVER['HTTP_REFERER']__
2.执行程序段<?phpecho8%(-2)?>将输出__0__。
3.在 HTTP1.0 中,状态码 401 的含义是如果返回“找不到文件”的提示,则可用 header
函数,其语句为__404__。
4. 数 组 函 数 arsort 的 作 用 是 __ 对 数 组 进 行 逆 向 排 序 并 保 持 索 引 关 系 __; 语 句
error_reporting(2047)的作用是__报告所有错误和警告__。
6.写出一个正则表达式,过虑网页上的所有 JS/VBS 脚本(即把 scrīpt 标记及其内容都去掉):
Preg_replace(“/<script >.*<\/script>/ig”,””,$script);
7.以 Apache 模块的方式安装 PHP,在文件 http.conf 中首先要用语句____动态装载 PHP
模块,然后再用语句____使得 Apache 把所有扩展名为 php 的文件都作为 PHP 脚本处理。
LoadModulephp5_module"c:/php/php5apache2.dll"
AddTypeapplication/x-httpd-php.php,
8.语句 include 和 require 都能把另外一个文件包含到当前文件中,它们的区别是____;
为了避免多次包含同一文件,可以用语句__require_once||include_once__来代替它们。
9.对象的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函
数是___serialize _和__ unserialize__.
10.一个函数的参数不能是对变量的引用,除非在 php.ini 中把.
allow_call_time_pass_reference = off
11.SQL 中 LEFTJOIN 的含义是__自然左外链接__。如果 tbl_user 记录了学生的姓名(name)
和学号(ID),tbl_score 记录了学生(有的学生考试以后被开除了,没有其记录)的学号(ID)
和考试成绩(score)以及考试科目(subject),要想打印出各个学生姓名及对应的的各科总成
绩,则可以用 SQL 语句__
12.在 PHP 中,heredoc 是一种特殊的字符串,它的结束标志必须__<<<__。
编程题:
13.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
答:
function my_scandir($dir)
{
$files = array();
if ( $handle = opendir($dir) ) {
while ( ($file = readdir($handle)) !== false ) {
if ( $file != ".." && $file != "." ) {
if ( is_dir($dir . "/" . $file) ) {
$files[$file] = my_scandir($dir . "/" . $file);
}else {
$files[] = $file;
}
}
}
closedir($handle);
return $files;
}
}
一.把数组中的值加一
1.$arr=array(1,2,3);
foreach($arr as &$val){
$val=2;
}
2.$arr=array(1,2,3);
foreach($arr as $key=>$val){
$arr[$key]=$val+1;
}
二.函数中echo和return的区别:
$a=10;
$b=20;
function show($a,$b){
echo $a+$b;
return $a+$b;
}
echo "$a+$b=".show($a,$b);
三.验证邮箱格式
$str="jia@qq.com";
echo preg_match('/\w+@\w+\.\w+/',$str);
四.复习ajax
五.字符串翻转
$str='abcdef';
$str2='';
for($i=strlen($str)-1;$i>=0;$i--){
$str2.=$str{$i};
}
echo $str2;
六.mysql中获取当前时间以及日期格式化函数:
1.now();
2.date_format();
七.在 HTTP 1.0 中,状态码401的含义是什么?;如果返回“找不到文件”的提示,则可用header 函数,其语句为(?)
401:未被授权
返回找不到文件:header("HTTP/1.0 404 File Not Found");
八:用函数控制报错级别
error_reporting(E_ALL);
九:两个地址的相对路径:
$a='/a/b/c/d/e.php';
$b='/a/b/12/34/c.php';
$arr1=explode('/',$a);
array_shift($arr1);
$arr2=explode('/',$b);
array_shift($arr2);
for($i=0;$i<count($arr1);$i++){
if($arr1[$i]!=$arr2[$i]){:x
$pos=$i;
break;
}
}
$length=count($arr2)-1-$pos;
$str1=str_repeat('../',$length);
$str2=join('/',array_slice($arr1,$pos));
echo $str1.$str2;
25
27
匹配js标签