php面试题,各大企业常见的php面试题之五

1. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
答:<?php
$url = “http://www.sina.com.cn/abc/de/fg.php?id=1″;
arr=parseurl(url);
pathArr=pathinfo(arr['path']);
print_r($pathArr['extension']);

2. 写一个函数,算出两个文件的相对路径
如 $a = ‘/a/b/c/d/e.php';
$b = ‘/a/b/12/34/c.php';
计算出 b相对于a 的相对路径应该是 http://www.cnblogs.com/12/34/c.php将添上
答:<?php
$a = ‘/a/b/c/d/e.php';
$b = ‘/a/b/12/34/c.php';
//获取path相对于conpath的相对路径
function sGetRelativePath(path,conpath)
{
pathArr=explode(“/”,path);
conpathArr=explode(“/”,conpath);
$dismatchlen = 0;
for(i=0;i < count(pathArr);i++)
{
if(conpathArr[i] != pathArr[i])
{
dismatchlen=count(pathArr) – $i;
arrLeft=arrayslice(pathArr, $i);
break;
}
}
ret=strrepeat(“../”,dismatchlen).implode(“/”, $arrLeft);
return $ret;
}
print_r(sGetRelativePath(b,a));

3.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
答:<?php
function aGetAllFile($folder)
{
$aFileArr = array();
if(is_dir($folder))
{
handle=opendir(folder);
while((file=readdir(handle)) !== false)
{
//如果是.或者..则跳过
if(file==”.”||file == “..”)
{
continue;
}
if(is_file(folder.”/”.file))
{
aFileArr[]=file;
}
else if(is_dir(folder.”/”.file))
{
aFileArr[file] = aGetAllFile(folder.”/”.file);
}
}
closedir($handle);
}
return $aFileArr;
}
$path = “/home/test/sql”;
print_r(aGetAllFile($path));

3、指出一些在PHP输出一段HTML代码的办法。
答:你可以使用 PHP 中任何一种输出语句,包括 echo、print、printf,大部分人都使用如下例的 echo:
echo “My string $variable”;
你也可以使用这种方法:
Heredoc
echo <<<END
This text is written to the screen as output and this $variable is parsed too. If you wanted you can have <span> HTML tags in here as well.</span> The END; remarks must be on a line of its own, and can’t contain any extra white space.
END;

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

5、下面哪个选项没有将 john 添加到users 数组中? bd
答:(a) $users[] = ‘john’;
(b) array_add($users, ‘john’);
(c) array_push($users, ‘john’, ‘andy’);
(d) $users ||= ‘john’;

6、用哪一个函数检测一个变量是否定义过?是否为空的函数是?是否为NULL?
答:isset()、 empey、is_null()要深刻理解这几个的含义。

7、请将数组的值用’,’号分隔并合并成字符串输出。如何将一个以’,’隔开的字符串分割成数组?
答:参考 implode.php 把数组变成字符串
要掌握implode和explode的用法。

8、$a = ‘abcdef’; 请打印出$a的第一个字母。
答:echo $a{0};
echo $a[0]; // 不建议用这种方式
substr($a, 0, 1);
最好是用{}。

10、PHP可以和sql server/oracle等数据库连接吗?
答:可以。可以用PDO连接。

11、请写出php5的构造函数和析构函数
答:function __construct(){}
function __destruct(){}

12、写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
答:参考url1.php

13、求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数(天数)。
答:思路1:先用strtotime转换成unix时间戳,然后相减,除以86400.
思路2:先用mktime转换成unix时间戳,然后相减,除以86400.
参考 time1.php

14、请写一个函数,实现以下功能:
字符串”open_door” 转换成 “OpenDoor”、”make_by_id” 转换成 “MakeById”。
答:思路:
1)将’_’替换成’ ‘;
2)使用ucwords()将各单词首字母大写;
3)去掉空格;str_replace()
rename_for_val.php

15、不用新变量直接交换现有两个变理的值。
答:考算法的基本功。
$a = ‘welcome’;
$b = ‘beijing’;
$a = ‘|’.$a.’|’.’|’.$b.’|’; //|welcome||beijing|
$b = str_replace( ‘|’.$b.’|’, ”, $a);
$b = trim($b, ‘|’);

$a = str_replace( ‘|’.$b.’|’, ”, $a);
$a = trim($a, ‘|’);
echo $a;
echo $b;
$a=5;$b=3;怎么交换两个数字?
$a=$a+$b; // 8
$b=$a-$b; //5
$a=$a-$b; //3

