当前位置: 代码迷 >> PHP >> 透过面试题目学习php之填空题
  详细解决方案

透过面试题目学习php之填空题

热度:1393   发布时间:2016-04-28 18:50:05.0
通过面试题目学习php之填空题

1、? 判断一个变量是否存在的函数:isset

判断一个变量是否为null的函数is_null

判断一个变量是否为空的函数empty

销毁一个变量的函数unset

2$a =array(1,2);unset($a[0]);print_r($a);echo count($a);请写出输出结果:

答:array(1=>2) ?; ?1

3$str = '2012/12/21';

echoereg_replace("([0-9]+)/([0-9]+)/([0-9]+)","\\1/\\2/\\3",$str);

请写出输出结果'2012/12/21'

4$a = "aaa"; $b ="bbb";$c = "$a$b";$c = $a.$b;请问①和②谁执行的更快?

答:②

5打印一个用‘.’链接的字符串时候,还可以用什么代替‘.’链接效率更高些?

答:可以用‘,’代替‘.’。‘,’效率更高。

6函数strpos的原型为:int strpos(string haystack,stringneedle [,int offset])

用来从haystack中查找needle,如果找到返回needlehaystack的偏移,否则返回false。问:如何区分strpos返回false和返回0

答:采用绝对等于进行判断。==是不判断二者是否是同一数据类型,而===是更为严格的比较,它不但要求二者值相等,而且还要求它们的数据类型也相同。

7请列出您所知道的php模版对象

答:smarty,常见的还有PHPLib,FastTemplate,Savant

8请写出pHp脚本中执行SHELL命令的方法,要求至少写两种。

答:①string? exec(stringcommand[,array output[,int return_var]])它返回输出的最后一行,还可以通过可选参数outputexec指定的命令结束时的每一行输出。

??String? systemString command[,int return_var])直接将命令输出返回给调用者。

??void ?passthru(String command[,int returan_var])向调用者返回二进制输出。

??string ?shell_exec ( string $cmd )将字符串当做shell命令来执行,并返回所有输出。

??resource ?popen ( string $command , string $mode ) 打开一个指向进程的管道,该进程由派生指定的 command 命令执行而产生。

9请写出pHp变量序列化和反序列化的函数,并举出1个应用例子

答:serialize()/unserialize().

10WWW应用的pHp程序中,如何捕捉页面缓存的输出?

答:ob_start() ;打开缓存区,将已载入的内容加载到缓存区。
ob_get_contents();
获取缓存区内容,经典用法 $str=ob_get_contents();

Ob_clean();仅仅清空缓冲区中的内容;
ob_end_clean();
清除缓冲区中缓存内容,并关闭输出缓冲区。

ob_start() 函数出现后开始所有的输出内容将被缓存,不被输出,直到出现 ob_end_clean() 函数。ob_end_clean()以后输出内容不再被缓存而且把以前的缓存内容清空掉。所以为了使用刚刚缓存了的内容必须在ob_end_clean()函数出现之前使用 ob_get_contents() 函数提取已经缓存了的内容。

ob_clean()ob_end_clean()有什么区别呢?

ob_clean 只是清除缓冲区中的内容.ob_end_cleanob_clean多做一些事情.就是关闭缓冲区.

ob_flush();刷新缓存区,将缓冲区内容输出;

ob_get_length();返回缓冲区中缓存内容的长度。

ob_get_clean();获取当前缓冲区中的内容,并删除输出缓冲区。

11执行第一段代码,你觉得结果可能是多少?

???????? $a = array(1,2);

???????? $b = array(3,4);

???????? var_dump($a+$b);

再执行第二段代码,结果又是多少呢?

???????? $a = array(1,2);

???????? $b = array('2'=>3,'3'=>4);

???????? var_dump($a+$b);

答:第一段代码结果是array([0]=>1,[1]=>2);

???????? 第二段代码结果是 array([0]=>1,[1]=>2,[2]=>3,[3]=>4);

???????? 这是因为php对数组相加的处理是当$a+$b时,如果$b数组中有与$a数组中不同的键,则把$b不同的数组项附加到$a数组中,并返回这个数组.

???????? 你可能会想到既然有加,是不是会有减呢,很抱歉,减是不可以的,无法通过语法检查

12echo 3|4;请问输出:

答:7

13echo count('12asssss');

答:1

14PHP打印出前一天的时间格式是2006-5-10 22:21:21

答:echo date(‘Y-n-d H:i:s’, strtotime(‘-1 day’));

15使用哪些工具进行版本控制?

:cvs,svn,vss;

16、如何实现字符串翻转?

