PHP 面试题

1.数组函数arsort()的作用是什么?

分析:arsort()对数组进行逆向排序并保持索引关系,主要用于对那些单元顺序很重要的结合数组进行排序。成功则返回true,失败返回false。

2.简述include和require语句的区别:

分析:include和require都能把另外一个文件包含到当前文件中,
它们的区别是:发生异常时include产生警告,而require产生致命错误。
为了避免多次包含同一文件,可以用语句require_once()/include_once()来代替它们。

3.写出<?php echo 8%(-2) ?>的输出结果

0,%取余

4.如何实现字符串翻转

分析:用strrev()函数,示例如下:

<?php
$str = "abcdefg";
$str2 = strrev($str);
echo $str2;
?>

5.说出echo、print()、print_r()3个函数的区别

分析:echo是PHP语句,
print()和print_r()是函数。
语句没有返回值,而函数可以有返回值。
print()只能打印简单类型变量的值(如int、string等),
而print_r()可以打印复杂类型变量的值(如数组、对象等),
echo只能输出一个或多个字符串

6.写出显示客户端IP与服务器端IP的代码:

<?php
//客户端IP
function get_client_ip(){
    if (getenv('HTTP_CLIENT_IP')) {
        $client_ip = getenv('HTTP_CLIENT_IP');
    }
    elseif(getenv('HTTP_X_FORWARDED_FOR')){
        $client_ip = getenv('HTTP_X_FORWARDED_FOR');
    }
    elseif (getenv('REMOTE_ADDR')) {
        $client_ip = getenv('REMOTE_ADDR');
    }
    else () {
        $client_ip = $HTTP_SERVER_VAR['REMOTE_ADDR'];
    }
    return $client_ip;
}

//服务器IP
function get_sever_ip(){
    if (isset($_SERVER)) {
        if ($_SERVER['SERVER_ADDR']) {
            $huoqu_ip = $_SERVER['SERVER_ADDR'];
        }
        else{
            $huoqu_ip = $_SERVER['LOCAL_ADDR'];
        }
    }
    else{
        $huoqu_ip = getenv('SERVER_ADDR');
    }
    return $huoqu_ip;
}
echo get_client_ip();
echo get_sever_ip();
?>

7.SQL中LEFT JOIN是什么意思?

分析:LEFT JOIN表示自然左外连接。
如tbl_user记录了学生的姓名(name)和学号(ID),tbl_score记录了学生(有的学生考试以后被开除了,没有其记录)的学号(ID)和考试成绩(score)以及考试科目(subject),想要打印出各个学生姓名及对应的各科总成绩,则可用SQL语句:

select name , count(score) as sum_score from tbl_user left join tb1_score on tbl_score on tbl_user.ID=tbl_score.ID group by tbl_user.ID

8.如何修改session的生存时间?

分析:函数session_set_cookie_params()用来设置session的生存时间,该函数必须在session_start()函数调用之前调用。如调整session生存时间的代码如下所示:

<?php
//保存一天
$lifeTime = 24 * 3600;
session_set_cookie_params($lifeTime);
session_start();
$_SESSION["admin"] = true;
?>

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

分析:scandir()函数遍历显示所有文件与文件夹下的文件,方法很简单。我们只要利用is_dir()判断再递归查找一次,这样就可以遍历目录下所有文件了。具体的函数代码如下所示:

<?php
function numfilesindir($thedir){
  if (is_dir($thedir)) {
    $scanarray = scandir($thedir);
    for ($i=0; $i < count($scanarray); $i++) { 
      if ($scanarray[$i]!="." && $scanarray[$i]!="..") {
        if (is_file($thedir ."/" .$scanarray[$i])) {
          echo $scanarray[$i]."<br/>";
        }
      }
    }
  }else{
    echo "Sorry, this Directory does not exist.";
  }
}
echo numfilesindir("abc");      //测试的文件夹是abc,读者可以改成自己要测试的文件夹
?>

10.写一个过滤网页上所有JS/VBS脚本的正则表达式

分析:正则表达式是<script[^>]?>.?</script>/is,读者可通过下面的代码来测试。

<?php
$a="<script>this is a test</script>abc";  //这里有一段JS代码,然后有abc字符串
echo preg_replace('/\<script[^>]*?>.*?\<\/script\>/is','',$a);  //看看输出结果是不是只是abc
?>

11.PHP中字符串的表现形式有哪些

分析:PHP中字符串的表现形式有3种:
1.单引号 'xxx'
2.双引号 "xxx"
3.定界符 <<<xxx,其用法是在后面提供一个标识符,然后在标识符后提供字符串,再在字符串后提供此标识符来结尾。

echo <<< EOT
<a href="$url" target="$target">name</a>

<<<对于大段的HTML代码特别方便,注意这里提供的标识符是EOT,中间的是HTML代码。定界符结束标志必须顶格写,并且要有分号结束

12.谈谈你对MVC的认识

分析>MVC(Model/View/Controller)模式包括3部分,Model是应用对象;View是应用界面,Controller定义用户界面对用户输入的响应方式。
Model:模式是应用程序的主体部分。模型表示业务数据,或者业务逻辑。
View:视图是应用程序中用户界面相关的部分,是用户看到并与之交互的界面
Controller:控制器的工作就是根据用户的输入,控制用户界面数据显示和更新Model对象状态

