php面试

*什么是smarty? Smarty的优点是什么? 

什么是smarty?
Smarty是一个使用PHP写出来的PHP模板引擎,目的是要使用PHP程序同美工分离,使的程序员改变程序的逻辑内容时不会影响到美工的页面设计,美工重新修改页面时不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。(也易于程序的多样式开发)


Smarty优点
1. 速度快:相对其他模板引擎。 2. 编译型:采用smarty编写的程序在运行时要编译成一个非模板技术的PHP文件
3 缓存技术:它可以将用户最终看到的HTML文件缓存成一个静态的HTML页
4. 插件技术:smarty可以自定义插件。
不适合使用smarty的地方
1. 需要实时更新的内容。例如像股票显示,它需要经常对数据进行更新 2. 小项目。小项目因为项目简单而美工与程序员兼于一人的项目

 

*PHP解析URL是哪个函数?怎么用?

parse_url() 是讲URL解析成有固定键值的数组的函数
$ua=parse_url(”http://username:password@hostname/path?arg=value#anchor”);
print_r($ua);
结果:

Array
(
[scheme] => http
[host] => hostname
[user] => username
[pass] => password
[path] => /path
[query] => arg=value
[fragment] => anchor
)

 

*PHP两种查询函数array / row的区别?

格式:mysql_fetch_row(result);

说明:mysql_fetch_row用来查询结果的一行保存至数组,该数组下标从0开始,每一个数组元素对应
一个域。通过循环,可以将查询结果全部获得。

格式:mysql_fetch_array(result);

说明:mysql_fetch_array和mysql_fetch_row功能基本相同,只不过它除了可以用从0开始的偏移量作
索引,还可以用域名作索引。

值返回下一行的所有域值,并将其保存至一个数组中,没有行时返回false。

*PHP如何与mysql建立链接?

php.ini 加载mysql组件:
extension=php_mysql.dll 前的; 去掉
extension_dir = ” ” 路径是否正确
PHP链接mysql函数
mysql_connect: 开启 MySQL 链接
mysql_select_db: 打开一个数据库
@ 和 or die 隐藏错误 和 条件显示
mysql_connect(”主机”, “用户名”, “密码”)
mysql_select_db(”打开数据库”,连接标识符);
如果不特别声明连接标识符,则默认为是上一次打开的连接。

 

*php执行sql函数

$reslt = mysql_query(sql);

 

*----------------------------------------------------------------

 

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

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

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

 echoPHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)  
print只能打印出简单类型变量的值(如int,string)  
print_r可以打印出复杂类型变量的值(如数组,对象)  
echo -- 输出一个或者多个字符串  

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

       smarty

4、使用哪些工具进行版本控制?(1分)

       CVS/SVN

5、如何实现字符串翻转?(3分)

        -1

 function strrev($str)
{
     $len=strlen($str);
     $newstr = '';
     for($i=$len;$i>=0;$i--)
     {
         $newstr .= $str{$i};
     }
     return $newstr;
}

-2

使用php函数strrev( ‘abc’)

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

       -选择合适的字段属性

-使用索引

-优化的查询语句

       -使用连接(JOIN)来代替子查询(Sub-Queries)

-使用联合(UNION)来代替手动创建的临时表
-事务、锁定表

-使用外键

 

 

7、PHP的意思(送1分)

一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写.

 

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

date("Y-m-d h:i:s");date_format

      

9、实现中文字串截取无乱码的方法。(3分)

         英文、数字(半角)为1字节(8位),中文(全角)为3字节

 在PHP中需要对字符串进行截取,如果没有装mb扩展(mb_substr函数),对中文截取就需要进行相应的处理。
下面是对字符串 “世s界s的功s///夫萨的mn是非得失sdf dsf dsf 达” 截取10个字符,最后的输出是“世s界s的”,编码均为u8:

<?php
$ss = '世s界s的功s///夫萨的mn是非得失sdf dsf dsf 达';
$aa = CHsubstr($ss, 0, 10);
echo($aa);