答:stringstrrev( string$string )---php内置字符串反转函数。

function str_strrev($str)

{

??? $len=strlen($str);

??? $newstr = "";

??? for($i=$len;$i>=0;--$i)

??? {

?????? $newstr .= $str[$i];

??? }

??? return $newstr;

}

17MYSQL取得当前时间的函数是?,格式化日期的函数是

答:①curtime()/current_time()—返回当前时间

???????? curdate()/current_date()—返回当前日期

???????? now()—返回函数执行时的时间日期

???????? sysdate()—返回当时实时的时间。

uninx_timestamp()—返回当前时间日期的unix时间戳。

Date_format(date,format)—格式化日期的函数

18、用PHP写出显示客户端IP与服务器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 = $_SERVER['REMOTE_ADDR'];

??? }

??? return $client_ip;

}

1.REMOTE_ADDR:浏览当前页面的用户计算机的ip地址
2.HTTP_X_FORWARDED_FOR: 浏览当前页面的用户计算机的网关
3.HTTP_CLIENT_IP:客户端的ip

PHP 中使用 $_SERVER["REMOTE_ADDR"] 来取得客户端的 IP 地址。但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取。

不过要注意,并不是每个代理服务器都能用$_SERVER["HTTP_X_FORWARDED_FOR"] 来读取客户端的真实 IP,有些用此方法读取到的仍然是代理服务器的 IP

PHP 中使用 $_SERVER["REMOTE_ADDR"] 来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取。不过要注意的事,并不是每个代理服务器都能用$_SERVER["HTTP_X_FORWARDED_FOR"] 来读取客户端的真实 IP,有些用此方法读取到的仍然是代理服务器的 IP

服务器端IP相关的变量

1. $_SERVER["SERVER_NAME"],需要使用函数gethostbyname()获得。这个变量无论在服务器端还是客户端均能正确显示。(gethostbyname($_SERVER["SERVER_NAME"]);

2. $_SERVER["SERVER_ADDR"],在服务器端测试:127.0.0.1(这个与httpd.confBindAddress的设置值相关)。在客户端测试结果正确。

19、如何修改SESSION的生存时间

:①修改php.ini中的session.gc_maxlifetime(After this number of seconds, stored data willbe seen as 'garbage' and cleaned up by the garbage collection process.),然后重启apache(注意:即使设置了垃圾回收的有效时间,但是能够触发垃圾回收器还存在一定的概率。session.gc_probability = 1(启动垃圾回收进程的几率);session.gc_divisor = 1000(启动垃圾回收进程几率因子,当前为千分之几); Define the probability that the'garbage collection' process is started. on every session initialization. Theprobability is calculated by using gc_probability/gc_divisor, e.g. 1/100 meansthere is a 1% chance that the GC process starts on each request.每次请求触发垃圾回收进程的几率)

②通过string session_save_path([ string $path ] )设置存储session文件的路径session_set_cookie_params(ini$lifetime,…)设置session回话cookie的有关参数(主要是session的生存周期),并且仅仅对当前执行php脚本有效。因此,如果对其他脚本设置,需要在启动session_start前调用该函数。

③通过setcookie()函数设置存储session_id信息的cookie生存周期,来控制session的生存周期,如下:setcookie(session_name(),session_id(),time()+N)

20、有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?

:①采用file_get_contents:

$url =" http://www.phpres.com/index.html";

$contents= file_get_contents($url);

②采用curl

$url =" http://www.phpres.com/index.html";

$ch =curl_init();

$timeout= 5;

curl_setopt($ch,CURLOPT_URL, $url);

curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch,CURLOPT_CONNECTTIMEOUT, $timeout);

//在需要用户检测的网页里需要增加下面两行

//curl_setopt($ch,CURLOPT_HTTPAUTH, CURLAUTH_ANY);

//curl_setopt($ch,CURLOPT_USERPWD, US_NAME.":".US_PWD);

$contents= curl_exec($ch);

curl_close($ch);

echo$contents;

③采用fopen->fread->fclose

$url =" http://www.phpres.com/index.html";

$handle =fopen ($url, "rb");

$contents= "";

do {

$data =fread($handle, 1024);

if(strlen($data) == 0) {

break;

}

$contents.= $data;

}while(true);

fclose($handle);

echo$contents;

21、在PHP中,heredoc是一种特殊的字符串,它的注意事项有?

答:①开始和结束标示符必须相同,且标示符必须完全由字母数字字符和下划线组成,而且不能以数字和下划线开头。

②开始标示符前面必须有三个左尖括号:<<<

