比较基础的php面试题及答案-基础题部分

<p>基础题:<br /> 1.表单中 get与post提交方法的区别?<br /> 答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息.<br /> <br /> 2.session与cookie的区别?<br /> 答:session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放<br /> cookie:用来存储连续??一个?面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。<br /> 两者都可通过时间来设置时间长短<br /> <br /> 3.数据库中的事务是什么?<br /> 答:事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,<br /> <br /> 事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。<br /> <br /> 简述题:<br /> 1、用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2分)<br /> 答:echo date(&rsquo;Y-m-d H:i:s&rsquo;, strtotime(&rsquo;-1 days&rsquo;));<br /> <br /> 2、echo(),print(),print_r()的区别(3分)<br /> 答:echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)<br /> print() 只能打印出简单类型变量的值(如int,string)<br /> print_r() 可以打印出复杂类型变量的值(如数组,对象)<br /> echo 输出一个或者多个字符串<br /> <br /> 3、能够使HTML和PHP分离开使用的模板(1分)<br /> 答:Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate<br /> <br /> 5、使用哪些工具进行版本控制?(1分)<br /> 答:cvs,svn,vss;<br /> <br /> 6、如何实现字符串翻转?(3分)<br /> 答:echo strrev($a);<br /> <br /> 7、优化MYSQL数据库的方法。(4分,多写多得)<br /> 答:<br /> 1、选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置NOT NULL,例如&rsquo;省份,性别&rsquo;,最好设置为ENUM<br /> 2、使用连接(JOIN)来代替子查询:<br /> a.删除没有任何订单客户:DELETE FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)<br /> b.提取所有没有订单客户:SELECT FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)<br /> c.提高b的速度优化:SELECT FROM customerinfo LEFT JOIN orderid customerinfo.customerid=orderinfo.customerid<br /> WHERE orderinfo.customerid IS NULL<br /> 3、使用联合(UNION)来代替手动创建的临时表<br /> a.创建临时表:SELECT name FROM `nametest` UNION SELECT username FROM `nametest2`<br /> 4、事务处理:<br /> a.保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败都失败<br /> mysql_query(&rdquo;BEGIN&rdquo;);<br /> mysql_query(&rdquo;INSERT INTO customerinfo (name) VALUES (&rsquo;$name1&prime;)&rdquo;;<br /> mysql_query(&rdquo;SELECT * FROM `orderinfo` where customerid=&rdquo;.$id&rdquo;);<br /> mysql_query(&rdquo;COMMIT&rdquo;);<br /> 5、锁定表,优化事务处理:<br /> a.我们用一个 SELECT 语句取出初始数据,通过一些计算,用 UPDATE 语句将新值更新到表中。<br /> 包含有 WRITE 关键字的 LOCK TABLE 语句可以保证在 UNLOCK TABLES 命令被执行之前,<br /> 不会有其它的访问来对 inventory 进行插入、更新或者删除的操作<br /> mysql_query(&rdquo;LOCK TABLE customerinfo READ, orderinfo WRITE&rdquo;);<br /> mysql_query(&rdquo;SELECT customerid FROM `customerinfo` where id=&rdquo;.$id);<br /> mysql_query(&rdquo;UPDATE `orderinfo` SET ordertitle=&rsquo;$title&rsquo; where customerid=&rdquo;.$id);<br /> mysql_query(&rdquo;UNLOCK TABLES&rdquo;);<br /> 6、使用外键,优化锁定表<br /> a.把customerinfo里的customerid映射到orderinfo里的customerid,<br /> 任何一条没有合法的customerid的记录不会写到orderinfo里<br /> CREATE TABLE customerinfo<br /> (<br /> customerid INT NOT NULL,<br /> PRIMARY KEY(customerid)<br /> )TYPE = INNODB;<br /> CREATE TABLE orderinfo<br /> (<br /> orderid INT NOT NULL,<br /> customerid INT NOT NULL,<br /> PRIMARY KEY(customerid,orderid),<br /> FOREIGN KEY (customerid) REFERENCES customerinfo<br /> (customerid) ON DELETE CASCADE<br /> )TYPE = INNODB;<br /> 注意:&rsquo;ON DELETE CASCADE&rsquo;,该参数保证当customerinfo表中的一条记录删除的话同时也会删除order<br /> 表中的该用户的所有记录,注意使用外键要定义事务安全类型为INNODB;<br /> 7、建立索引:<br /> a.格式:<br /> (普通索引)-&gt;<br /> 创建:CREATE INDEX &lt;索引名&gt; ON tablename (索引字段)<br /> 修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)<br /> 创表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引字段))<br /> (唯一索引)-&gt;<br /> 创建:CREATE UNIQUE &lt;索引名&gt; ON tablename (索引字段)<br /> 修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)<br /> 创表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引字段))<br /> (主键)-&gt;<br /> 它是唯一索引,一般在创建表是建立,格式为:<br /> CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])<br /> 8、优化查询语句<br /> a.最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作<br /> 例子1:<br /> SELECT * FROM order WHERE YEAR(orderDate)&lt;2008;(慢)<br /> SELECT * FROM order WHERE orderDate&lt;&rdquo;2008-01-01&Prime;;(快)<br /> 例子2:<br /> SELECT * FROM order WHERE addtime/7&lt;24;(慢)<br /> SELECT * FROM order WHERE addtime&lt;24*7;(快)<br /> 例子3:<br /> SELECT * FROM order WHERE title like &ldquo;%good%&rdquo;;<br /> SELECT * FROM order WHERE title&gt;=&rdquo;good&rdquo; and name&lt;&rdquo;good&rdquo;;<br /> <br /> 8、PHP的意思(送1分)<br /> 答:PHP是一个基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页<br /> <br /> 9、MYSQL取得当前时间的函数是?,格式化日期的函数是(2分)<br /> 答:now(),date()<br /> <br /> 10、实现中文字串截取无乱码的方法。(3分)<br /> 答:function GBsubstr($string, $start, $length) {<br /> if(strlen($string)&gt;$length){<br /> $str=null;<br /> $len=$start+$length;<br /> for($i=$start;$i&lt;$len;$i++){<br /> if(ord(substr($string,$i,1))&gt;0xa0){<br /> $str.=substr($string,$i,2);<br /> $i++;<br /> }else{<br /> $str.=substr($string,$i,1);<br /> }<br /> }<br /> return $str.&rsquo;&hellip;&rsquo;;<br /> }else{<br /> return $string;<br /> }<br /> }<br /> <br /> 11、您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?(1分)<br /> 12、您是否用过模板引擎? 如果有您用的模板引擎的名字是?(1分)<br /> 答:用过,smarty<br /> <br /> 13、请简单阐述您最得意的开发之作(4分)<br /> 答:信息分类<br /> <br /> 14、对于大流量的网站,您采用什么样的方法来解决访问量问题?(4分)<br /> 答:确认服务器硬件是否足够支持当前的流量,数据库读写分离,优化数据表,<br /> 程序功能规则,禁止外部的盗链,控制大文件的下载,使用不同主机分流主要流量<br /> <br /> 15、用PHP写出显示客户端IP与服务器IP的代码1分)<br /> 答:打印客户端IP:echo $_SERVER[&lsquo;REMOTE_ADDR&rsquo;]; 或者: getenv(&rsquo;REMOTE_ADDR&rsquo;);<br /> 打印服务器IP:echo gethostbyname(&rdquo;www.bolaiwu.com&rdquo;)<br /> <br /> 16、语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们? (2分)<br /> 答:require-&gt;require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require<br /> include-&gt;include有返回值,而require没有(可能因为如此require的速度比include快)<br /> 注意:包含文件不存在或者语法错误的时候require是致命的,include不是<br /> <br /> 17、如何修改SESSION的生存时间(1分).<br /> 答:方法1:将php.ini中的session.gc_maxlifetime设置为9999重启apache<br /> 方法2:$savePath = &ldquo;./session_save_dir/&rdquo;;<br /> $lifeTime = 小时 * 秒;<br /> session_save_path($savePath);<br /> session_set_cookie_params($lifeTime);<br /> session_start();<br /> 方法3:setcookie() and session_set_cookie_params($lifeTime);<br /> <br /> 18、有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?($1分)<br /> 答:方法1(对于PHP5及更高版本):<br /> $readcontents = fopen(&rdquo;http://www.phpres.com/index.html&rdquo;, &ldquo;rb&rdquo;);<br /> $contents = stream_get_contents($readcontents);<br /> fclose($readcontents);<br /> echo $contents;<br /> 方法2:<br /> echo file_get_contents(&rdquo;http://www.phpres.com/index.html&rdquo;);<br /> <br /> 19、在HTTP 1.0中,状态码401的含义是(?);如果返回&ldquo;找不到文件&rdquo;的提示,则可用 header 函数,其语句为(?);(2分)<br /> 答:状态401代表未被授权,header(&rdquo;Location:www.xxx.php&rdquo;);<br /> <br /> 12、在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?(1分)<br /> 答:heredoc的语法是用&rdquo;&lt;&lt;&lt;&rdquo;加上自己定义成对的标签,在标签范围?的文字视为一个字符串<br /> 例子:<br /> $str = &lt;&lt; my name is Jiang Qihui!<br /> SHOW;<br /> <br /> 13、谈谈asp,php,jsp的优缺点(1分)<br /> 答:ASP全名Active Server Pages,是一个WEB服务器端的开发环境, 利用它可以产生和运<br /> 行动态的、交互的、高性能的WEB服务应用程序。ASP采用脚本语言VB Script(Java script<br /> )作为自己的开发语言。<br /> PHP是一种跨平台的服务器端的嵌入式脚本语言. 它大量地借用C,Java和Perl语言的语法<br /> , 并耦合PHP自己的特性,使WEB开发者能够快速地写出动态生成页面.它支持目前绝大多数数<br /> 据库。还有一点,PHP是完全免费的,不用花钱,你可以从PHP官方站点(http://www.php.ne<br /> t)自由下载。而且你可以不受限制地获得源码,甚至可以从中加进你自己需要的特色。<br /> JSP 是Sun公司推出的新一代站点开发语言,他完全解决了目前ASP,PHP的一个通病--<br /> 脚本级执行(据说PHP4 也已经在Zend 的支持下,实现编译运行).Sun 公司借助自己在Jav<br /> a 上的不凡造诣,将Java 从Java 应用程序 和 Java Applet 之外,又有新的硕果,就是Js<br /> p--Java Server Page。Jsp 可以在Serverlet和JavaBean的支持下,完成功能强大的站点<br /> 程序。<br /> 三者都提供在 HTML 代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。<br /> 但JSP代码被编译成 Servlet 并由 Java 虚拟机解释执行,这种编译操作仅在对 JSP 页面的<br /> 第一次请求时发生。在 ASP 、PHP、JSP 环境下, HTML 代码主要负责描述信息的显示样式<br /> ,而程序代码则用来描述处理逻辑。普通的 HTML 页面只依赖于 Web 服务器,而 ASP 、PH<br /> P、JSP 页面需要附加的语言引擎分析和执行程序代码。程序代码的执行结果被重新嵌入到<br /> HTML 代码中,然后一起发送给浏览器。 ASP 、PHP、 JSP三者都是面向 Web 服务器的技术<br /> ,客户端浏览器不需要任何附加的软件支持。<br /> <br /> 14、谈谈对mvc的认识(1分)<br /> 答:由模型(model),视图(view),控制器(controller)完成的应用程序<br /> 由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;<br /> <br /> 15、写出发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email)(2分)<br /> 答:SELECT * FROM `members` ORDER BY posts DESC limit 0,10;<br /> <br /> 16. 请说明php中传值与传引用的区别。什么时候传值什么时候传引用?(2分)<br /> 答:按值传递:函数范围内对值的任何改变在函数外部都会被忽略<br /> 按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改<br /> 优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。<br /> 按引用传递则不需要复制值,对于性能提高很有好处。<br /> <br /> 17. 在PHP中error_reporting这个函数有什么作用? (1分)<br /> 答:设置错误级别与错误信息回报<br /> <br /> 18. 请写一个函数验证电子邮件的格式是否正确 (2分)<br /> 答:function checkEmail($email)<br /> {<br /> $pregEmail = &ldquo;/([a-z0-9]*[-_.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[.][a-z]{2,3}([.][a-z]{2})?/i&rdquo;;<br /> return preg_match($pregEmail,$email);<br /> }<br /> <br /> 19. 简述如何得到当前执行脚本路径,包括所得到参数。(2分)<br /> 答:$script_name = basename(__file__); print_r($script_name);<br /> <br /> 21、JS表单弹出对话框函数是?获得输入焦点函数是? (2分)<br /> 答:弹出对话框: alert(),prompt(),confirm()<br /> 获得输入焦点 focus()<br /> <br /> 22、JS的转向函数是?怎么引入一个外部JS文件?(2分)<br /> 答:window.location.href,<script type=”text/javascript” src=”js/js_function.js”></script><br /> <br /> 23、foo()和@foo()之间有什么区别?(1分)<br /> 答:@foo()控制错误输出<br /> <br /> 24、如何声明一个名为&rdquo;myclass&rdquo;的没有方法和属性的类? (1分)<br /> 答:class myclass{ }<br /> <br /> 25、如何实例化一个名为&rdquo;myclass&rdquo;的对象?(1分)<br /> 答:new myclass()<br /> <br /> 26、你如何访问和设置一个类的属性? (2分)<br /> 答:$object = new myclass();<br /> $newstr = $object-&gt;test;<br /> $object-&gt;test = &ldquo;info&rdquo;;<br /> <br /> 27、mysql_fetch_row() 和mysql_fetch_array之间有什么区别? (1分)<br /> 答:mysql_fetch_row是从结果集取出1行数组,作为枚举<br /> mysql_fetch_array是从结果集取出一行数组作为关联数组,或数字数组,两者兼得<br /> <br /> 28、GD库是做什么用的? (1分)<br /> 答:gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。<br /> 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。<br /> <br /> 29、指出一些在PHP输入一段HTML代码的办法。(1分)<br /> 答:echo &ldquo;<a href="&rsquo;index.php&rsquo;">aaa</a>&rdquo;;<br /> <br /> 30、下面哪个函数可以打开一个文件,以对文件进行读和写操作?(1分)<br /> (a) fget() (b) file_open() (c) fopen() (d) open_file() [ c ]<br /> <br /> 31、下面哪个选项没有将 john 添加到users 数组中? (1分)<br /> (a) $users[] = &lsquo;john&rsquo;;<br /> (b) array_add($users,&rsquo;john&rsquo;);<br /> (c) array_push($users,&lsquo;john&rsquo;);<br /> (d) $users ||= &lsquo;john&rsquo;; [ a , c ]<br /> <br /> 32、下面的程序会输入是否?(1分)<br /> $num = 10;<br /> function multiply(){<br /> $num = $num * 10;<br /> }<br /> multiply();<br /> echo $num;<br /> ?&gt;<br /> 输出:10<br /> <br /> 33、使用php写一段简单查询,查出所有姓名为&ldquo;张三&rdquo;的内容并打印出来 (2分)<br /> 表名User<br /> Name Tel Content Date<br /> 张三 13333663366 大专毕业 2006-10-11<br /> 张三 13612312331 本科毕业 2006-10-15<br /> 张四 021-55665566 中专毕业 2006-10-15<br /> 请根据上面的题目完成代码:<br /> $mysql_db=mysql_connect(&rdquo;local&rdquo;,&rdquo;root&rdquo;,&rdquo;pass&rdquo;);<br /> @mysql_select_db(&rdquo;DB&rdquo;,$mysql_db);<br /> $result = mysql_query(&rdquo;SELECT * FROM `user` WHERE name=&rsquo;张三&rsquo;&rdquo;);<br /> while($rs = mysql_fetch_array($result)){<br /> echo $rs[&quot;tel&quot;].$rs[&quot;content&quot;].$rs[&quot;date&quot;];<br /> }<br /> <br /> 34、如何使用下面的类,并解释下面什么意思?(3)<br /> class test{<br /> function Get_test($num){<br /> $num=md5(md5($num).&rdquo;En&rdquo;);<br /> return $num;<br /> }<br /> }<br /> 答:$testnum = &ldquo;123&Prime;;<br /> $object = new test();<br /> $encrypt = $object-&gt;Get_test($testnum);<br /> echo $encrypt;<br /> 类test里面包含Get_test方法,实例化类调用方法多字符串加密<br /> <br /> 35、写出 SQL语句的格式 : 插入 ,更新 ,删除 (4分)<br /> 表名User<br /> Name Tel Content Date<br /> 张三 13333663366 大专毕业 2006-10-11<br /> 张三 13612312331 本科毕业 2006-10-15<br /> 张四 021-55665566 中专毕业 2006-10-15<br /> (a) 有一新记录(小王 13254748547 高中毕业 2007-05-06)请用SQL语句新增至表中<br /> mysql_query(&rdquo;INSERT INTO `user` (name,tel,content,date) VALUES<br /> (&rsquo;小王&rsquo;,'13254748547&prime;,&rsquo;高中毕业&rsquo;,'2007-05-06&prime;)&rdquo;)<br /> <br /> (b) 请用sql语句把张三的时间更新成为当前系统时间<br /> $nowDate = date(&rdquo;Ymd&rdquo;);<br /> mysql_query(&rdquo;UPDATE `user` SET date=&rsquo;&rdquo;.$nowDate.&rdquo;&lsquo; WHERE name=&rsquo;张山&rsquo;&rdquo;);<br /> <br /> (c) 请写出删除名为张四的全部记录<br /> mysql_query(&rdquo;DELETE FROM `user` WHERE name=&rsquo;张四&rsquo;&rdquo;);<br /> <br /> 36、请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别(2分)<br /> 答:int是数字类型,char固定长度字符串,varchar实际长度字符串,datetime日期时间型,text文本字符串<br /> char的场地固定为创建表设置的长度,varchar为可变长度的字符<br /> <br /> 38、写出以下程序的输出结果 (1分)<br /> $b=201;<br /> $c=40;<br /> $a=$b&gt;$c?4:5;<br /> echo $a;<br /> ?&gt;<br /> 答:4<br /> <br /> 39、检测一个变量是否有设置的函数是否?是否为空的函数是?(2分)<br /> 答:isset($str),empty($str);<br /> <br /> 40、取得查询结果集总数的函数是?(1分)<br /> 答:mysql_num_rows($result);<br /> <br /> 41、$arr = array(&rsquo;james&rsquo;, &lsquo;tom&rsquo;, &rsquo;symfony&rsquo;); 请打印出第一个元素的值 (1分)<br /> 答:echo $array[0];<br /> <br /> 42、请将41题的数组的值用&rsquo;,'号分隔并合并成字串输出(1分)<br /> 答:for($i=0;$i <br /> 43、$a = &lsquo;abcdef&rsquo;; 请取出$a的值并打印出第一个字母(1分)<br /> 答:echo $a{0} 或 echo substr($a,0,1)<br /> <br /> 44、PHP可以和sql server/oracle等数据库连接吗?(1分)<br /> 答:当然可以<br /> <br /> 45、请写出PHP5权限控制修饰符(3分)<br /> 答:public(公共),private(私用),protected(继承)<br /> <br /> 46、请写出php5的构造函数和析构函数(2分)<br /> 答:__construct , __destruct<br /> <br /> 47、完成以下:<br /> (一)创建新闻发布系统,表名为message有如下字段 (3分)<br /> id 文章id<br /> title 文章标题<br /> content 文章内容<br /> category_id 文章分类id<br /> hits 点击量<br /> 答:CREATE TABLE &lsquo;message&rsquo;(<br /> &lsquo;id&rsquo; int(10) NOT NULL auto_increment,<br /> &lsquo;title&rsquo; varchar(200) default NULL,<br /> &lsquo;content&rsquo; text,<br /> &lsquo;category_id&rsquo; int(10) NOT NULL,<br /> &lsquo;hits&rsquo; int(20),<br /> PRIMARY KEY(&rsquo;id&rsquo;);<br /> )ENGINE=InnoDB DEFAULT CHARSET=utf8;<br /> <br /> (二)同样上述新闻发布系统:表comment记录用户回复内容,字段如下 (4分)<br /> comment_id 回复id<br /> id 文章id,关联message表中的id<br /> comment_content 回复内容<br /> 现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面<br /> 文章id 文章标题 点击量 回复数量<br /> 用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示为0<br /> 答:SELECT message.id id,message.title title,IF(message.`hits` IS NULL,0,message.`hits`) hits,<br /> IF(comment.`id` is NULL,0,count(*)) number FROM message LEFT JOIN<br /> comment ON message.id=comment.id GROUP BY message.`id`;<br /> <br /> (三)上述内容管理系统,表category保存分类信息,字段如下 (3分)<br /> category_id int(4) not null auto_increment;<br /> categroy_name varchar(40) not null;<br /> 用户输入文章时,通过选择下拉菜单选定文章分类<br /> 写出如何实现这个下拉菜单<br /> 答:function categoryList()<br /> {<br /> $result=mysql_query(&rdquo;select category_id,categroy_name from category&rdquo;)<br /> or die(&rdquo;Invalid query: &rdquo; . mysql_error());<br /> print(&rdquo;<select value="&rdquo;" name="&rsquo;category&rsquo;">n&rdquo;); while($rowArray=mysql_fetch_array($result)) { print(&rdquo; <option value="&rsquo;&rdquo;.$rowArray['category_id'].&rdquo;&lsquo;" selected="selected">&rdquo;.$rowArray['categroy_name'].&rdquo;</option> n&rdquo;); } print(&rdquo;</select>&rdquo;);<br /> }<br /> </p>
RangeTime:0.006579s
RangeMem:227.61 KB
返回顶部 留言