16、表单中 get与post提交方法的区别?
答:a、Get 方法通过 URL 请求来传递用户的数据,将表单内各字段名称与其内容,以成对的字符串连接,置于 action 属性所指程序的 url 后,如http://www.domain.com/test.asp?name=51js&password=51js,数据都会直接显示在 url 上,就像用户点击一个链接一样;Post 方法通过 HTTP post 机制,将表单内各字段名称与其内容放置在 HTML 表头(header)内一起传送给服务器端交由 action 属性能所指的程序处理,该程序会通过标准输入(stdin)方式,将表单的数据读出并加以处理
b、 Get 方式需要使用 $_GET 来取得变量的值;而 Post 方式通过 $_POST 来访问提交的内容
c、Get 方式传输的数据量非常小,一般限制在 2 KB 左右,但是执行效率却比 Post 方法好;而 Post 方式传递的数据量相对较大,它是等待服务器来读取数据,不过也有字节限制,这是为了避免对服务器用大量数据进行恶意攻击。可在php.in中 对 post_max_size 进行设置。
建议:除非你肯定你提交的数据可以一次性提交,否则请尽量用 Post 方法
d、Get 方式提交数据,会带来安全问题,比如一个登陆页面,通过 Get 方式提交数据时,用户名和密码将出现在 URL 上,如果页面可以被缓存或者其他人可以访问客户这台机器,就可以从历史记录获得该用户的帐号和密码,所以表单提交建议使用 Post 方法;Post 方法提交的表单页面常见的问题是,该页面如果刷新的时候,会弹出一个对话框。
建议:出于安全性考虑,建议最好使用 Post 提交数据***********************************在B/S应用程序中,前台与后台的数据交互,都是通过HTML中Form表单完成的。Form提供了两种数据传输的方式——get和post。虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可能会对数据产生严重的影响。虽然为了方便的得到变量值,Web容器已经屏蔽了二者的一些差异,但是了解二者的差异在以后的编程也会很有帮助的。
Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下:
a、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。
b、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用”?”连接,而各个变量之间使用”&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。
c、Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说都是不可见的。
d、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。
e、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
f、Get是Form的默认方法。
*.Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示。
*.Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度的限制,只能传递大约1024字节.
*.Post顾名思义,就是为了将数据传送到服务器段,Get就是为了从服务器段取得数据.而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.Post的信息作为http请求的内容,而Get是在Http头部传输的。

17、session与cookie的区别?
答:session是服务器端缓存,cookie是客户端缓存。
cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。

18、PHP支持的数据类型有八种,以下被支持的有:(A B C E )
string
int
float
Bool
array
NULL
resource
object
A、array
B、floating-point numbers(double)
C、integer
D、date
E、string

19、假定要使用Apache+Php的配置,并将php3编译成Apache的一个模块。那麽以下httpd.conf文件的语句是必须的:【C】
A、AddModule mod_php3.c
B、LoadModule php3_module libexec/libphp3.so
C、AddType application/x-httpd-php3 .php3
D、setup
E、make install

20、以下程序:
<HTML>
<HEAD>
<TITLE></TITLE>
<HEAD>
<BODY>
<?php
$num1 = 15;
$num2 = $num1;
echo “<p>$num2</p>”;
$num2 = &$num1;
$num2 = 20;
echo “<p>$num1</p>”;
?>
</BODY>
</HTML>
程序输出为:[AC]
A、15
B、35
C、20
D、5

21、以下程序
<?php
$str1 = “01″;
$str1++;
$str1 += 1; //$str1 = $str1 + 1;
echo “<p>\$str1 => $str1</p>”;
?>
程序输出为:[D]
A、$str1 => 01
B、$str1 => 2
C、$str1 => 03
D、$str1 => 3
E、$str1 => 1

22、全局变量与局部变量
$a=1;
sum(){
echo $a;
}
sum();
程序输出为:[E]
A、1
B、10
C、100
D、1000
E、空值

23、PHP的控制语句
<?php
$a = 3;
$b = $a++;
if ($a > $b){
echo “a 比 b 大”;
}elseif ($a == $b){
echo “a 等于 b”;
}else{
echo “a 比 b 小”;
}
?>
输出结果为:[A]
A、a 比 b 大
B、a 等于 b
C、a 比 b 小
D、”a 比 b 小”
E、无输出

24、PHP对字符串的处理程序
$name=”Jollen”;
echo ‘Name:$name’;
echo “Name:$name”;
输出结果为:[C]
A、Name:Jollen
Name:Jollen
B、Name:Jollen
Name:$name
C、Name:$name
Name:Jollen
D、Name:$name
Name:$name
E、Name:”Jollen”
Name:Jollen

25、下面建立与MySQL Server的连接语法正确的是:[BD ]
A、$link=connect(“host_name”,”user_name”,”password”);
B、$link=mysql_connect(“host_name”,”user_name”,”password”);
C、$link=mysqlconnect(“host_name”,”user_name”,”password”);
D、$link=mysql_pconnect(“host_name”,”user_name”,”password”);
E、$link=pconnect(“host_name”,”user_name”,”password”);

26、rawurlencode()的作用是?
答:按照 RFC 1738 对 URL 进行编码返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在 RFC 1738 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。
与urlencode()的区别:
urlencode:返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同。

27、请说明在php.ini中safe_mode开启之后对于PHP系统函数的影响?
答:safe_mode是唯一PHP_INI_SYSTEM属性,必须通过php.ini或httpd.conf来设置。要启用safe_mode,只需修改php.ini: safe_mode = On 或者修改httpd.conf,定义目录:
Options FollowSymLinks php_admin_value safe_mode 1
重启apache后safe_mode就生效了。启动safe_mode,会对许多PHP函数进行限制,特别是和系统相关的文件打开、命令执行等函数。
默认情况下,所有操作文件的函数将只能操作与脚本UID相同的文件。
注意:如果在linux中启用了safe_mode,那么如果要在一个目录中创建一个目录,比如要在/upload中创建一个20081202,那么/upload目录所有者必须是apache的所有者。

28、PHP5中魔术方法函数有哪几个,请举例说明各自的用法
答:__sleep
__wakeup
__toString
__set_state
__construct,
__destruct
__call,
__get,
__set,
__isset,
__unset
__clone
__autoload

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值