heredoc语法与双引号界定的字符串遵循相同的解析规则。即,变量和转义序列都将得到解析。唯一的区别是:此处的双引号不需要转义。

④结束符必须在一行的开始处,而且前面不能有空格或任何其他多余的字符。此外,开始和结束标示符后面的任何空格都会导致语法错误。

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

答:SELECT username FROM members GROUP BY id ORDER BY COUNT(id) DESC limit0,10;

23、在PHPerror_reporting这个函数有什么作用?

答:设置错误报告的级别。该参数可以是一个任意的表示二进制位字段的整数,或者常数名称。

24、请写一个函数验证电子邮件的格式是否正确

答:/^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/

25、简述如何得到当前执行脚本路径,包括所得到参数。

答:$_SERVER[HTTP_HOST].$_SERVER[PHP_SELF].’?’.$_SERVER[QUERY_STRING];

26JS表单弹出对话框函数是?获得输入焦点函数是?

答:弹出对话框: alert(),prompt(),confirm()

获得输入焦点 focus()

27JS的转向函数是?怎么引入一个外部JS文件?

:window.location.href;

??<script type=”text/javascript” src=”URL”></scirpt>

28foo()@foo()之间有什么区别?

答:foo();调用一个函数
@foo();调用一个函数,如果调用有错误,则忽略

29mysql_fetch_row() mysql_fetch_array之间有什么区别?

:mysql_fetch_row是从结果集取出1行数组,作为枚举

mysql_fetch_array是从结果集取出一行数组作为关联数组,或数字数组,两者兼得

30GD库是做什么用的?

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

31、指出一些在PHP输入一段HTML代码的办法。

答:

32、下面的程序会输入是否?(1)

?  $num = 10;

?  function multiply(){

????????   $num = $num * 10;

?  }

?  multiply();

?  echo $num;

答:10

33、使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来 (2)

?  表名 UserName 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);

???????? $query = mysql_query(“select * fromtable_name where username=’张三’”,$mysql_db);

???????? While($row =mysql_fetch_array($query)){

?????????????????? Print_r($row);

??????? }

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

答:auto_increment

35、写出以下程序的输出结果 (1)

?  $b=201;

?  $c=40;

?  $a=$b>$c?4:5;

?  echo $a;

答:4

36、取得查询结果集总数的函数是?获取更新操作影响的总数量的函数是?

答:mysql_num_rows($result);mysql_affected_rows($result);

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

答:echo $arr[0];

38、请将37题的数组的值用','号分隔并合并成字串输出

答:echo implode(“,”,$arr);

39$a = 'abcdef'; 请取出$a的值并打印出第一个字母

:echo $a[0] echo substr($a,0,1)

40、请写出PHP5权限控制修饰符

:public(公共),private(私用),protected(继承)

41、在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量____;而链接到当前页面的URL记录在预定义变量____中。

答:$_server[SCRIPT_NAME];$_server[HTTP_REFERER];

42、在HTTP 1.0中,状态码 401 的含义是_状态401代表未被授权___;如果返回“找不到文件”的提示,则可用 header 函数,其语句为_header(“HTTP/1.1404 Not Find”)___

答:①状态401代表未被授权_header(“HTTP/1.0 404 Not Found”);

43、数组函数 arsort 的作用是____;语句 error_reporting(2047)的作用是____

答:arsort()本函数对数组进行逆序排序,数组的索引保持和单元的关联

error_reporting(2047)的作用是:report All errors and warnings

44PEAR中的数据库连接字符串格式是____

: 一般来说,$dsn是一个字符串,它的格式如下:

?phptype(dbsyntax)://username:[email protected]+hostspec/database

* phptype: php后端数据库的类型名称(mysql,odbc 等等.)

* dbsyntax: 数据库所使用的SQL语法标准,一般不用。

