PHP面试题(二)

301.开启php错误报告的方法是

display_errors = On

302.写出下面的程序输出的结果

$str="cd";
?str="abcde";
?str.="ok";
echo $cd;

ok

303.写出如下程序的输出结果


$count=5;
function get_count(){
	static $count=0;
	return $count++;
}
echo $count;
++$count;
echo get_count();
echo get_count();

 5 0 1

304.sort() assort() ksort()有什么区别?它们分别在什么情况下使用?

sort() 根据阵列中元素的值,以英文字母顺序排序,索引键会由 0 到 n-1 重新编号。主要是当阵列索引键的值无关疼痒时用来把阵列排序。

assort() PHP 没有 assort() 函式,所以可能是 asort() 的笔误。

asort() 与 sort() 一样把阵列的元素按英文字母顺序来排列,不同的是所有索引键都获得保留,特别适合替联想阵列排序。

ksort() 根据阵列中索引键的值,以英文字母顺序排序,特别适合用于希望把索引键排序的联想阵列。

305.写一个函数 遍历一个文件夹下所有的文件和子文件夹

function dir($dir){
    $files=array();//设置空数组存放返回值
    if($handel=opendir($dir)){ //如果打开了某一文件的目录句柄
     While($file=readdir($handel)!=false){  //返回该目录句柄是不是假值的话继续
     if($file!=”..”&& $file!=”.”){ //去掉打印出数组中文件名为..和.的文件
     if(is_dir($dir.”/”.$file)){ //如果是目录还有子文件夹,赋值给数组
      $files[$file]=scandir($dir.”/”.$file); // 函数返回一个数组,其中包含 
指定路径中的文件和目录。括号内为新组装的路径
     }else{
       $files[]=$file;
     }
   }
}
Closedir($handel); //关闭目录句柄
return $files;  //返回已存值的数组
}

306.将1234567890转换成1,234,567,890 每3位用逗号隔开的形式

$str=”1234567890”;
function test($str){
	$foo=Strlen($str);
	$s=””;
	$n=0;
	for($i=$foo-1;$i>=0,$i--){
		$s=$str[$i].$s;
		$n++;
		if($n>3){
	$s=”,”.$s;
	$n=1;
}
}
	return trim($s,”,”);
}

307.php文件中没有结束标记'?>',有什么好处?

在包含文件时不会直接结束从而影响到程序的执行。

308.分别输出(1)、(2)运行结果

class sample {
 	function __call($a, $b){
 		echo ucwords(implode(' ', $b).' '.$a);
 	}
 	function ads(){
 		ob_start();
 		echo 'by';
 		return $this;
 	}
 	function ade(){
 		$c = ob_get_clean();
		$this->php('power', $c);
 	}
 }
 $inst = new sample();
 (1) $inst->viphper('welcome', 'to');
 (2) $inst->ads()->ade();
复制代码

 (1) Welcome To Viphper (2) Power By Php

309.分别读取div节点attr属性值

    <div attr = "abcd" ></div> // 输出abcd
    <div attr="abcd\">"></div> // 输出abcd">

alert($("div:eq(1)").attr("attr"));

310.如何修改SESSION的生存时间

方法一: 修改php.ini的session_gc_maxlefttime=9999;

方法二:

$savePath = "./session_save_dir/";
$lifeTime = 小时 * 秒;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
复制代码

方法三:setcookie() and session_set_cookie_params($lifeTime);

311.用PHP写出显示客户端IP与服务器IP的代码

打印客户端IP:

echo $_SERVER[‘REMOTE_ADDR’];
复制代码

打印服务器IP:

echo $_SERVER[‘SERVER_ADDR’];

312.如何让你来实现一个SNS网站的短消息功能,简述一下,你该如何实现

首先建立数据表,其中字段uid与用户表ID相关联,字段sid与被发送信息的用户相关联,当发送信息时,将内容保存到数据库中,间隔一定时间查询数据库是否有与用户相关连的信息存储,若有与用户相关联的信息就遍历输出出来。

313.写一个函数,算出两个文件的相对路径

$na=explode('/',$a);
$nb=explode('/',$b);
$numa=count($na);
$numb=count($nb);
$max=$numa>$numb?$numa:$numb;
for($i=0;$i<$max-1;$i++){
	if($na[$i]!=$nb[$i]){
		$up.='../';
		$path.=$na[$i]."/";
	}}
echo $relpath=$up.$path;

314.请用PHP设计一个函数,对学生英语考试得分从高到低排序,输入是所有学生的学号和考试得分,返回排好序的考试得分和对应学生的学好。考试满分为100,由于判卷要求,得分不会有小数

<?php
	function quickSort($arr)
	{
		$len    = count($arr);
		if($len <= 1) {
			return $arr;
		}
		$key = $arr[0];
		$left_arr    = array();
		$right_arr    = array();

		for($i=1; $i<$len; $i++){
		if($arr[$i] <= $key){
		   $left_arr[] = $arr[$i];
		} else {
		   $right_arr[] = $arr[$i];
		}
		}
		$left_arr = quickSort($left_arr);
		$right_arr = quickSort($right_arr);
		return array_merge($left_arr,array($key),$right_arr);
	}

315.现在有一个Mysql数据库表payment记录用户购买订单,表结构如下

TABLE payment(
	id int unsigned AUTO_INCREMENT,
	user_id int unsigned comment ‘用户id’,
	quantity smallint unsigned comment ‘本次购买产品数量’,
	pay_time timestamp comment ‘购买时间’,
	PRIMARY KEY(id)
)
复制代码

用户每访问成功付款一笔订单(从进入到离开),会增加一条记录,记录用户的ID(user_id),以及购买的产品数量。比如:1、208,2 //208这个用户购买2个产品

Insert into payment (user_id,quantity)values(‘***’,’***’)
复制代码

1.请写出一个SQL语句挑出用户(id=100)最近购买的10条订单。

Select use_id,quantity,pay_time form payment where id=100 order by pay_time desc;
复制代码

2.请写一个SQL语句挑出用户(id=100)最近】购买的第10到第20条订单(共10个)

Select use_id,quantity,pay_time form payment where id=100 order by pay_time desc limit 10,10;
复制代码

3.请写出一个SQL语句挑出购买产品数最多的10个用户(user_id)和对应购买的产品总数。

Select use_id,sum(quantity) total,pay_time form payment group by use_id order by total desc limit


316.请写一个SQL语句。输出购买产品数分别等于1,2,3,4,5,6,7,8,9,10的用户数量,如果某个数量对应的用户数为0,可以不输出

Select count(id) from payment where quantity in (1,2,3,4,5.6,7,8,9,10) group by quantity

317.两张表 city表和province表。分别为城市与省份的关系表

表名:city id City Provinceid 1 广州 1 2 深圳 1 3 惠州 1 4 长沙 2 5 武汉 3 ………. 广州 表名称:province: id Province 1 广东 2 湖南 3 湖北 ……….

1、写一条sql语句关系两个表,实现:显示城市的基本信息。显示字段:城市id ,城市名, 所属省份 。 如: Id(城市id) Cityname(城市名) Privence(所属省份)

select A.id,A.Cityname,B.Province from city as A,province as B where A.provinceid=B.id

2、如果要统计每个省份有多少个城市,请用group by 查询出来。显示字段:省份id ,省份名,包含多少个城市。

select B.id,B.Province,count(*) as num from city A,province B where A.provinceid=B.id group by B.id

318.select now(),Date_ADD(now(),INTERVAL 14 day),Date_SUB(now(),INTERVAL 3 Day) from table; 会获得什么内容,请写出来

会获得三条数据: 第一条:当前时间; 第二条:当前时间加上14天; 第三条:当前时间减去3天。

319.您所知道的MYSQL 数据库备份,还原方式有哪几种

备份: 一,搭建主从架构,master-slave,通过binlog文件同步复制主库的数据,也可以直接通过binlog文件恢复数据。 二,通过系统计划任务执行mysqldump做周期性全备份。 三,物理备份,直接拷贝数据文件、参数文件、日志文件。 还原: 一.通过mysql操作工具,如phpmyadmin,sqlyog等导入备份过的数据库文件。 二.将物理备份的文件拷贝到mysql的data目录下

320.内容管理系统中,表message有如下字段

id 文章id title 文章标题 content 文章内容 category_id 文章分类id hits 点击量 创建上表,写出MySQL语句

Create table if not exists message(
&emsp;&emsp;Id int not null AUTO_INCREMENT PRIMARY key comment '文章id',
&emsp;&emsp;title varchar(60) not null comment '文章标题',
&emsp;&emsp;Content text not null comment '文章内容',
&emsp;&emsp;Category_id tinyint not null comment '文章分类id',
&emsp;&emsp;Hits int not null default 0 comment '点击量'
)engine=myisam default charset = utf8;

321.表comment记录用户回复内容,字段如下

comment_id 回复id id 文章id,关联message表中的id comment_content 回复内容 现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面 文章id 文章标题 点击量 回复数量 用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示0

select m.id,m.title,m.hits,count(c.comment_content) count from message m,comment c where m.id = c.coment_id group by m.id order by count desc;

322.表category保存分类信息,字段如下

category_id int(4) not null auto_increment; category_name varchar(40) not null; 用户输入文章时,通过选择下拉菜单选定文章分类 写出如何实现这个下拉菜单

<?php
$dsn = ‘mysql:host=***;dbname=***’;
$pdo = new PDO($dsn,’用户名’,’密码’);
$sql = ‘select category_id,category_name from category’;
$list = $pdo->query($sql);
//使用类似smarty模板引擎
$this->assign(‘list’,$list);
?>
//模板实现端
<select name=””>
<option>-请选择分类-</option>
{foreach $list as $val}
<option value=”{$val.category_id}”>{$val.category_name}</option>
{/foreach}
</select>

323.请写出php -l、php -m、php -r的作用

php –l:检测PHP的语法
php –r:直接运行PHP代码
php –m:将打印出内置以及已加载的PHP及zend模块

324.如何取得某个程序中, 第n行到第m行之间的程序片段 的执行时间

$start=microtime(true);
程序片段
$end=microtime(true);
echo ($end-$start);

325.get_magic_quotes_gpc的作用是

本函数取得 PHP 环境配置的变量 magic_quotes_gpc (GPC, Get/Post/Cookie) 值。返回 0 表示关闭本功能;返回 1 表示本功能打开。当 magic_quotes_gpc 打开时,所有的 ' (单引号), " (双引号), \ (反斜线) and 空字符会自动转为含有反斜线的溢出字符。

326.写出一个正则表达式, 把$string中的所有数字全部删除

preg_replace('/\d/U','',$string);

327.找出/data1/source 目录中大于100k 的文件, 并复制到 ~/tmp/35/下

find /data1/source +size >100k | cp ~/temp/35/

328.perl –pi –e 's|ABCD|Linux|g' 'find ./ -type f'的含义是

find ./-type f:找寻当前目录下的类型为f的文件

329.假设某论坛 url test.com/login.php 为注册用户入口地址, 请用程序实现摸拟注册用户的过程, 成功之后到http://test.com/thread.php?id=100的版面发一篇帖子, 需要考虑有图形验证码的情况,验证码如:9679

采用curl模拟登陆操作

第一:分析登陆字段
第二:登陆后保留COOKIE
第三:读取COOKIE并跳转到相关页
第四:抓取数据
复制代码
<?php
$bbs_url = 'http://test.com/ ';//论坛地址
$login_url = $bbs_url .' login.php ';//登录页地址
$post_fields = array();
//以下两项不需要修改
$post_fields['loginfield'] = 'username';
$post_fields['loginsubmit'] = 'true';
//用户名和密码,必须填写
$post_fields['username'] = 'tianxin';
$post_fields['password'] = '111111';
//安全提问
$post_fields['questionid'] = 0;
$post_fields['answer'] = '';
//@todo验证码
$post_fields['seccodeverify'] = '';

//获取表单FORMHASH
$ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
curl_close($ch);
preg_match('/<input\s*type="hidden"\s*name="formhash"\s*value="(.*?)"\s*\/>/i', $contents, $matches);
if(!empty($matches)) {
    $formhash = $matches[1];
} else {
    die('Not found the forumhash.');
}

//POST数据,获取COOKIE,cookie文件放在网站的temp目录下
$cookie_file = tempnam('./temp','cookie');

$ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_exec($ch);
curl_close($ch);

//取到了关键的cookie文件就可以带着cookie文件去模拟发帖.
$send_url = $bbs_url." thread.php?id=100";
$ch = curl_init($send_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
$contents = curl_exec($ch);
curl_close($ch);

//这里的hash码和登陆窗口的hash码的正则不太一样,这里的hidden多了一个id属性
preg_match('/<input\s*type="hidden"\s*name="formhash"\s*id="formhash"\s*value="(.*?)"\s*\/>/i', $contents, $matches);
if(!empty($matches)) {
    $formhash = $matches[1];
} else {
    die('Not found the forumhash.');
}
$post_data = array();
//帖子标题
$post_data['subject'] = 'test2';
//帖子内容
$post_data['message'] = 'test2';
$post_data['topicsubmit'] = "yes";
$post_data['extra'] = '';
//帖子标签
$post_data['tags'] = 'test';
//帖子的hash码,这个非常关键!假如缺少这个hash码,会警告你来路的页面不正确
$post_data['formhash']=$formhash;
$ch = curl_init($send_url);
curl_setopt($ch, CURLOPT_REFERER, $send_url);       //伪装REFERER
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$contents = curl_exec($ch);
curl_close($ch);
//清理cookie文件
unlink($cookie_file);

?>

330.设计一个类, 实现用户管理,需求如下(写出文体结构限可)

  1. 用文件存储用户 信息,用户注册输入用户 名,密码和电子邮件;
  2. 注册后需要通过发送电子邮件来验证用户的信息真实和有效;
  3. 密码需要加密.保证安全性
  4. 用户可以登录,退出和注销,并将用户的这些操作行为记录到日志中
  5. 如果用户没有退出 下次登录自动显示用户名和最后一次登录的信息
Class manage{
  public  function  login(){
  }
  public  function  logout(){
  }
  public  function  zhuxiao(){
  }
  private  function  log(){
  }
  private  function  info(){
  }
  private  function  mail(){
  }
  private  function  safe(){
  }
  private  function  my_cookie(){
  }
}

331.实现一个JS工具库, 分别实现判断字符串参数是否为数字. 是否为日期格式为(YYYY-mm-dd). 是否为邮件地址 是否为URL 地址等常用方法

<html>
<head>
	<title></title>
</head>
<body>
	<script type="text/javascript">
		function tool(){
			this.mail=function(mail){
				var pre="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
				var res=mail.exec(pre);
				if(!res){
					return false;
				}else{
					return ture;
				}
			}
			this.date=function(date){
				var pre="/^((((19|20)\d{2})-(0?(1|[3-9])|1[012])-(0?[1-9]|[12]\d|30))|(((19|20)\d{2})-(0?[13578]|1[02])-31)|(((19|20)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))-0?2-29))$/";
				var res=date.exec(pre);
				if(!res){
					return false;
				}else{
					return ture;
				}
			}
			.
			.
			.
		}
	</script>
</body>
</html>

332.写出以下PHP程序的执行结果

<?
$count=5;
function get_count(){
	static $count=0;
	return ++$count;
}
echo $count;
echo $count++;
echo $count;
echo get_count();
echo get_count();
?>
输出为:5 5 6 1 2

333.写出下列代码的输出结果:

function myfunc($argument){
	echo $argunment + 10;
}
$variable = 10;
echo “myfunc($variable)=”.myfunc($variable);
复制代码

先调用函数输出,后输出字符串 输出为: 20myfunc(10)=

334.请用尽可能少的语句实现对输出Email地址进行验证的功能

'/[0-9a-zA-Z_]+@[0-9a-zA-Z_]\.com|\.net|\.cn/ism'

335.php是否有安全问题,如果有,请列举说明

1.过滤用户输入的值 比如从post和get传参得来的值 例:$_POST[‘user’];不过滤,会造成一连串的麻烦

2.禁用register_globals 如果不禁止,就无法确定该变量是否是预定义全局变量里的值 

3.防止sql注入 使用 mysql_real_escape_string() 作为用户输入的包装器,就可以避免用户输入中的任何恶意 SQL 注入

例: $sql = "select count(*) as ctr from users where username='".mysql_real_
_string($username)."' and password='". mysql_real_escape_string($pw)."'
limit 1";

336.一们猎人带着一只儿狼,一只羊和一捆白菜过河,但他一次只能带三者中的一者过河。问:他怎样过河才能不至于让儿狼吃掉羊或让羊吃掉白菜

先带羊 后带白菜 再带狼

337.用小圆炉烤两个饼,每个饼正反面都要烤,而每烤一面所需要的时间是半分钟,怎样在一分半钟烤好三个饼?

a饼 b饼 烤 半分钟 把b拿掉 换上c饼 a饼反面 烤 半分钟 再把a饼拿掉 换上b饼反面 c饼反面 烤半分钟

338.一只青蛙掉进一口18英尺深的井,每天白天它向上爬6英尺,晚上向下滑3英尺。按照这个速度多少天可以爬出井口?

5天 第五天白天爬出井口

339.使用PHP语言自定义一个函数,此函数作用是将一个句子按单词反序。例如"One World One Dream",反序后变为 "Dream One World One"。

function get_rev($str){
		$arr=explode(‘ ’,$str);
		for($i=count($arr)-1;$i>=0;$i--){
			$res.=$arr[$i].’&nbsp;’;
}
return $res;
}

340.我们常可以看到,一些商场买200元的商品可以返100元优惠券(可在本商场代替现金)。请问实际上商品的折扣是多少?

如果买完200元的商品 不用优惠券 折扣没有,多了1张100元优惠券 如果买完200员的商品 使用优惠券(将这个100员优惠券又去买完了商品) 相当于200元的现金 买来了 300员的商品 200/300=66%

341.写一段文件上传代码,要求只能上传图片格式,大小限制5M

<form action=”action.php” method=”post” enctype=”multipart/form-data”>
	<input type=”file” name=”pic” />
	<input type=”submit” value=”提交” />
</form>

Action.php:
	$name=$_FILES[‘pic’][‘name’];
	$type=$_FILES[‘pic’][‘type’];
	$tmp=$_FILES[‘pic’][‘tmp_name’];
	$error=$_FILES[‘pic’][‘error’];
	$size=$_FILES[‘pic’][‘size’];
	$maxsize=1024*1024*5;
	If($size>$maxsize){
	Exit(‘图片大小超出’);
}
	$name_arr=array(‘gif’,’png’,’jpg’,’jpeg’);
	$ext=pathinfo($name,PATHINFO_EXTENSION);
If(!in_array($ext,$name_arr)){
		Exit(‘图片类型不正确’);
}

342.magic_quotes_gpc()、magic_quotes_runtime()的意思是什么?

Magic_quotes_gpc()是php配置文件中的,如果设置为on则会自动POST,GET,COOKIE中的字符串进行转义,在'之前加\

Magic_quotes_runtime()是php中的函数,如果参数为true则会数据库中取出来的单引号、双引号、反斜线自动加上反斜杠进行转义。

343.以下代码的执行后是,$result值为:

<?php
$srcArray=array(‘a’,’b’,’c’,’d’);
$randValue=array_rand($srcArray);
$result=is_string($randValue);
?>

A、 a

B、 false

C、 true

D、 b

E、 c

答案:B

344.echo count(‘123’) 输出的是?

A、3

B、false

C、null

D、1

E、0

答案:D

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钟长森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值