function CHsubstr($string, $start, $length)
{
    if(strlen($string)>$length)
    {
        $str='';
        $len=$start+$length;
        $i = $start;
        while($i<$len)
        {
            if(ord(substr($string, $i, 1))>=128)
            {
                $str.=substr($string, $i, 3);
                $i = $i+ 3;
            }
            else
            {
                $str.=substr($string, $i, 1);
                $i ++;
            }
        }
        return $str;
    }
    else
    {
        return $string;
    }
}
?>

  

10、您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?(1分)

      CVS/SVN

 

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

       smarty

 

 

12、请简单阐述您最得意的开发之作(4分)

      上海合进电影数据兼职系统、会员系统、勐腊一中成绩管理、房产系统、USRP网站

 

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

      web代理/缓存服务器,静态文件,数据库优化,代码优化

 

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

客户端IP: echo $_SERVER[‘REMOTE_ADDR’]; 或者: getenv('REMOTE_ADDR');

服务器IP:

<?php  

$serverIP=gethostbynamel("webpro01");  

echo   "Server IP Address:<ol   type=1>";  

for   ($i=0;   $i<count($serverIP);   $i++)   {  

      echo   "<li>".$netscapeftp[$i];  

}  

echo   "</ol>";  

?>  

 

15、语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们? (2分)

1、PHP程序执行到require()时,只会读取一次档案,故常放在程序开头,档案引入后PHP会将网页档重新编译,让引入档成为原先网页的一部分。

2、PHP程序执行到include()时,每次皆会读取档案,故常用于流程控制的区段,如条件判断或循环中。

3、require() :如果文件不存在,会报出一个fatal error.脚本停止执行

4、include() : 如果文件不存在,会给出一个 warning,但脚本会继续执行

5、推荐使用require_once()和include_once(),可以检测文件是否有重复包含。

 

16、如何修改SESSION的生存时间(1分).

1.将php.ini 中session.gc_maxlifetime 设置为 9999(默认为 1440)重启 apache 即可

2.

$savePath = "./session_save_dir/";

$lifeTime = 24 * 3600;

session_save_path($savePath);

session_set_cookie_params($lifeTime);

session_start();

3.

setcookie() 或session_set_cookie_params($lifeTime)

 

17、有一个网页地址, 比如PHP研究室主页: http://www.phpv.net/index.html,如何得到它的内容?($1分)

//需要读取的page地址
$http_page_url="
http://www.baidu.com/index.html";
//打开远程文件
$read_file=fopen($http_page_url,"rb");
if (!feof($read_file)) {
//读取远程文件
$file_stream = "";
do {
$data = fread($read_file, 8192);
if (strlen($data) == 0) {
break;
}
$file_stream.= $data;
} while(true);
}

echo $file_stream; //输出内容

 

对 PHP 5 及更高版本可以:

<?php

$handle = fopen("http://www.baidu.com/index.html", "rb");

$contents = stream_get_contents($handle);

fclose($handle);

echo $contents;

?>

 

最简单的方法是调用函数:

<?php

print file_get_contents('http://www.baidu.com/index.html');

?>

 

18、在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(?);(2分)

     状态值为401,代表未被授权; header("Location: http://www.php.net");   

 

19、在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?(1分)

heredoc的语法是用"<<<"加上自己定义成对的标签,在标签范围內的文字视为一个字符串

<?php
$str = <<<EOD
I saw a dog yesterday.
EOD;
?>
需要注意的是:

1、"<<<"后面的EOD是自己定义的标签名称,必须要成对,而且后面要加上分号表示结束。2、结束的标签前面最好不要有空格,以免发生错误!

 

20、谈谈asp,php,jsp的优缺点(1分)

       

ASP全名Active Server Pages,是一个WEB服务器端的开发环境, 利用它可以产生和运
行动态的、交互的、高性能的WEB服务应用程序。ASP采用脚本语言VB Script(Java script
)作为自己的开发语言。
  PHP是一种跨平台的服务器端的嵌入式脚本语言. 它大量地借用C,Java和Perl语言的语法
, 并耦合PHP自己的特性,使WEB开发者能够快速地写出动态生成页面.它支持目前绝大多数数
据库。还有一点,PHP是完全免费的,不用花钱,你可以从PHP官方站点(
http://www.php.ne
t)自由下载。而且你可以不受限制地获得源码,甚至可以从中加进你自己需要的特色。
  JSP 是Sun公司推出的新一代站点开发语言,他完全解决了目前ASP,PHP的一个通病--
