Php
1、表单中 get与post提交方法的区分?
答:get是发送要求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息.
2、session与cookie的区分?
答:session:贮存用户访问的全局唯1变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的寄存
cookie:用来存储连续訪問1个頁面时所使用,是存储在客户端,对Cookie来讲是存储在用户WIN的Temp目录中的。
二者都可通过时间来设置时间长短
3、数据库中的事务是甚么?
答:事务(transaction)是作为1个单元的1组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即便只有1个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果1个操作失败,则事务将回滚,该事务所有操作的影响都将取消。
4、用PHP打印出前1天的时间格式是2006⑸⑴0 22:21:21(2分)
答:echo date('Y-m-d H:i:s', strtotime('⑴ days'));
5、echo(),print(),print_r()的区分(3分)
答:echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即使没有用)
print()只能打印出简单类型变量的值(如int,string)
print_r()可以打印出复杂类型变量的值(如数组,对象)
echo 输出1个或多个字符串
6、能够使HTML和PHP分离开使用的模板(1分)
答:Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate
10、PHP的意思(送1分)
答:PHP是1个基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页
11、MYSQL获得当前时间的函数是?,格式化日期的函数是(2分)
答:now(),date()
12、实现中文字串截取无乱码的方法。(3分)
答:function GBsubstr($string, $start, $length) {
if(strlen($string)>$length){
$str=null;
$len=$start+$length;
for($i=$start;$i<$len;$i++){
if(ord(substr($string,$i,1))>0xa0){
$str.=substr($string,$i,2);
$i++;
}else{
$str.=substr($string,$i,1);
}
}
return $str.'...';
}else{
return $string;
}
}
13、您是不是用过模板引擎? 如果有您用的模板引擎的名字是?(1分)
答:用过,smarty
14、对大流量的网站,您采取甚么样的方法来解决访问量问题?(4分)
答:确认服务器硬件是不是足够支持当前的流量,数据库读写分离,优化数据表,
程序功能规则,制止外部的盗链,控制大文件的下载,使用不同主机分流主要流量
15、用PHP写出显示客户端IP与服务器IP的代码1分)
答:打印客户端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或: getenv('REMOTE_ADDR');
打印服务器IP:echo gethostbyname("www.bolaiwu.com")
16、语句include和require的区分是甚么?为避免屡次包括同1文件,可用(?)语句代替它们? (2分)
答:require->require是无条件包括也就是如果1个流程里加入require,不管条件成立与否都会先履行require
include->include有返回值,而require没有(可能由于如此require的速度比include快)
注意:包括文件不存在或语法毛病的时候require是致命的,include不是
17、如何修改SESSION的生存时间(1分).
答:方法1:将php.ini中的session.gc_maxlifetime设置为9999重启apache
方法2:$savePath = "./session_save_dir/";
$lifeTime = 小时 * 秒;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
方法3:setcookie() and session_set_cookie_params($lifeTime);
18、有1个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?($1分)
答:方法1(对PHP5及更高版本):
$readcontents = fopen("http://www.phpres.com/index.html", "rb");
$contents = stream_get_contents($readcontents);
fclose($readcontents);
echo $contents;
方法2:
echo file_get_contents("http://www.phpres.com/index.html");
19、在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(?);(2分)
答:状态401代表未被授权,header("Location:www.xxx.php");
20、在PHP中,heredoc是1种特殊的字符串,它的结束标志必须?(1分)
答:heredoc的语法是用"<<<"加上自己定义成对的标签,在标签范围內的文字视为1个字符串
例子:
$str = <<<SHOW
my name is Jiang Qihui!
SHOW;
21、谈谈asp,php,jsp的优缺点(1分)
答:ASP全名Active Server Pages,是1个WEB服务器真个开发环境,利用它可以产生和运行动态的、交互的、高性能的WEB服务利用程序。ASP采取脚本语言VB Script(Java script)作为自己的开发语言。
PHP是1种跨平台的服务器真个嵌入式脚本语言. 它大量地借用C,Java和Perl语言的语法, 并耦合PHP自己的特性,使WEB开发者能够快速地写出动态生成页面.它支持目前绝大多数数据库。还有1点,PHP是完全免费的,不用花钱,你可以从PHP官方站点(http://www.php.net)自由下载。而且你可以不受限制地取得源码,乃至可以从中加进你自己需要的特点。
JSP 是Sun公司推出的新1代站点开发语言,他完全解决了目前ASP,PHP的1个通病--脚本级履行(听说PHP4 也已在Zend 的支持下,实现编译运行).Sun 公司借助自己在Java 上的非凡成就,将Java 从Java 利用程序和 Java Applet 以外,又有新的硕果,就是Jsp--Java Server Page。Jsp 可以在Serverlet和JavaBean的支持下,完成功能强大的站点程序。
3者都提供在 HTML 代码中混合某种程序代码、由语言引擎解释履行程序代码的能力。但JSP代码被编译成 Servlet 并由 Java 虚拟机解释履行,这类编译操作仅在对 JSP 页面的第1次要求时产生。在 ASP 、PHP、JSP 环境下, HTML 代码主要负责描写信息的显示样式,而程序代码则用来描写处理逻辑。普通的 HTML 页面只依赖于 Web 服务器,而 ASP 、PHP、JSP 页面需要附加的语言引擎分析和履行程序代码。程序代码的履行结果被重新嵌入到HTML 代码中,然后1起发送给阅读器。 ASP 、PHP、 JSP3者都是面向 Web 服务器的技术,客户端阅读器不需要任何附加的软件支持。
22、谈谈对mvc的认识(1分)
答:由模型(model),视图(view),控制器(controller)完成的利用程序由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;
23、写动身贴数最多的10个人名字的SQL,利用下表:members(id,username,posts,pass,email)(2分)
答:SELECT * FROM `members` ORDER BY posts DESC limit 0,10;
24、 请说明php中传值与传援用的区分。甚么时候传值甚么时候传援用?(2分) 以题的情势 出
答:按值传递:函数范围内对值的任何改变在函数外部都会被疏忽
按援用传递:函数范围内对值的任何改变在函数外部也能反应出这些修改
优缺点:按值传递时,php必须复制值。特别是对大型的字符串和对象来讲,这将会是1个代价很大的操作。
按援用传递则不需要复制值,对性能提高很有好处。
25、 在PHP中error_reporting这个函数有甚么作用? (1分)
答:设置毛病级别与毛病信息回报
26、请写1个函数验证电子邮件的格式是不是正确 (2分)
答:function checkEmail($email)
{
$pregEmail = "/([a-z0⑼]*[-_\.]?[a-z0⑼]+)*@([a-z0⑼]*[-_]?[a-z0⑼]+)+[\.][a-z]{2,3}([\.][a-z]{2})?/i";
return preg_match($pregEmail,$email);
}
27、 简述如何得到当前履行脚本路径,包括所得到参数。(2分)
答:$script_name = basename(__file__); print_r($script_name);
28、JS表单弹出对话框函数是?取得输入焦点函数是? (2分)
答:弹出对话框: alert(),prompt(),confirm()
取得输入焦点 focus()
29、JS的转向函数是?怎样引入1个外部JS文件?(2分)
答:window.location.href,<script type="text/javascript" src="js/js_function.js"></script>
30、foo()和@foo()之间有甚么区分?(1分)
答:@foo()控制毛病输出
31、如何声明1个名为”myclass”的没有方法和属性的类? (1分)
答:class myclass{ }
32、如何实例化1个名为”myclass”的对象?(1分)
答:new myclass()
33、你如何访问和设置1个类的属性? (2分)
答:$object = new myclass();
$newstr = $object->test;
$object->test = "info"; sxhj_lzd@163
34、mysql_fetch_row() 和mysql_fetch_array之间有甚么区分? (1分)
答:mysql_fetch_row是从结果集取出1行数组,作为枚举
mysql_fetch_array是从结果集取出1行数组作为关联数组,或数字数组,二者兼得
35、GD库是做甚么用的? (1分)
答:gd库提供了1系列用来处理图片的API,使用GD库可以处理图片,或生成图片。
在网站上GD库通经常使用来生成缩略图或用来对图片加水印或对网站数据生成报表。
36、指出1些在PHP输入1段HTML代码的办法。(1分)
答:echo "<a href='index.php'>aaa</a>";
37、下面哪一个函数可以打开1个文件,以对文件进行读和写操作?(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 ]
39、下面的程序会输入是不是?(1分)
$num = 10;
function multiply(){
$num = $num * 10;
}
multiply();
echo $num;
?>
输出:10
40、使用php写1段简单查询,查出所有姓名为“张3”的内容并打印出来 (2分)
表名User
Name Tel Content Date
张3 13333663366 大专毕业 2006⑴0⑴1
张3 13612312331 本科毕业 2006⑴0⑴5
张4 021⑸5665566 中专毕业 2006⑴0⑴5
请根据上面的题目完成代码:
$mysql_db=mysql_connect("local","root","pass");
@mysql_select_db("DB",$mysql_db);
$result = mysql_query("SELECT * FROM `user` WHERE name='张3'");
while($rs = mysql_fetch_array($result)){
echo $rs["tel"].$rs["content"].$rs["date"];
}
41、如何使用下面的类,并解释下面甚么意思?(3)
class test{
function Get_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
Name Tel Content Date
张3 13333663366 大专毕业 2006⑴0⑴1
张3 13612312331 本科毕业 2006⑴0⑴5
张4 021⑸5665566 中专毕业 2006⑴0⑴5
(a) 有1新记录(小王 13254748547 高中毕业 2007-05-06)请用SQL语句新增至表中
mysql_query("INSERT INTO `user` (name,tel,content,date) VALUES
('小王','13254748547','高中毕业','2007-05-06')")
(b) 请用sql语句把张3的时间更新成为当前系统时间
$nowDate = date("Ymd");
mysql_query("UPDATE `user` SET date='".$nowDate."' WHERE name='张山'");
(c) 请写出删除名为张4的全部记录
mysql_query("DELETE FROM `user` WHERE name='张4'");
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、检测1个变量是不是有设置的函数是不是?是不是为空的函数是?(2分)
答:isset($str),empty($str);
46、获得查询结果集总数的函数是?(1分)
答:mysql_num_rows($result);
47、$arr = array('james', 'tom', 'symfony'); 请打印出第1个元素的值 (1分)
答:echo $array[0];
48、请将41题的数组的值用','号分隔并合并成字串输出(1分)
答:for($i=0;$i<count($array);$i++){ echo $array[$i].",";}
49、$a = 'abcdef'; 请取出$a的值并打印出第1个字母(1分)
答:echo $a{0} 或 echo substr($a,0,1)
50、PHP可以和sql server/oracle等数据库连接吗?(1分)
答:固然可以
51、请写出PHP5权限控制修饰符(3分)
答:public(公共),private(私用),protected(继承)
52、请写出php5的构造函数和析构函数(2分)
答:__construct , __destruct
53、完成以下:
54、
(1)创建新闻发布系统,表名为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;
(2)一样上述新闻发布系统:表comment记录用户回复内容,字段以下 (4分)
comment_id 回复id
id 文章id,关联message表中的id
comment_content 回复内容
现通过查询数据库需要得到以下格式的文章标题列表,并依照回复数量排序,回复最高的排在最前面
文章id 文章标题点击量回复数量
用1个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`;
(3)上述内容管理系统,表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("<select name='category' value=''>\n");
while($rowArray=mysql_fetch_array($result))
{
print("<option value='".$rowArray['category_id']."'>".$rowArray['categroy_name']."</option>\n");
}
print("</select>");
}
54、 写1个函数,尽量高效的,从1个标准 url 里取出文件的扩大名
例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
答案1:
function getExt($url){
$arr = parse_url($url);
$file = basename($arr['path']);
$ext = explode(".",$file);
return $ext[1];
}
答案2:
function getExt($url) {
$url = basename($url);
$pos1 = strpos($url,".");
$pos2 = strpos($url,"?");
if(strstr($url,"?")){
return substr($url,$pos1 + 1,$pos2 - $pos1 - 1);
} else {
return substr($url,$pos1);
}
}
55、 在 HTML 语言中,页面头部的 meta 标记可以用来输出文件的编码格式,以下是1个标准的 meta 语句
请使用 PHP 语言写1个函数,把1个标准 HTML 页面中的类似 meta 标记中的 charset 部份值改成 big5
请注意:
1. 需要处理完全的 html 页面,即不光此 meta 语句
2. 疏忽大小写
3. ' 和 " 在此处是可以互换的
4. 'Content-Type' 两侧的引号是可以疏忽的,但 'text/html; charset=gbk' 两侧的不行
5. 注意处理过剩空格
56、写1个函数,算出两个文件的相对路径
如 $a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';
计算出 $b 相对 $a 的相对路径应当是 ../../c/d将()添上
答: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));
return implode('/', $returnPath);
}
echo getRelativePath($a, $b);
57、如何实现PHP、JSP交互?
题目有点含糊不清,SOAP,XML_RPC,Socket function,CURL都可以实现这些,如果是考PHP和Java的整合,PHP内置了这类机制(如果考PHP和.NET的整合,也能够这么回答),例如$foo = new Java('java.lang.System');
58、使用哪些工具进行版本控制?
CVS和SVN,SVN号称下1代CVS,功能强大,不过CVS是老牌,市占率很高.我1直用SVN,题目是问用甚么工具,呃,这个可能需要这么回答:CVS Server on Apache作服务端,WinCVS作客户端;Subversion on Apache/DAV 做服务端,TortoiseSVN做客户端,或Subclipse做客户端
59、如何实现字符串翻转?
其实PHP本身就有字符串翻转的函数:strrev(),无妨试试echo strrev($str);不过所有的这3种方法都不能解决中文字符串翻转的问题,会出错的。
代码
<?php
function reverse($var)
{
$res="";
for($i=0,$j=strlen($var);$i<$j;$i++)
{
$res=$var[$i].$res;
}
return $res;
}
$tmpvar="wofang";
$res=reverse($tmpvar);
echo $res;
?>
60、优化MYSQL数据库的方法。
(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可以提高1个数量级的查询速度
61、谈谈事务处理
A给B的账户转账50美元的例子
62、apache+mysql+php实现最大负载的方法
见7
63、实现中文字串截取无乱码的方法。
mb_substr()
?>
64、用PHP写出显示客户端IP与服务器IP的代码:
打印客户端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或: getenv('REMOTE_ADDR');
打印服务器IP:echo gethostbyname("http://www.baidu.com/")
65、在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中;而链接到当前页面的的前1页面URL记录在预定义变量(2)中
<?php
//本页地址,SCRIPT_NAME也能够:php/test.php
echo $_SERVER['PHP_SELF']."<br />";
//链接到当前页面的前1页面的 URL 地址:
echo $_SERVER['HTTP_REFERER']."<br />";
//其它的见参考手册:语言参考》变量》预定义变量
//前履行脚本的绝对路径名:D:Inetpubwwwrootphp est.php
echo $_SERVER["SCRIPT_FILENAME"]."<br />";
//正在阅读当前页面用户的 IP 地址:127.0.0.1
echo $_SERVER["REMOTE_ADDR"]."<br />";
//查询(query)的字符串(URL 中第1个问号 ? 以后的内容):id=1&bi=2
echo $_SERVER["QUERY_STRING"]."<br />";
//当前运行脚本所在的文档根目录:d:inetpubwwwroot
echo $_SERVER["DOCUMENT_ROOT"]."<br />";
?>
66、履行程序段<?php echo 8%(⑵) ?>将输出__。
<?php
//参考手册》语言参考》运算符》算术运算符》%为取模运算,输出0
echo 8%(⑵)."<br />";
//取模 $a % $b 在 $a 为负值时的结果也是负值。输出⑵
echo ((⑻)%3)."<br />";
//输出2
echo (8%(⑶))."<br />";
?>
67、在HTTP 1.0中,状态码 401 的含义是____;如果返回“找不到文件”的提示,则可用 header 函数,其语句为____。
答:401表示未授权;header("HTTP/1.0 404 Not Found");[见参考手册》函数参考》HTTP函数》header]
68、数组函数 arsort 的作用是____;语句 error_reporting(2047)的作用是____。
答:arsort:对数组进行逆向排序并保持索引关系 error_reporting(2047)的作用是:report All errors and warnings
69、写出1个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉):
<?php
$script="以下内容不显示:<script language='javascript'>alert('cc');</script>";
echo preg_replace("/<script[^>].*?>.*?</script>/si", "替换内容", $script);
?>
70、以Apache模块的方式安装PHP,在文件http.conf中首先要用语句____动态装载PHP模块,
然后再用语句____使得Apache把所有扩大名为php的文件都作为PHP脚本处理。
答:LoadModule php5_module "c:/php/php5apache2.dll";AddType application/x-httpd-php .php
见参考手册》目录》II. 安装与配置》6. Windows 系统下的安装》Microsoft Windows 下的 Apache 2.0.x
71、语句 include 和 require 都能把另外1个文件包括到当前文件中,它们的区分是____;为了不屡次包括同1文件,可以用语句____来代替它们。
答:在如何处理失败时,include() 产生1个正告而 require() 则致使1个致命毛病;require_once()/include_once()
72、1个函数的参数不能是对变量的援用,除非在php.ini中把____设为on.
答:allow_call_time_pass_reference boolean :是不是启用在函数调用时强迫参数被依照援用传递, 见参考手册》附录G
73、SQL 中LEFT JOIN的含义是__,如果 tbl_user记录了学生的姓名(name)和学号(ID),
tbl_score记录了学生(有的学生考试以后被开除,没有其记录)的学号(ID)和考试成绩(score)和考试科目(subject),要想打印出各个学生姓名及对应的的各科总成绩,则可以用SQL语句____.
答:自然左外连接
create database phpinterview;
use phpinterview
create table tbl_user
(
ID int not null,
name varchar(50) not null,
primary key (ID)
);
create table tbl_score
(
ID int not null,
score dec(6,2) not null,
subject varchar(20) not null
);
insert into tbl_user (ID, name) values (1, 'beimu');
insert into tbl_user (ID, name) values (2, 'aihui');
insert into tbl_score (ID, score, subject) values (1, 90, '语文');
insert into tbl_score (ID, score, subject) values (1, 80, '数学');
insert into tbl_score (ID, score, subject) values (2, 86, '数学');
insert into tbl_score (ID, score, subject) values (2, 96, '语文');
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
74、 在PHP中,heredoc是1种特殊的字符串,它的结束标志必须____
答:结束标识符所在的行不能包括任何其它字符除";"
75、写1个函数,能够遍历1个文件夹下的所有文件和子文件夹。
<?php
function my_scandir($dir)
{
$files=array();
if(is_dir($dir))
{
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[]=$dir."/".$file;
}
}
}
closedir($handle);
return $files;
}
}
}
print_r(my_scandir("D:Program FilesInternet ExplorerMUI"));
?>
76、以下哪1句不会把 John 新增到 users 阵列?
$users[] = 'john';
成功把 John 新增到阵列 users。
array_add($users,’john’);
函式 array_add() 无定义。
array_push($users,‘john’);
成功把 John 新增到阵列 users。
$users ||= 'john';
语法毛病。
77、sort()、assort()、和 ksort() 有甚么分别?它们分别在甚么情况下使用?
sort()
根据阵列中元素的值,以英文字母顺序排序,索引键会由 0 到 n⑴ 重新编号。主要是当阵列索引键的值无关疼痒时用来把阵列排序。
assort()
PHP 没有 assort() 函式,所以多是 asort() 的笔误。
asort()
与 sort() 1样把阵列的元素按英文字母顺序来排列,不同的是所有索引键都取得保存,特别合适替联想阵列排序。
ksort()
根据阵列中索引键的值,以英文字母顺序排序,特别合适用于希望把索引键排序的联想阵列。
78、以下的代码会产生甚么?为何?
$num =10;
function multiply(){
$num =$num *10;
}
multiply();
echo $num;
由于函式 multiply() 没有指定 $num 为全域变量(例如 global $num 或 $_GLOBALS['num']),所以 $num 的值是 10。
79、 reference 跟1个正规的变量有甚么分别?如何 pass by reference?在甚么情况下我们需要这样做?
Reference 传送的是变量的地址而非它的值,所以在函式中改变1个变量的值时,全部利用都见到这个变量的新值。
1个正规变量传送给函式的是它的值,当函式改变这个变量的值时,只有这个函式才见到新值,利用的其他部份依然见到旧值。
$myVariable = "its' value";
Myfunction(&$myVariable); // 以 reference 传送参数
以 reference 传送参数给函式,可使函式改变了的变量,即便在函式结束后依然保存新值。
80、些函式可以用来在现正履行的脚本中插入函式库?
对这道题目不同的理解会有不同的答案,我的第1个想法是插入 PHP 函式库不外乎 include()、include_once()、require()、require_once(),但仔细再想,“函式库”也应当包括 com 物件和 .net 函式库,所以我们的答案也要分别包括 com_load 和 dotnet_load,下次有人提起“函式库”的时候,别忘记这两个函式。
81、foo() 与 @foo() 有甚么分别?
foo() 会履行这个函式,任何解译毛病、语法毛病、履行毛病都会在页面上显示出来。
@foo() 在履行这个函式时,会隐藏所有上述的毛病讯息。
很多利用程式都使用 @mysql_connect() 和 @mysql_query 来隐藏 mysql 的毛病讯息,我认为这是很严重的失误,由于毛病不该被隐藏,你必须妥善处理它们,可能的话解决它们。
82、你如何替 PHP 的利用程式侦错?
我其实不常这样做,我曾试过很多不同的侦错工具,在 Linux 系统中设定这些工具1点也不容易。不过以下我会介绍1个近来颇受注视的侦错工具。
PHP - Advanced PHP Debugger 或称 PHP - APD,第1步是履行以下的指令安装:
pear install apd安装后在你的脚本的开头位置加入以下的语句开始进行侦错:
apd_set_pprof_trace();履行终了,打开以下档案来查阅履行日志:
apd.dumpdir
你也能够使用 pprofp 来格式化日志。
详细的资料可以参阅 http://us.php.net/manual/en/ref.apd.php。
83、“===”是甚么?试举1个“==”是真但“===”是假的例子。
“===”是给既可以送回布尔值“假”,也能够送回1个不是布尔值但却可以赋予“假”值的函式,strpos() 和 strrpos() 便是其中两个例子。
问题的第2部分有点困难,想1个“==”是假,但是“===”是真的例子却很容易,相反的例子却很少。但我终究找到以下的例子:
if (strpos("abc", "a") == true){ // 这部份永不会被履行,由于 "a" 的位置是 0,换算成布尔值“假”}if (strpos("abc", "a") === true){ // 这部分会被履行,由于“===”保证函式 strpos() 的送回值不会换算成布尔值.}
84、你会如何定义1个没有成员函式或特性的种别 myclass?
class myclass{}
85、你如何产生1个 myclass 的物件?
$obj = new myclass();
86、在1个种别内如何存取这个种别的特性及变改它的值?
使用语句:$this->propertyName,例如:
class myclass{ private $propertyName; public function __construct() { $this->propertyName = "value"; }}
87、include 和 include_once 有甚么分别?require 又如何?
3者都是用来在脚本中插入其他档案,视乎 url_allow_fopen 是不是核准,这个档案可以从系统内部或外部获得。但他们之间也有微细的分别:
include():这个函式容许你在脚本中把同1个档案插入屡次,若果档案不存在,它会发出系统正告并继续履行脚本。
include_once():它跟 include() 的功能相似,正如它的名字所示,在脚本的履行期间,有关档案只会被插入1次。
require():跟 include() 差不多,它也是用来在脚本中插入其他档案,但如果果档案不存在,它会发出系统正告,这个正告会引致致命毛病令脚本中断履行
88、以下哪个函式可以把阅读器转向到另外一个页面?
redir()
这不是1个 PHP 函式,会引致履行毛病。
header()
这个是正确答案,header() 用来插入卷头资料,可以用来使阅读器转向到另外一个页面,例如:
header("Location: http://www.search-this.com/");
location()
这不是1个 PHP 函式,会引致履行毛病。
redirect()
这不是1个 PHP 函式,会引致履行毛病。
89、以下哪个函式可以用来开启档案以便读/写?
fget()
这不是1个 PHP 函式,会引致履行毛病。
file_open()
这不是1个 PHP 函式,会引致履行毛病。
fopen()
这是正确答案,fopen() 可以用来开启档案以便读/写,事实上这个函式还有很多选项,详细资料请参阅 php.net。
open_file()
这不是1个 PHP 函式,会引致履行毛病。
90、mysql_fetch_row() 和 mysql_fetch_array() 有甚么分别?
mysql_fetch_row() 把数据库的1列贮存在1个以零为基数的阵列中,第1栏在阵列的索引 0,第2栏在索引 1,如此类推。mysql_fetch_assoc() 把数据库的1列贮存在1个关联阵列中,阵列的索引就是栏位名称,例如我的数据库查询送回“first_name”、“last_name”、“email”3个栏位,阵列的索引便是“first_name”、“last_name”和“email”。mysql_fetch_array() 可以同时送回 mysql_fetch_row() 和 mysql_fetch_assoc() 的值。
91、下面的代码用来做甚么?请解释。
$date='08/26/2003';print ereg_replace("([0⑼]+)/([0⑼]+)/([0⑼]+)","\\2/\\1/\\3",$date);
这是把1个日期从 MM/DD/YYYY 的格式转为 DD/MM/YYYY 格式。我的1个好朋友告知我可以把这个正规表达式拆解为以下的语句,对如此简单的表示是来讲其实不必拆解,纯洁为了解说的方便:
// 对应1个或更多 0⑼,后面紧随1个斜号$regExpression = "([0⑼]+)/";// 应1个或更多 0⑼,后面紧随另外一个斜号$regExpression .= "([0⑼]+)/";// 再次对应1个或更多 0⑼$regExpression .= "([0⑼]+)";至于 \\2/\\1/\\3 则是用来对应括号,第1个括号对的是月份,第2个括号对应的是日期,第3个括号对应的是年份。
92、给你1行文字 $string,你会如何编写1个正规表达式,把 $string 内的 HTML 标签除去?
首先,PHP 有内建函式 strip_tags() 除去 HTML 标签,为什么要自行编写正规表达式?好了,便当作是面试的1道考题吧,我会这样回答:
$stringOfText = "<p>This is a test</p>";$expression = "/<(.*?)>(.*?)<\/(.*?)>/";echo preg_replace($expression, "\\2", $stringOfText);// 有人说也能够使用 /(<[^>]*>)/ $expression = "/(<[^>]*>)/";echo preg_replace($expression, "", $stringOfText);
93、PHP 和 Perl 分辨阵列和散列表的方法有甚么差异?
这正是为什么我总是告知他人选择适当的编程语言,若果你只用1种语言的话你怎样能回答这道问题?这道问题很简单,Perl 所有阵列变量都是以 @ 开头,例如 @myArray,PHP 则沿用 $ 作为所有变量的开头,例如 $myArray。
至于 Perl 表示散列表则用 %,例如 %myHash,PHP 则没有分别,还是使用 $,例如 $myHash。
94、你如何利用 PHP 解决 HTTP 的无状态本质?
最主要的俩各选择是 session 和 cookie。使用 session 的方法是在每页的开始加上 session_start(),然后利用 $_SESSION 散列表来贮存 session 变量。至于 cookie 你只需记着1个原则:在输出任何文字之前调用 set_cookie() 函式,另外只需使用 $_COOKIE 散列表即可以存取所有 cookie 变量。
还有1个不那末可靠的方法,就是利用访客的 IP 地址,这个方法有特定的危险性。
95、GD 函式库用来做甚么?
这个多是我最喜欢的函式库,自从 PHP 4.3.0 版本后 GD 便内建在 PHP 系统中。这个函式库让你处理和显示各式格式的图档,它的另外一个常见用处是制作所图档。GD 之外的另外一个选择是 ImageMagick,但这个函式库其实不内建于 PHP 当中,必须由系统管理员安96、试写出几个输出1段 HTML 代码的方法。
嗯,你可使用 PHP 中任何1种输出语句,包括 echo、print、printf,大部份人都使用以下例的 echo:
echo "My string $variable";你也能够使用这类方法:
echo<<<ENDThis text is written to the screen as output and this $variable is parsed too. If you wanted you can have <span> HTML tags in here as well.</span> The END; remarks must be on a line of its own, and can't contain any extra white space.END;
97、PHP 比 Perl 好吗?请讨论。
我们不要为1个简单的问题引发1场舌战,正如我常常说的:“为工作选择合适的语言,不要把工作迁就语言。”我个人认为 Perl 10分合适用作命令行工具,虽然它在网页利用上也有不错的表现,但是它的真正实力在命令行上才能充分发挥。一样地,PHP 虽然可以在控制台的环境中使用,但是个人认为它在网页利用上有更好的表现,PHP 有大量专门为网页利用而设计的函式,Perl 则似乎以命令行动设计之本。
个人来讲两种语言我都喜欢,在大学期间我常常使用 Perl、PHP 和 Java,惋惜工作上我使用 C#,但在家里我花很多时间操练 PHP、Perl、Ruby(现正学习)和 Java,保持我的技能知识在最新状态。很多人问我 C 和 C++ 怎样样,它们是不是仍有机会在我的利用中占1席位,我的答案基本上是“否”,我近来的工作主要集中在网页开发,虽然 C 和 C++ 也能够用来写网页,但它们到底不是为这类工作而设计的,“为工作选择合适的语言”,若果我需要编写1个控制台利用,用来展现 bubble sort、quick sort 和 merge sort 的效能比较,我1定会使用 C / C++。若果我需要编写1个相片簿系统,我会使用 PHP 或 C#(我认为制作用户介面方面 .NET 语言比网页更加)。
98、请说明 PHP 中传值与传援用的区分。甚么时候传值甚么时候传援用?
答:传值只是把某1个变量的值传给了另外一个变量,而援用则说明二者指向了同1个地方。
99、在PHP中error_reporting这个函数有甚么作用?
答: The error_reporting() function sets the error_reporting directive at runtime. PHP has many levels of errors, using this function sets that level for the duration (runtime) of your script.
100、 请用正则表达式(Regular Expression)写1个函数验证电子邮件的格式是不是正确。
答:
<?php
if(isset($_POST['action']) && $_POST['action']=='submitted')
{
$email=$_POST['email'];
if(!preg_match("/^(?:w+.?)*w+@(?:w+.?)*w+$/",$email))
{
echo "电子邮件检测失败";
}
else
{
echo "电子邮件检测成功";
}
}
else
{
?>
<html>
<head><title>EMAIL检测</title>
<script type="text/javascript">
function checkEmail(sText)
{
var reg=/^(?:w+.?)*w+@(?:w+.?)*w+$/;
var email=document.getElementById(sText).value;
if(!reg.test(email))
{
alert("电子邮件检测失败");
}
else
{
alert("电子邮件格式正确");
}
}
</script>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">
电子邮件:<input type="text" id="email" name="email" /><br />
<input type="hidden" name="action" value="submitted" />
<input type="button" name="button" value="客户端检测" onclick="checkEmail('email')" />
<input type="submit" name="submit" value="服务器端检测" />
</form>
</body>
</html>
<?php
}
?>
101、 简述如何得到当前履行脚本路径,包括所得到参数。
<?php
echo "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING'];
//echo "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
?>
102、有1个1维数组,里面存储整形数据,请写1个函数,将他们按从大到小的顺序排列。要求履行效力高。并说明如何改良履行效力。(该函数必须自己实现,不能使用php函数)
<?php
function BubbleSort(&$arr)
{
$cnt=count($arr);
$flag=1;
for($i=0;$i<$cnt;$i++)
{
if($flag==0)
{
return;
}
$flag=0;
for($j=0;$j<$cnt-$i⑴;$j++)
{
if($arr[$j]>$arr[$j+1])
{
$tmp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$tmp;
$flag=1;
}
}
}
}
$test=array(1,3,6,8,2,7);
BubbleSort($test);
var_dump($test);
?>
103、请举例说明在你的开发进程中用甚么方法来加快页面的加载速度
答:要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器。使用代码优化工具啦
Mysql部份
104、 创建poll表,用于记录单选投票用户的数据
字段包括 id[ Autoincreace ] , ip , time , iid(用户选则的选项,int型)
写出create上述table的完全sql语句
drop table if exists poll;
/*==============================================================*/
/* Table: poll */
/*==============================================================*/
create table poll
(
id int unsigned not null auto_increment,
ip varchar(15) not null,
time datetime not null,
iid int not null,
primary key (id)
)
105、 写出将1个选择2号选项的ip为127.0.0.1的用户在当前时间的投票记录到数据库的SQL
insert into poll (ip,time,iid) values('127.0.0.1',now(),2);
106、 写出满足下边条件的SQL语句
item表的结构为 id(就是poll表中的iid) , descp(用户选择的选项的文字)
请查询并返回10条记录,包括ip和用户选择的选项的文字
107、 现在由于投票人数太多,网站经常出现too many connection的毛病,请提供解决方案
方法1:加大MySql的最大连接数
mysql的最大连接数默许是100, 这个数值对并发连接很多的数据库利用是远远不够的,当连接要求大于默许连接数后,就会出现没法连接数据库的毛病,因此我们需要把它适当调大1些,编辑my.ini
修改 max_connections=1000
方法2,不用mysql数据库,改成直接写文件,详细方法参照问题5
若非要用 mysql,还可
方法3:由于用mysql语句调用数据库时,在每次之履行语句前,会做1个临时的变量用来打开数据库,所以你在使用mysql语句的时候,记得在每次调用完mysql以后就关闭mysql临时变量
108、 在成功解决连接数的问题后,发现程序运行缓慢,经查发现是mysql并发太多,表被锁定的现象严重,请提供解决方案
对访问量大的,本来就不推荐使用数据库,可以斟酌直接写到文本中,根据预测的访问量,先定义假若是100个文件文件名顺次为1.txt,2.txt…100.txt,每有用户投票的时候,随机往其中的1个文件中写入投票信息。统计的时候,再对所有文本文件中的数据进行分析。必要的时候,再导入数据库
drop table if exists item;
/*==============================================================*/
/* Table: item */
/*==============================================================*/
create table item
(
id int not null,
descp varchar(200) not null,
primary key (id)
);
select A.ip,b.descp
from poll A,item B
where A.id=B.id
limit 10
109、 由于用户实在太多,所以又分配给你两台服务器,你会如何来安排这3台服务器?
对服务器分配,其实有好几种方案(建议采取LINUX主机),先列出1个解决方案。
1.斟酌到电信,网通(南北差异)互访问速度慢的问题,可让电信的用户走电信的线,网通的走网通的线。大致可以这样分配,国内南方用户(电信誉户)具有1台服务器A;北方用户(网通用户)具有1台服务器B。国外的用户也能够斟酌给1台服务器C。用户访问的时候,首先访问的是针对国外的服务器,那台机器是电信网通的用户访问速度都差不多的(可以斟酌就租用香港或是甚么地方的),经过服务器C判断后直接跳到相应的服务器。统计时3台机器的数据合起来。
110、 现在开始要求同1ip不能重复投票,请指出如何对数据表进行相应的修改
ALTER TABLE `phpinterview`.`poll` ADD unique INDEX `IX_poll_ip`(`ip`);
111、 原有数据已有很多重复ip的数据了,所以我们把它导出为1个txt,格式和上边的poll1致,用TAB键间隔,请写1段程序,删除ip有重复的记录,并统计每一个投票选项的投票数
<?php
//读取文本并放入数组
$apoll = file("c:\1.txt");
//对每行数据进行分割,从而获得了1个2维数组
for ($i=0;$i<count($apoll);$i++)
{
$poll[$i] = split(" ",$apoll[$i]);
}
//获得IP、出现的次数数据
$arrIP=array();
for($i=0;$i<count($poll);$i++)
{
$arrIP[$poll[$i][1]]=isset($arrIP[$poll[$i][1]])?$arrIP[$poll[$i][1]]+1:1;
}
//获得选项、投票个数
$arrRes=array();
for($i=0;$i<count($poll);$i++)
{
if($arrIP[$poll[$i][1]]==1)
{
$arrRes[$poll[$i][3]]=isset($arrRes[$poll[$i][3]])?$arrRes[$poll[$i][3]]+1:1;
}
}
var_dump($arrRes);
?>
mysql5.0测试版:
/*========================得到测试数据c: .txt=========*/
SELECT *
into outfile 'c: .txt'
FROM `testok`;
/*========================载入临<