* protocol: 使用的通讯协议。(如tcp, unix 等等.

* hostspec: 数据库所在的主机的描述。(形式是:主机名[:端口号]

* database: 数据库的名称。

* username: 登陆的用户名。

* password: 登陆的密码。

例如:$dsn ="mysql://root:[email protected]/testdb";

45、写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉)____

答:preg_replace('/<script[^>]*?>.*?<\/script>/is','',$a);注意:1、“<>”尖括号好不需要转义2、“*?”这是由贪婪匹配转换成惰性匹配。

46、以Apache模块的方式安装PHP,在文件http.conf中首先要用语句____动态装载PHP模块,然后再用语句____使得Apache把所有扩展名为php的文件都作为PHP脚本处理。

答:LoadModule?php5_module? "c:/php/php5apache2.dll";

?????? ?AddType application/x-httpd-php .php .phtml;

47、类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是____

答:serialize|unserialize

48、一个函数的参数不能是对变量的引用,除非在php.ini中把____设为on.

答:allow_call_time_pass_reference

It's notpossible to decide to force a variable to be passed by reference when calling afunction.? The PHP 4 style to do this isby making the function require the relevant argument by reference.

49SQLLEFT JOIN的含义是____。如果 tbl_user记录了学生的姓名(name)和学号(ID)tbl_score记录了学生(有的学生考试以后被开除了,没有其记录)的学号(ID)和考试成绩(score)以及考试科目(subject),要想打印出各个学生姓名及对应的的各科总成绩,则可以用SQL语句____

答:左连接;

selectu.uid,u.name,s.subject,s.score from tbl_user u left join tbl_score s onu.uid=s.uid

50、向执行php脚本,传入参数的两种方法。

:①采用$argc$argv的方式。

<?php

if($argc> 1){

print_r($argv);

}

命令行下运行的方式是php test.php a b,获取到得结果为:

Array(

??? [0] => G:\php\test\test.php

??? [1] => a

??? [2] => b

)

②使用getopt函数(): array getopt ( string $options [, array $longopts ] ) 从命令行参数列表中获取选项

<?php

$options = "f:g:";

$opts = getopt($options);

print_r($opts);

在命令行下运行 /usr/local/php/bin/php test.php -f 123 -g456输出结果为:

Array(

[f] => 123

[g] => 456

)

51、有一个IP地址(192.168.0.1),请写出其32位无符号整数形式。

答:

52、实现中文字串截取无乱码的方法。

: string mb_substr ( string $str , int$start [, int $length [, string $encoding ]] )

53、执行程序段<?php echo 8%(-2); ?>将输出?

答:0(正常计算,与正负号无关)

54PHP的意思?

:PHP超文本预处理语言,是一个基于服务端来创建动态网站的脚本语言,您可以用PHPHTML生成网站主页。

55、请举例说明在你的开发过程中用什么方法来加快页面的加载速

答:要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器。使用代码优化工具啦,采用缓存队列。

56sort()asort()、和 ksort() 有什么分别?它们分别在什么情况下使用?

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

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

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

57"==="是什么?试举一个"=="是真但"==="是假的例子。

答:"==="是绝对等于的判断,在比较过程中即比较变量的值是否相等,还比较变量类型是否相同。strpos() strrpos() 便是其中两个例子。

if (strpos("abc", "a") ==true){ // 这部分永不会被执行,因为 "a" 的位置是 0,换算成布尔值""}if (strpos("abc","a") === true){ // 这部份会被执行,因为"==="保证函式 strpos() 的送回值不会换算成布尔值.}

58、抓取远程图片到本地,你会用什么函数?

答:file_get_contents()

59、简述POST GET传输的最大容量分别是多少?

答:GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了。而实际上,URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IEURL长度的限制是2083字节(2K+35)。对于其他浏览器,如NetscapeFireFox等,理论上没有长度限制,其限制取决于操作系统的支持.

???????? POST理论上讲是没有大小限制的,HTTP协议规范也没有进行大小限制,POST数据是没有限制的,起限制作用的是服务器的处理程序的处理能力。例如php.ini中有一个参数

post_max_size(Maximumsize of POST data that PHP will accept)限制post大小。

60、将1234567890转换成1,234,567,890 3位用逗号隔开的形式。

答:string number_format ( float$number [, int $decimals = 0 ] )

61Php中如何判断一个字符串是否是合法的日期模式:2007-03-13 13:13:13 。要求代码不超过5行。

if(preg_match("/\d{4}-\d{2}-\d{2}\d{2}:\d{2}:\d{2}/", $str)){

???????? Echo “符合”;

}else{

???????? Echo “不符合”;

}

62zend optimizer是什么

答:Zend Optimizer用优化代码的方法来提高php应用程序的执行速度。实现的原理是对那些在被最终执行之前由运行编译器(Run-TimeCompiler)产生的代码进行优化。

63、写出下列程序的输出结果。

<?php

??? classa{

???????protected $c;

???????public function a(){

?????????$this ->c=10;

??????}

??? }

?

???class b extends a{

???????public function print_data(){

??????????return $this->c;

??????}

??? }

?

???$b=new b();

???echo $b ->print_data();

?>

答:10。当父类有构造函数,子类没有构造函数时,实例化子类过程中,子类会自动调用父类的构造函数;而如果子类有构造函数,则不管父类是否有构造函数,在实例化子类的过程中,子类都不会自动调用父类构造函数,除非子类显示的调用父类的构造函数。

  相关解决方案