基础题
1.表单中 get与post提交方法的区别?
答:get用户端将数据加到URL后,格式为”?字段1=输入数据1&字段2=输入数据2&..."。
由于get提交参数后会在地址栏中显示出来,所以会产生严重的安全问题。
get传输的数据量小,get传输的数据量小,这主要是因为受url长度限制;而post可以传输大量的数据。
get限制表单中数据集的范围为asc2码,而post可以支持整个iso10646字符集。
2.session与cookie的区别?
答:cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。
3.数据库中的事务是什么?
答:事务就是一系列的操作,这些操作完成一项任务。只要这些操作里有一个操作没有成功,事务就操作失败,发生回滚事件。即撤消前面的操作,这样 可以保证数据的一致性。而且可以把操作暂时放在缓存里,等所有操作都成功有提交数据库,这样保证费时的操作都是有效操作。
简述题(50分)
1、用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2分)
echo date('Y-m-d H:i:s', strtotime('-1day')); //前一天
echo '
';
echo date('Y-m-d H:i:s', strtotime('-1week'));//前一周
echo '
';
echo date('Y-m-d H:i:s');//现在时间
echo '
';
echo date('Y-m-d H:i:s', strtotime('next Monday'));//下一个星期一
echo '
';
echo date('Y-m-d H:i:s', strtotime('last Monday'));//上一个星期一
?>
2、echo,die(),print(),print_r() 的区别(3分)
echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)
print() 只能打印出简单类型变量的值(如int,string)
print_r() 可以打印出复杂类型变量的值(如数组,对象)
echo 输出一个或者多个字符串
die()函数给出更易理解的错误提示,然后die()函数将自动退出程序。
var_dump :输出布尔值
3、能够使HTML和PHP分离开使用的模板(1分)
smarty
5、使用哪些工具进行版本控制?(1分)
cvs, subversion
6、如何实现字符串翻转?(3分)
---------------------------------------------------------------
7、优化MYSQL数据库的方法。(4分,多写多得)
(1).选取最适用的字段属性,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。
(2).使用连 接(JOIN)来代替子查询(Sub-Queries)
(3).使用联合(UNION)来代替手动创建的临时表
(4).尽量少使用 LIKE 关键字和通配符
(5).使用事务和外键
8、PHP的意思(送1分)
PHP,是英文超级文本预处理语言Hypertext Preprocessor的缩写。PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的 脚本语言
9、MYSQL取得当前时间的函数是?,格式化日期的函数是(2分)
now(), DATE_FORMAT(date,format)
10、实现中文字串截取无乱码的方法。(3分)
$str ='这样一来我的字符串就不会有乱码^_^' ;
echo"mb_substr:" .mb_substr( $str,0 ,7 ,'utf-8' ) ;//结果:这样一来我的字
echo"
" ;
echo"mb_strcut:" .mb_strcut( $str,0 ,6 ,'utf-8' ) ;//结果:这样
?>
---------------------------------------------------------------
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分)
18、 有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?($1分)
方法一:
$readcontents =fopen ("http://www.baidu.com/", "rb");
$contents =stream_get_contents ($readcontents);
fclose ($readcontents);
echo $contents;
?>
方法二:
echo file_get_contents ("http://www.baidu.com/");
?>
其实最简单的就是:file_get_contents($url)
19、 在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(?);(2分)
未授 权(Unauthorized)
Header("http/1.0 403 Forbidden");
12、在PHP 中,heredoc是一种特殊的字符串,它的结束标志必须?(1分)
跟起始的一样,且结束标志前也要一个换行,后面加上分号
很重要的一点必须指出,结束标识符所在的行不能包含任何其他字符,可能除了一个分号(;)之外,这尤其意味着该标识符不能被缩进,而且在分号之前和之后都 不能有任何空格或制表符。同样重要的是要意识到在结束标识符之前的第一个字符必须是你的操作系统中,定义的换行符。
例子
echo <<
第二行
show;
?>
13、谈谈 asp,php,jsp的优缺点(1分)
简单来说,ASP只能说是一门WEB技术,因为比较简单,很容易上手,不过安全性比较低,使用与一般中小企业网站!
PHP应该说是一 门比较牛的语言,现在很多大门户都采用PHP+Mysql,对于移植与安全全面提升。
JSP是Sun公司根据ASP语言开发出来的,很多语 法格式都很相识,因为Java Servlet输出HTML代码比较繁琐和复杂,所以出了JSP,JSP一般都是做视图的也就是我们所见的MVC模式,即模式-视图-控制器,因为可以全 面支持Java技术,对于电子商务已经企业家WEB应用现在很热
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 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'];
--------------------------------------------------------------------
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分)
(a) fget() (b) file_open() (c) fopen() (d) open_file()
31、下面哪个选项没有将 john 添加到users 数组中? (1分)
(a) $users[] = ‘john’;
(b) array_add($users,’john’);
(c) array_push($users,‘john’);
(d) $users ||= ‘john’;
32、下面的程序会输入是 否?(1分)
$num = 10;
function multiply(){
$num = $num * 10;
}
multiply();
echo $num;
?>
10
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);
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");
----------------------------------------------------------------------------
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` . `user` ( `Name` , `Tel` , `Content` , `Date` ) VALUES ( '小王' , '13254748547' , '高中毕业' , '2007-05-06' )
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分)
int 数值类型 char 固定长度字符串 varchar 可变长字符串 datetime 日期时间型 text 字符字符串
char列的长度固定为创建表时声明的长度.varchar列中的值为可变长字符串.
37、MySQ自增类型(通常为表ID字段)必需将其设为(?)字段(1分)
AUTO_INCREMENT
auto_increment
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分)
方法一:
echo $a{0};
方法二:
$a_exp = substr($a,0,1);
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 desc;
(三)上述内容管理系统,表category保存分类信息,字段如下 (3分)
category_id int(4) not null auto_increment;
categroy_name varchar(40) not null;
用户输入文章时,通过选择下拉菜单选定文章分类
写出如何实现这个下拉菜单
$conn=mysql_connect("localhost","root","password")ordie("无法连接数据库");
mysql_select_db("table",$conn)or die("找不到数据源");
$sql= "SELECT * FROM category ;
$arr_categroy=$mysql_query($sql)or die(mysql_error());
编程题 :
1. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
$url = "http://www.sina.com.cn/abc/de/fg.php?id=1 ";
$a = explode("/",$url);
$c = explode("?",$a[count($a)-1]);
$b = explode(".",$c[0]);
print_r($a);
echo '
';
print_r($c);
echo '
';
print_r($b);
echo '
';
print($b[1]);
?>
主要是explode()函数的应用
2. 在 HTML 语言中,页面头部的 meta 标记可以用来输出文件的编码格式,以下是一个标准的 meta 语句
请使用 PHP 语言写一个函数,把一个标准 HTML 页面中的类似 meta 标记中的 charset 部分值改为 big5
请注意:
1. 需要处理完整的 html 页面,即不光此 meta 语句
2. 忽略大小写
3. ' 和 " 在此处是可以互换的
4. 'Content-Type' 两侧的引号是可以忽略的,但 'text/html; charset=gbk' 两侧的不行
5. 注意处理多余空格
3. 写一个函数,算出两个文件的相对路径
如 $a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';
计算出 $b 相对于 $a 的相对路径应该是 ../../c/d将()添上
4.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
function my_scandir($dir){
$files = array();
if ( $handle = opendir($dir) ) {
while ( ($file = readdir($handle)) !== false ) {//readdir()返回目录中下一个文件的文件名
if ( $file != ".." && $file != "." ) {//列出当前目录的所有文件并去掉 . 和 ..
if ( is_dir($dir . "/" . $file) ) {
$files[$file] = scandir($dir . "/" . $file);
}else {
$files[] = $file;
}
}
}
closedir($handle);
return $files;
}
}
echo '';
print_r( my_scandir('D:/wamp/www/news/templates'));
echo '';
?>
5.简述论坛中无限分类的实现原理。
数据库设计
6.设计一个网页,使得打开它时弹出一个全屏的窗口,该窗口中有一个文本框和一个按钮。用户在文本框中输入信息后点击按钮就可以把窗口关闭,而输入的信息 却在主网页中显示
填空题
1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量__ $_SERVER['PHP_SELF'] __中;而链接到当前页面的URL记录在预定义变量_ $_SERVER['HTTP_REFERER'] ___中。
// 本页地址,SCRIPT_NAME也可以:php/test.php
echo $_SERVER['PHP_SELF']."
" ;
// 链接到当前页面的前一页面的 URL 地址:
echo $_SERVER['HTTP_REFERER']."
" ;
// 其它的见参考手册:语言参考》变量》预定义变量
//前执行脚本的绝对路径名:D:Inetpubwwwrootphp est.php
echo $_SERVER["SCRIPT_FILENAME"]."
" ;
// 正在浏览当前页面用户的 IP 地址:127.0.0.1
echo $_SERVER["REMOTE_ADDR"]."
" ;
// 查询(query)的字符串(URL 中第一个问号 ? 之后的内容):id=1&bi=2
echo $_SERVER["QUERY_STRING"]."
" ;
// 当前运行脚本所在的文档根目录:d:inetpubwwwroot
echo $_SERVER["DOCUMENT_ROOT"]."
";
?>
2. 执行程序段将输出 __0 __。
php
echo 8 % ( - 2 ) . "
" ; // 参考手册》语言参考》运算符》算术运算符》%为取模运算,输出0
echo (( - 8 ) % 3 ) . "
" ; // 取模 $a % $b 在 $a 为负值时的结果也是负值。输出-2
echo ( 8 % ( - 3 )) . "
" ; // 输出2
?>
3.在HTTP 1.0中,状态码 401 的含义是__ 未授权__;如果返回“找不到文件”的提示,则可用 header 函数,其语句为_ header("HTTP/1.0 404 Not Found");___。
4.数组函数 arsort 的作用是_ 对数组进行逆向排序并保持索引关系___;语句 error_reporting(2047)的作用是_ report All errors and warnings___。
5.PEAR中的数据库连接字符串格式是_ 类似: mysql://user:pass@host/database___。
6.写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把scrīpt标记及其内容都去掉):____。
$script="以下内容不显 示:/si", "替换内容", $script);
?>
7.以Apache模块的方式安装PHP,在文件http.conf中首先要用语句_ LoadModule php5_module "c:/php/php5apache2.dll"___动态装载PHP模块,然后再用语句__ AddType application/x-httpd-php .php__使得 Apache把所有扩展名为php的文件都作为PHP脚本处理。
8.语句 include 和 require 都能把另外一个文件包含到当前文件中,它们的区别是_ 在如何处理失败时,includ() 产生一个警告而 require()则导致一个致命错误___;为了避免多次包含同一文件,可以用语句__ require_once()/include_once()__来代替它们。
9.类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是_ serialize() /unserialize()___。
10.一个函数的参数不能是对变量的引用,除非在php.ini中把__ allow_call_time_pass_reference boolean :__设为on.
11.SQL中LEFT JOIN的含义是__ 自然左外连接__。如果 tbl_user记录了学生的姓名(name)和学号(ID),tbl_score记录了学生(有的学生考试以后被开除了,没有其记录)的学号(ID)和 考试成绩(score)以及考试科目(subject),要想打印出各个学生姓名及对应的的各科总成绩,则可以用SQL语句__ select A.id,sum(B.score) as sumscore from tbl_user A left join tbl_score B on A.ID=B.ID group by A.id __。
12.在PHP中,heredoc是一种特殊的字符串,它的结束标志必须__ 结束标识符所在的行不能包含任何其它字符除";"__。