您的位置:首页 > 职场人生

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

2017-08-08 16:03 357 查看
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 方法提交的表单页面常见的问题是,该页面如果刷新的时候,会弹出一个对话框。

建议:出于
ae55
安全性考虑,建议最好使用 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: