本文来自:http://bbs.51cto.com/thread-686966-1.html
1、用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2分)
<?php
//echo date('Y-m-d H:i:s',time()-60*60*24
echo date("Y:m:d H:i:s",strtotime("-1 day"));
?>
2、echo(),print(),print_r()的区别(3分)
echo是语言结构,无返回值;print功能和echo基本相同,不同的是print是函数,有返回值;print_r是递归打印,用于输出数组对象
3、能够使HTML和PHP分离开使用的模板(1分)
so much,其实PHP本身就是一种模版引擎,我用过的是smarty,常见的还有PHPLib,FastTemplate,Savant这里有个模板引擎列表:http://www.sitepoint.com/forums/showthread.php?t=123769
4、使用哪些工具进行版本控制?(1分)
CVS和SVN,SVN号称下一代CVS,功能强大,不过CVS是老牌,市占率很高.我一直用SVN,题目是问用什么工具,呃,这个可能需要这么回答:CVS Server on Apache作服务端,WinCVS作客户端;Subversion on Apache/DAV 做服务端,TortoiseSVN做客户端,或者Subclipse做客户端
5、如何实现字符串翻转?(3分)
<?php
function reverse($var)
{
$res="1";
for($i=0,$j=strlen($var);$i<$j;$i++)
{
$res=$var[$i].$res;
//echo $var[$i]."...";
}
return $res;
}
$tmpvar="abcde";
$res=reverse($tmpvar);
echo $res;
?>
---------------------------------------------------------------
6、优化MYSQL数据库的方法。(4分,多写多得)
(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可以提高一个数量级的查询速度
7、PHP的意思(送1分)
Hypertext Preprocessor 个人网页超文本预处理器 (服务器端使用的脚本语言)
8、MYSQL取得当前时间的函数是?,格式化日期的函数是(2分)
mysql> select now();
Date_Format('2009-01-28','%Y-%m-%d')
9、实现中文字串截取无乱码的方法。(3分)
---------------------------------------------------------------
$length) { $str=''; $len=$start+$length; $i = $start; while($i<$len) { if(ord(substr($string, $i, 1))>=128) { $str.=substr($string, $i, 3); $i = $i+ 3; } else { $str.=substr($string, $i, 1); $i ++; } } return $str; } else { return $string; } } ?>
10、您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?(1分)
SVN SVS
11、您是否用过模板引擎? 如果有您用的模板引擎的名字是?(1分)
smarty
12、请简单阐述您最得意的开发之作(4分)
13、对于大流量的网站,您采用什么样的方法来解决访问量问题?(4分)
可以根据需要以下方法
1、 PHP缓存
2、 生成html静态页面
3、 使用主辅数据库,把数据库的读写分开
4、 使用负载均衡器和多台服务器
-----------------------------------------------------------------
14、用PHP写出显示客户端IP与服务器IP的代码1分)
<?php
$ip=gethostbyname ("");
echo $ip;
?>
15、语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们? (2分)
include():这个函式容许你在脚本中把同一个档案插入多次,若果档案不存在,它会发出系统警告并继续执行脚本。
include_once():它跟 include() 的功能相似,正如它的名字所示,在脚本的执行期间,有关档案只会被插入一次。
require():跟 include() 差不多,它也是用来在脚本中插入其他档案,但若果档案不存在,它会发出系统警告,这个警告会引致致命错误令脚本中止执行
16、如何修改SESSION的生存时间(1分).
方法一:
将php.ini 中session.gc_maxlifetime 设置为 9999(默认为 1440)重启 apache 即可
方法二:
$savePath = "./session_save_dir/";
$lifeTime = 24 * 3600;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
方法三:
setcookie() 或session_set_cookie_params($lifeTime)
17、有一个网页地址, 比如PHP研究室主页: http://www.phpv.net/index.html,如何得到它的内容?($1分)
$content=file_get_contents('http://www.windsfly.cn/index.asp');
18、在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(?);(2分)
401表示未授权;header("HTTP/1.0 404 Not Found");
19、在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?(1分)
heredoc的语法是用"<<<"加上自己定义成对的标签,在标签范围內的文字视为一个字符串
<?php
$str = <<<EOD
I saw a dog yesterday.
EOD;
?>
需要注意的是:
1、"<<<"后面的EOD是自己定义的标签名称,必须要成对,而且后面要加上分号表示结束。
2、结束的标签前面最好不要有空格,以免发生错误
20、谈谈asp,php,jsp的优缺点(1分)
21、谈谈对mvc的认识(1分)
MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程 序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。
-------------------------------------------------------------------
22、写出发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email)(2分)
SELECT username,posts FORM members ORDER BY posts DESC LIMIT 10;
23. 请说明php中传值与传引用的区别。什么时候传值什么时候传引用?(2分)
按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。
按引用传递则不需要复制值,对于性能提高很有好处。
24. 在PHP中error_reporting这个函数有什么作用? (1分)
error_reporting( ) 用于设置php的侦听错误的级别.[用来配置错误信息回报的等级].
25. 请写一个函数验证电子邮件的格式是否正确 (2分)
<?php
if(isset($_POST['action']) && $_POST['action']=='submitted')
{
$email=$_POST['email'];
if(!preg_match("/^(?:w+.?)*w+@(?:w+.?)*w+$/",$email))
{
echo "电子邮件检测失败";
}
else
{
echo "电子邮件检测成功";
}
}
else
{
?>
26. 简述如何得到当前执行脚本路径,包括所得到参数。(2分)
$url_this = "http://".$_SERVER ['HTTP_HOST'].$_SERVER['PHP_SELF'];
echo $url_this;
则显示 : http://localhost/lu.php
引用:
28、JS表单弹出对话框函数是?获得输入焦点函数是? (2分)
弹出对话框: alert(),prompt(),confirm()
获得输入焦点 focus()
29、JS的转向函数是?怎么引入一个外部JS文件?(2分)
window.location
<script language="JavaScript" src="test.js">
30、foo()和@foo()之间有什么区别?(1分)
@可以屏蔽错误!
31、如何声明一个名为”myclass”的没有方法和属性的类? (1分)
class myclass{};
32、如何实例化一个名为”myclass”的对象?(1分)
$newClass = new myclass();
33、你如何访问和设置一个类的属性? (2分)
$newClass = new myclass();
$testVar=$newClass->test;
$newClass->test="my string";
34、mysql_fetch_row() 和mysql_fetch_array之间有什么区别? (1分)
mysql_fetch_row -- 从结果集中取得一行作为枚举数组
mysql_fetch_array -- 从结果集中取得一行作为关联数组,或数字数组,或二者兼有
--------------------------------------------------------------------
35、GD库是做什么用的? (1分)
GD库主要是用来做图片处理用的。
36、指出一些在PHP输入一段HTML代码的办法。(1分)
echo "<table></table>";
print("<table></table>");
37、下面哪个函数可以打开一个文件,以对文件进行读和写操作?(1分)
(a) fget() (b) file_open() (c) fopen() (d) open_file()
38、下面哪个选项没有将 john 添加到users 数组中?(c)(d) (1分)
(a) $users[] = ‘john’;
(b) array_add($users,’john’);
(c) array_push($users,‘john’);
(d) $users ||= ‘john’;
39、下面的程序会输入是否?(1分)
$num = 10;
function multiply(){
$num = $num * 10;
}
multiply();
echo $num;
?>
否,局部变量
40、使用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 'name:'.$row['name'].'tel:'.$row['tel'].'<br />';
}
$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>";
}
41、如何使用下面的类,并解释下面什么意思?(3)
class test{
function Get_test($num){
$num=md5(md5($num)."En");
return $num;
}
}
双重md5加密
$testObject = new test();
$encryption = $testObject->Get_test("xiaotian_ls");
42、写出 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语句新增至表中
(b) 请用sql语句把张三的时间更新成为当前系统时间
(c) 请写出删除名为张四的全部记录
(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='张四'
43、请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别(2分)
int 代表整数
char 字符型 varchar 可变字符型 text 文本型 ntext 多行文本 datetime 是日期,可以精确到毫秒
44、MySQ自增类型(通常为表ID字段)必需将其设为(?)字段(1分)
auto_increment
45、写出以下程序的输出结果 (1分)
$b=201;
$c=40;
$a=$b>$c?4:5;
echo $a;
?>
三元表达式 4
46、检测一个变量是否有设置的函数是否?是否为空的函数是?(2分)
isset($a) empty($a)
-----------------------------------------------------------------------------
47、取得查询结果集总数的函数是?(1分)
count()
48、$arr = array('james', 'tom', 'symfony'); 请打印出第一个元素的值 (1分)
print $arr[0];
49、请将41题的数组的值用','号分隔并合并成字串输出(1分)
print $arr[0].","$arr[1].","$arr[2] ;//^_^
$arr1 = implode(",",$arr);
50、$a = 'abcdef'; 请取出$a的值并打印出第一个字母(1分)
print substr($a, 0, 1);
51、PHP可以和sql server/oracle等数据库连接吗?(1分)
可以
52、请写出PHP5权限控制修饰符(3分)
private protected public
53、请写出php5的构造函数和析构函数(2分)
__construct __destruct
引用:
填空题
1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量 $_SERVER['PHP_SELF'];中;而链接到当前页面的URL记录在预定义变量$_SERVER["HTTP_REFERER"];中。
2.执行程序段将输出 0。
3.在HTTP 1.0中,状态码 401 的含义是__未授权__;如果返回“找不到文件”的提示,则可用 header 函数,其语句为 header("HTTP/1.0 404 Not Found");。
4.数组函数 arsort 的作用是 对数组进行逆向排序并保持索引关系 ;语句 error_reporting(2047)的作用是 All errors and warnings 。
5.PEAR中的数据库连接字符串格式是 没弄明白 。
6.写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把scrīpt标记及其内容都去掉): /<[^>].*?>.*?<\/>/si 。
7.以Apache模块的方式安装PHP,在文件http.conf中首先要用语句 LoadModule php5_module "D:/xampp/apache/bin/php5apache2.dll" 动态装载PHP模块,然后再用语句 AddType application/x-httpd-php-source .phps AddType application/x-httpd-php .php .php5 .php4 .php3 .phtml 使得Apache把所有扩展名为php的文件都作为PHP脚本处理。
8.语句 include 和 require 都能把另外一个文件包含到当前文件中,它们的区别是 发生异常时include产生警告require产生致命错误 ;为了避免多次包含同一文件,可以用语句 require_once()/include_once() 来代替它们。
9.类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是 serialize() /unserialize() 。
10.一个函数的参数不能是对变量的引用,除非在php.ini中把 allow_call_time_pass_reference 设为on.
11.SQL中LEFT JOIN的含义是 自然左外连接 。如果 tbl_user记录了学生的姓名(name)和学号(ID),tbl_score记录了学生(有的学生考试以后被开除了,没有其记录)的学号(ID)和 考试成绩(score)以及考试科目(subject),要想打印出各个学生姓名及对应的的各科总成绩,则可以用SQL语句 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.在PHP中,heredoc是一种特殊的字符串,它的结束标志必须 结束标识符所在的行不能包含任何其它字符除";" 。
编程题
1. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
<?php
$p = 'http://www.windsfly.cn/blog/index.php?id=223';
function getPos($p) {
$pos = strrpos($p,'.'); //strrpos()找出字元最后一次出现的位置
$ex = substr($p,$pos+1,3);
return $ex;
}
echo getPos($p);
?>
2. 写一个函数,算出两个文件的相对路径
如 $a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';
计算出 $b 相对于 $a 的相对路径应该是 ../../c/d将()添上
<?php
$a = '/c/d/d/e.php';
$b = '/a/c/d/e.php';
$aArr = explode('/',dirname($a));
$bArr = explode('/',dirname($b));
$aLen = count($aArr);
$bLen = count($bArr);
$maxLen = max($aLen,$bLen);
for($i = 1; $i < $maxLen; $i++){
if($aArr[$i] != $bArr[$i] && isset($aArr[$i])){
if(isset($bArr[$i]))$bUrl[]=$bArr[$i];
$relativePath .= "../";
}else{
$bUrl[]=$bArr[$i];
}
}
echo $relativePath.implode('/',$bUrl).'/'.basename($b);
?>
3.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
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;
}
}