脚本级执行(据说PHP4 也已经在Zend 的支持下,实现编译运行).Sun 公司借助自己在Jav
a 上的不凡造诣,将Java 从Java 应用程序 和 Java Applet 之外,又有新的硕果,就是Js
p--Java Server Page。Jsp 可以在Serverlet和JavaBean的支持下,完成功能强大的站点
程序。
  三者都提供在 HTML 代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。
但JSP代码被编译成 Servlet 并由 Java 虚拟机解释执行,这种编译操作仅在对 JSP 页面的
第一次请求时发生。在 ASP 、PHP、JSP 环境下, HTML 代码主要负责描述信息的显示样式
,而程序代码则用来描述处理逻辑。普通的 HTML 页面只依赖于 Web 服务器,而 ASP 、PH
P、JSP 页面需要附加的语言引擎分析和执行程序代码。程序代码的执行结果被重新嵌入到
HTML 代码中,然后一起发送给浏览器。 ASP 、PHP、 JSP三者都是面向 Web 服务器的技术
,客户端浏览器不需要任何附加的软件支持。

 

21、谈谈对mvc的认识(1分)

MODEL-VIEW-CONTROL,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。 可维护性和复用性,第耦合,有利于软件工程化管理.

22、写出发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email)(2分)

SELECT username FROM members ORDER BY posts DESC LIMIT 0,10;

 

23. 请说明php中传值与传引用的区别。什么时候传值什么时候传引用?(2分)

Call by value (传值):指从主程序将变量内容传递给函数的参数,无论在函数内如何修改、变化该参数值,都不影响主程序原本变量的内容,即使变量名称相同。

调用方式:函数名(参数1,参数2);

Call by address (传引用):指从主程序将变量地址传递给函数的参数,在函数内若修改、变化该参数值,会修改主程序原本变量的内容,即主程序与函数存取的是同一变量。

调用方式:函数名(&参数1,&参数2);

 

24. 在PHP中error_reporting这个函数有什么作用? (1分)

error_reporting( ) 用于设置php的侦听错误的级别.[用来配置错误信息回报的等级].

  

25. 请写一个函数验证电子邮件的格式是否正确 (2分)

(1)Javascript实现:

function checkEmail(form){

   re=/^[^/s]+@[^/s]+/.[^/s]+$/;

if(re.test(form.value)){

         alert(‘符合验证’);

}else{

     alert(‘验证失败’);

}

}

(2)php实现

function CheckMailAdr($str){
return(eregi(“^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$“,$str));
}

(3)

function validateEmail($email)
{
    if(eregi('^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$',$email) ){
        return true;
    }else{
        return false;
    }
}

 

26. 简述如何得到当前执行脚本路径,包括所得到参数。(2分)

1获取所有参数:可以用以下方法:
//获取post的数据
while (list($var, $value) = each($HTTP_POST_VARS))
{
    echo “$var = $value n“;
}
//获取get方式的数据
while (list($var, $value) = each($HTTP_GET_VARS))
{
    echo “$var = $value n“;
}

 

 

28、JS表单弹出对话框函数是?获得输入焦点函数是? (2分)

      弹出对话框: alert(),prompt(),confirm()
   获得输入焦点 focus()

 

29、JS的转向函数是?怎么引入一个外部JS文件?(2分)

转向函数 window.location.href

引入外部JS文件:<script type="text/javascript" src="js/js_function.js"></script>

 

30、foo()和@foo()之间有什么区别?(1分)

@foo()有控制错误输出

 

31、如何声明一个名为”myclass”的没有方法和属性的类? (1分)

class myclass{ }

 

32、如何实例化一个名为”myclass”的对象?(1分)

       $newmyclass = new myclass();

 

33、你如何访问和设置一个类的属性? (2分)

 $newmyclass = new myclass();
$temp=$newmyclass->test;
$newmyclass->test="a";

 

34、mysql_fetch_row() 和mysql_fetch_array之间有什么区别? (1分)

  mysql_fetch_row -- 从结果集中取得一行作为枚举数组
   mysql_fetch_array -- 从结果集中取得一行作为关联数组,或数字数组,或二者兼有

 

35、GD库是做什么用的? (1分)

gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。
在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。

 

