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);
发布评论