2024年6月11日发(作者:)

php面试题及答案一

送给需要的人

基础题:

1.表单中 get与post提交方法的区别?

答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实

体数据,可以通过表单提交大量信息.

n与cookie的区别?

答:session:储存用户访问的全局唯一变量,存储在服务器上的php指定

的目录中的(session_dir)的位置进行的存放

cookie:用来存储连续L一个面时所使用,是存储在客户端,对于

Cookie来说是存储在用户WIN的Temp目录中的。

两者都可通过时间来设置时间长短

3.数据库中的事务是什么?

答:事务(transaction)是作为一个单元的一组有序的数据库操作。如

果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事

务也不成功。如果所有操作完成,

事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失

败,则事务将回滚,该事务所有操作的影响都将取消。 简述题:

1、用PHP打印出前一天的时间格式是2022年-5-10 22:21:21(2分)

答:echo date('Y-m-d H:i:s', strtotime('-1 days'));

2、echo(),print(),print_r()的区别(3分)

答:echo是PHP语句, print和print_r是函数,语句没有返回值,函数可

以有返回值(即便没有用) print() 只能打印出简单类型变量的值(如

int,string) print_r() 可以打印出复杂类型变量的值(如数组,对象) echo

输出一个或者多个字符串

3、能够使HTML和PHP分离开使用的模板(1分)

答:Smarty,Dwoo,TinyButStrong,Template

Lite,Savant,phemplate,XTemplate

5、使用哪些工具进行版本控制?(1分) 答:cvs,svn,vss;

6、如何实现字符串翻转?(3分) 答:echo strrev($a);

7、优化MYSQL数据库的方法。(4分,多写多得) 答:

1、选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置

NOT NULL,例如'省份,性别',最好设置为ENUM

2、使用连接(JOIN)来代替子查询:

a.删除没有任何订单客户:DELETE FROM customerinfo WHERE

customerid NOT in(SELECT

送给需要的人

customerid FROM orderinfo)

b.提取所有没有订单客户:SELECT FROM customerinfo WHERE

customerid NOT in(SELECT customerid FROM orderinfo) c.提高

b

的速度优化:SELECT FROM customerinfo LEFT JOIN orderid

erid=erid WHERE

erid IS NULL 3、使用联合(UNION)来代替手动创建的临

时表

a.创建临时表:SELECT name FROM `nametest` UNION SELECT

username FROM `nametest2` 4、事务处理:

a.保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败

都失败 mysql_query(“BEGIN");

mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')";

mysql_query("SELECT * FROM `orderinfo` where customerid=".$id");

mysql_query("COMMIT"); 5、锁定表,优化事务处理:

a.我们用一个 SELECT 语句取出初始数据,通过一些计算,用

UPDATE 语句将新值更新到表中。 包含有 WRITE 关键字的 LOCK

TABLE 语句可以保证在 UNLOCK TABLES 命令被执行之前, 不会有其它

的访问来对 inventory 进行插入、更新或者删除的操作

mysql_query("LOCK TABLE customerinfo READ, orderinfo WRITE");

mysql_query("SELECT customerid FROM `customerinfo` where id=".$id);

mysql_query("UPDATE `orderinfo` SET ordertitle='$title' where

customerid=".$id); mysql_query("UNLOCK TABLES"); 6、使用外键,优化锁

定表

a.把customerinfo里的customerid映射到orderinfo里的customerid,

任何一条没有合法的customerid的记录不会写到orderinfo里 CREATE

TABLE customerinfo (

customerid INT NOT NULL, __ KEY(customerid) )TYPE = INNODB;

CREATE TABLE orderinfo (

orderid INT NOT NULL, customerid INT NOT NULL,

__ KEY(customerid,orderid),

__ KEY (customerid) __CES customerinfo (customerid) ON DELETE

__ )TYPE = INNODB;

注意:'ON DELETE __',该参数保证当customerinfo表中的一条记录删除

的话同时也会删除order

表中的该用户的所有记录,注意使用外键要定义事务安全类型为

INNODB; 7、建立索引: a.格式: (普通索引)-

送给需要的人

创建:CREATE INDEX 索引名 ON tablename (索引字段) 修改:ALTER

TABLE tablename ADD INDEX [索引名] (索引字段)

创表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引字

段)) (唯一索引)-

创建:CREATE UNIQUE 索引名 ON tablename (索引字段) 修改:ALTER

TABLE tablename ADD UNIQUE [索引名] (索引字段)

创表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引字

段)) (主键)-