36、指出一些在PHP输入一段HTML代码的办法。(1分)

1. echo ‘<html></html>’;直接输出

2. require include 包含进来一段html代码

 

37、下面哪个函数可以打开一个文件,以对文件进行读和写操作?(1分)
  (a) fget() (b) file_open() (c) fopen() (d) open_file()

 

38、下面哪个选项没有将 john 添加到users 数组中? (1分)


  (a) $users[] = ‘john’;
  (b) array_add($users,’john’);
  (c) array_push($users,‘john’);
  (d) $users ||= ‘john’;

  

   (b) (d) 均是错误的写法

  

39、下面的程序会输入是否?(1分)
  $num = 10;
  function multiply(){
  $num = $num * 10;
  }
  multiply();
  echo $num;
  ?>

输出 10

40、使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来 (2分)
  
表名User
Name Tel Content Date
张三 13333663366 大专毕业 2006-10-11
张三 13612312331 本科毕业 2006-10-15
张四 021-55665566 中专毕业 2006-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'];
    echo "<br>";
}

 

 

41、如何使用下面的类,并解释下面什么意思?(3)
  class test{
  function Get_test($num){
  $num=md5(md5($num).”En”);
  return $num;
  }
  }

双重md5加密
$testObject = new test();
$encryption = $testObject->Get_test("xiaotian_ls");

  

 

42、写出 SQL语句的格式 : 插入 ,更新 ,删除 (4分)
  表名 UserName Tel Content Date
     张三 13333663366 大专毕业 2006-10-11
     张三 13612312331 本科毕业 2006-10-15
     张四 021-55665566 中专毕业 2006-10-15
  (a) 有一新记录(小王 13254748547 高中毕业 2007-05-06)请用SQL语句新增至表中

INSERT INTO User('Name','Tel','Content','Date') VALUES('小王','13254748547','高中毕业','2007-05-06')

(b) 请用sql语句把张三的时间更新成为当前系统时间

UPDATE User SET Date=DATE_FORMAT(NOW(),'%Y-%m-%d') WHERE Name='张三'
(c) 请写出删除名为张四的全部记录

  43、请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别(2分)

  44、MySQ自增类型(通常为表ID字段)必需将其设为(?)字段(1分)

  43、MySQ自增类型(通常为表ID字段)必需将其设为(?)字段(1分)

AUTO_INCREMENT


44、写出以下程序的输出结果 (1分)
   <?
    $b=201;
    $c=40;
    $a=$b>$c?4:5;
    echo $a;
   ?>

4


45、检测一个变量是否有设置的函数是否?是否为空的函数是?(2分)

isset($a) empty($a)


46、取得查询结果集总数的函数是?(1分)

mysql_num_rows($res);


47、$arr = array('james', 'tom', 'symfony'); 请打印出第一个元素的值 (1分)

echo $arr[0];


48、请将47题的数组的值用','号分隔并合并成字串输出(1分)

echo $arr[0].$arr[1].$arr[2];


49、$a = 'abcdef'; 请取出$a的值并打印出第一个字母(1分)

echo $a{0};


50、PHP可以和sql server/oracle等数据库连接吗?(1分)

可以


51、请写出PHP5权限控制修饰符(3分)

private protected public


52、请写出php5的构造函数和析构函数(2分)

__construct __destruct


53、以下请用PHPMYADMIN完成
(一)创建新闻发布系统,表名为message有如下字段 (3分)
id 文章id
title 文章标题
content 文章内容
category_id 文章分类id
hits 点击量


CREATE TABLE 'message'(
    'id' int(11) NOT NULL auto_increment,
    'title' varchar(200) default NULL,
    'content' blob,
    'category_id' int(11) default NULL,
    'hits' int(11) default NULL,
    PRIMARY KEY('id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8
(二)同样上述新闻发布系统:表comment记录用户回复内容,字段如下 (4分)
comment_id 回复id
id 文章id,关联message表中的id
comment_content 回复内容
现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面
文章id 文章标题 点击量 回复数量
用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示为0


SELECT message.id id,message.title title,IF(message.`hits` IS NULL,0,message.`hits`) hits,IF(comment.`id` is NULL,0,count(*)) number
FROM message LEFT JOIN comment ON message.id=comment.id
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>");
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值