13.sort()、asort()、ksort()有什么区别?

分析:
sort():根据数组中元素的值,以英文字母顺序排列,索引键从0到n-1重新编号。主要是当数组索引键的值无关痛痒时用来给数组排序。
asort():与sort一样把数组的元素按字母顺序排列,不同的是所有索引键都保留。
ksort():根据数组中索引键的值,以英文字母顺序排列,特别适合用于希望把索引键排序的联想数组。

14.说出输出结果

<?php
$num = 10;
function multiply(){
  $num = $num * 10;
}
multiply();
echo $num;
?>

10。考察作用域。如果$num为全局变量(global $num或者$_GLOBALS['num'])结果会不同。

15.以下哪个函数可以打开文件且能读写文件信息:

A.fget() B.file_open() C.fopen() D.open_file()

C,fopen()可以用来开启文件以读 / 写

16.写一个函数验证电子邮件的格式

<?php
//邮件正确返回true,否则返回false
function validateEmail($email){
  if (preg_match("/^[a-zA-Z]+@[a-zA-Z]+\.[a-zA-Z]+$/",$email)) {
    return true;
  }
  else{
    return false;
  }
}
echo validateEmail("user@sina.com");
?>

17.使用PHP写一段简单查询:

分析:查出所有名为“张丽丽”的数据。
表名User
Name Tel Content Date
张丽丽 13011632222 本科 2012-10-11
王晓晓 0531-82796625 研究生 2012-10-15

$mysql_db = mysql_connect("local","root","pass");
@mysql_select_db("DB",$mysql_db);
$result = mysql_query("select * from User where Name='张丽丽'");
while($row = mysql_fetch_array($result)){
  echo $row['Name'].$row['Tel'].$row['Content'].$row['Date'];
}

18.说明PHP中传值与传引用的区别:

分析:
按值传递:函数范围内对值的任何改变,在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变,在函数外部也能反映出这些修改
按值传递时,PHP必须复制值,特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。

19.从一个标准URL里取出文件的扩展名

例如:http://www.sina.com.cn/abc/de/fg.html?id=1取出html

<?php
function getExt($url){
  $arr = parse_url($url);

  $file = basename($arr['path']);
  $ext = explode(".",$file);
  return $ext[1];
}
echo getExt("http://www.sina.com.cn/abc/de/fg.html?id=1");
?>

20.用PHP打印出前一天的时间,格式xxxx-xx-xx xx:xx:xx

<?php
  echo date("Y-m-d H:i:s",strtotime("-1 day"));
?>

21.一般使用哪些工具进行版本控制?

分析:CVS和SVN(SVN强大)

22.优化MySQL数据库的方法:

分析:
1>数据库设计方面允许数据亢余,避免JOIN操作,以提高查询效率
2>系统架构设计方面,表散列,把海量数据散列到几个不同的表里面,快慢表,快表只留最新数据,慢表示历史存档。
3>检查有没有少加索引
4>写高效的SQL语句
5>只从数据库取必须的数据,只传送必须的SQL语句
6>必要的时候用不同的存储引擎,减少死锁和查询速度

23.创建vote表用于记录单选投票用户的数据:

create table vote
(
id       int unsigned     not null auto_increment,
ip       varchar(15)      not null,
time   datetime          not null,
iid      int                    not null,
primary key (id)
)

24.投票人数太多导致网站出现too many connection错误,如何解决?

分析:
方法一:加大MySQL的最大连接数
默认为100,修改编辑my.ini,修改max_connections=1000/10000
方法二:不用MySQL数据库,直接写文件,写XML文件
方法三:由于用MySQL语句调用数据库时,每次执行语句前,会做一个临时变量打开数据库,每次调用玩需要关闭MySQL临时变量。

25.session 和 cookie 的区别

分析:cookie机制采用客户端保持状态的方案,
而session机制采用的是在服务器端保持状态的方案,

存活时间上也有区别,
session根据浏览器进程存在而存在,
cookie通过setcookie($name,$val.$exp,'/')来设置保存时间

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容

  • 1、$_GET,$_POST,$_REQUEST 三者的区别 从一个简单的理解来看在PHP中$_GET $_POS...
    史史小子阅读 491评论 0 0
  • 1.对于大流量的网站,您采用什么样的方法来解决访问量问题? 1 有效使用缓存,增加缓存命中率2 使用负载均衡3 对...
    史史小子阅读 235评论 0 1
  • 最近转载一些面试题,希望能给找工作的朋友们带来一点帮助。 1.写出5个以上你所知道的常用的Linux命令和它的功能...
    程序员祝融阅读 1,650评论 0 61
  • 一个朋友在千锋学习的PHP,他们内部有一个面试宝典,后来这哥们月薪拿到了一万多。我把内部的面试宝典拿出来跟大家一起...
    vardump阅读 651评论 0 9
  • 日子没有变化 春天日渐丰腴 不紧不慢 矍铄的行道树上缀了温婉的告白 朵朵盛放 又深情飘落 当夜晚开始款款而来 ...
    改变自己369阅读 288评论 0 5