它是唯一索引,一般在创建表是建立,格式为:

CREATA TABLE tablename ([...],__ KEY[索引字段]) 8、优化查询语句

a.最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数

操作 例子1:

SELECT * FROM order WHERE YEAR(orderDate)2022年;(慢) SELECT *

FROM order WHERE orderDate"2022年-01-01";(快) 例子2:

SELECT * FROM order WHERE addtime/7(慢) SELECT * FROM order

WHERE addtime24*7;(快) 例子3:

SELECT * FROM order WHERE title like "%good%";

SELECT * FROM order WHERE title="good" and name"good";

8、PHP的意思(送1分)

答:PHP是一个基于服务端来创建动态网站的脚本语言,您可以用

PHP和HTML生成网站主页

9、MYSQL取得当前时间的函数是?,格式化日期的函数是(2分)

答:now(),date()

10、实现中文字串截取无乱码的方法。(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($stri

ng,$i,2); $i++; }else{

$str.=substr($string,$i,1); } }

return $str.'...'; }else{

return $string;

送给需要的人

} }

11、您是否用过版本控制软件? 如果有您用的版本控制软件的名字

是?(1分) 12、您是否用过模板引擎? 如果有您用的模板引擎的名字是?(1

分) 答:用过,smarty

13、请简单阐述您最得意的开发之作(4分) 答:信息分类

14、对于大流量的网站,您采用什么样的方法来解决访问量问题?(4分)

答:确认服务器硬件是否足够支持当前的流量,数据库读写分离,优化数据表,

程序功能规则,禁止外部的盗链,控制大文件的下载,使用不同主机分流主要

流量

15、用PHP写出显示客户端IP与服务器IP的代码1分)

答:打印客户端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者:

getenv('REMOTE_ADDR'); 打印服务器IP:echo gethostbyname("")

16、语句include和require的区别是什么?为避免多次包含同一文

件,可用(?)语句代替它们? (2分) 答:require-require是无条件包含也就是

如果一个流程里加入require,无论条件成立与否都会先执行require

include-include有返回值,而require没有(可能因为如此require的

速度比include快) 注意:包含文件不存在或者语法错误的时候require是

致命的,include不是

17、如何修改__的生存时间(1分).

答:方法1:将中的_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、有一个网页地址, 比如PHP开发资源网主页: /,如何得

到它的内容?($1分)

答:方法1(对于PHP5及更高版本):

$readcontents = fopen("/", "rb"); $contents =

stream_get_contents($readcontents); fclose($readcontents); echo

$contents; 方法2:

echo file_get_contents("/");

19、在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”

的提示,则可用 header 函数,

送给需要的人

其语句为(?);(2分)

答:状态401代表未被授权,header("Location:ment记录用户回复内

容,字段如下 (4分) comment_id 回复id

id 文章id,关联message表中的id comment_content 回复内容

现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数

量排序,回复最高的排在最前面

文章id 文章标题 点击量 回复数量

用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示

为0

答:SELECT id, title,IF(message.`hits` IS

NULL,0,message.`hits`) hits,

IF(comment.`id` is NULL,0,count(*)) number FROM message LEFT JOIN

送给需要的人

comment ON = GROUP BY message.`id`;

(三)上述内容管理系统,表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 } 编程题:

1. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展

例如: /abc/de/?id=1 需要取出 php 或 .php 答案1:

function getExt($url){ $arr = parse_url($url);

$file = basename($arr['path']); $ext = explode(".",$file); return $ext; }

答案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); } }

送给需要的人

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/';

$b = '/a/b/12/34/';

计算出 $b 相对于 $a 的相对路径应该是 ../../c/d将()添上

答:function getRelativePath($a, $b) { $returnPath = array(dirname($b));

$arrA = explode('/', $a);

$arrB = explode('/', $returnPath);