---恢复内容开始---
1.1 PHP中判断变量的相关函数
1.2 strlen( )与mb_strlen( )的作用分别是什么(新浪网技术部)
strlen 和mb_strlen 都是用于获取字符串长度的,其中strlen只针对单字节编码字符,也就是说它计算的是字符串的总字节数,如果是多字节编码,如gbk和utf8,使用strlen得到的不是字符串的个数,而是该字符串的总字节数,可以使用mb_strlen获取其字符个数,使用mb_strlen要注意两点,一是要开启mbstring扩展,二是要指定字符集。
示例:
相关题目1:实现中文字串截取无乱码的方法。
方法一,使用php内置函数 mb_substr()
方法二,自定义函数,以utf8为例,如下:
代码分析:
//u 表示按unicode(utf-8)匹配(主要针对多字节比如汉字)
join — 别名 implode()表示将一个一维数组的值转化为字符串
array_slice() 函数在数组中根据条件取出一段值,并返回
相关题目2:如何求解字符串“中国2北333京”的字符数(一个中文一个字符),并找到第四个字符“北”
方法一,使用php内置函数,确保配置中已打开mbstring扩展
方法二,自定义函数实现求其长度,截取使用上面定义的substr_utf8
代码分析:
1.3 下列哪个函数是用正则表达式将字符串分割到数组中( )
A. split
B. implode
C. explode
D. join
答案:A
1.4 写出下列程序的输出结果(新浪网技术部)
答案:1
1.5 注意:PHP的文件名不能有中文
1.6 写出下列几个预定义全局变量的作用(新浪网技术部)
$_SERVER['DOCUMENT_ROOT'] //当前运行脚本所在的文档根目录$_SERVER['HTTP_HOST '] //当前请求的 Host: 头部的内容
$_SERVER['REMOTE_ADDR'] //正在浏览当前页面用户的 IP 地址
$_SERVER['HTTP_REFERER'] //链接到当前页面的前一页面的 URL 地址
$_SERVER['SERVER_NAME'] //当前运行脚本所在服务器主机的名称
$_FILES //包含有所有上传的文件信息,他是预定义超级全局数组中唯一的二维数组。
S_FILES['userfile']['name'] //客户端机器文件的原名称
$_FILES['userfile']['type'] //文件MIME 类型,如果浏览器提供此信息的话,如“image/gif”。
$_FILES['userfile']['size'] //已上传文件的大小,单位为字节
$_FILES['userfile']['tmp_name'] //文件被上传后在服务端储存的临时文件名
$_FILES['userfile']['error'] //和该文件上传相关的错误代码
1.7 include和require都能把另外一个文件包含到当前文件中,他们有什么区别?Include和include_once又有什么区别?(新浪网技术部)
二者区别只有一个,那就是对包含文件的需求程度,include就是包含,如果被包含的文件不存在的话,那么则会提示一个错误,但是程序会继续执行下去。
而require意思是需要,如果被包含文件不存在或者无法打开的时候,则会提示错误,并且会终止程序的执行。
这两种结构除了在如何处理失败之外完全一样。
once的意思是一次,那么include_once和require_once表示只包含一次,避免重复包含。
相关题目1:What is the difference between include & include_once? include & require?(Yahoo)
相关题目2:语句 include 和 require 都能把另外一个文件包含到当前文件中,它们的区别是____;为了避免多次包含同一文件,可以用语句____来代替它们。
在如何处理失败时,include() 产生一个警告而 require() 则导致一个致命错误;require_once()/include_once()
相关题目3:What functions can you use to add library code to the currently running script?(Yahoo)
include、require
1.8 用最少的代码写一个求3值最大值的函数. (51.com笔试题)
1.9 简述POST 和GET传输的最大容量分别是多少? (51.com笔试题)
POST 根据你php.ini文件配置(默认是8M)
GET的话大小限制在2KB
相关题目:表单中 get与post提交方法的区别?
get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息。
1.10 有三个php文件位于同一目录下,内容如下所示,使用浏览器访问 c.php,请问是否存在问题。如果存在问题,请指出修正方法并写出浏览器查看效果,如果不存在问题,请写出浏览器查看效果(酷讯PHP工程师笔试题)
A.php:-------
<?php function fa() { echo "in Function A\n"; }?>
B.php:-------
<?php include 'a.php'; ?>
<?php function fb() { fa(); echo "in Function B\n"; } ?>
C.php:-------
<?php include 'a.php'; ?>
<?php include 'b.php'; ?>
<?php fa(); fb(); ?>
答案:存在问题,a.php 被包含了两次,导致fa()函数重复定义,使用include_once 避免重复包含。(此处应首先想到考点可能就是include和include_once)(总结:函数不能重复定义)
1.11 echo(),print(),print_r()的区别?(新浪)
echo 是一个语言结构,输出一个或多个字符串;
print() 实际上不是一个函数(它是一个语言结构),因此你可以不必使用圆括号来括起它的参数列表,它输出一个字符串;
print_r () 是一个函数,打印变量的信息,基本类型,数组,对象。
注意 ,是echo本身支持的一种语法,而. 则是字符串连接操作符,使用 , 的效率要高一些。
相关题目:What is the difference between "print()" and "echo( )"? (腾讯)
answer: print is a function,echo is a language construct
1.12 用PHP打印出前一天的时间格式是2006-5-10 22:21:21。
相关题目:求两个日期的差数,例如2009-3-1 ~ 2009-4-4 的日期差数
(strtotime("2009-4-4")-strtotime("2009-3-1"))/3600*24
1.13 不使用第三个变量交换两个变量的值
方案一:
方案二:
对字符进行编码,比如base64_encode,要保证编码是可逆的
1.14 请说明php中传值与传引用的区别。什么时候传值什么时候传引用?
变量默认总是传值赋值。那也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。
PHP 也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量简单引用(换言之,“成为其别名” 或者 “指向”)了原始变量。改动新的变量将影响到原始变量,反之亦然。使用引用赋值,简单地将一个 & 符号加到将要赋值的变量前(源变量)。
对象默认是传引用。
需要操作原始数据,则引用,不能影响原始数据,则值传递。
相关题目1:What would the following code print to the browser? Why?
输出 10 (调用函数的题一定要考虑是否有返回值)
相关题目2:What is the difference between a reference and a regular variable? How do you pass by reference & why would you want to?(Yahoo)
reference 传送的是变量的地址而非它的值,所以在函数中改变一个变量的值时,整个应用都见到这个变量的新值。
一个regular variable传送给函数的是它的值,当函数改变这个变量的值时,只有这个函数才见到新值,应用的其他部分仍然见到旧值。
1.15 将1234567890转换成1,234,567,890 每3位用逗号隔开的形式。(百度)
相关题目1:如何实现字符串翻转?
strrev(),不过这种方法都不能解决中文字符串翻转的问题,会出错的。
相关题目2:假设现在有一个字符串www.baidu.com如何使用PHP对它进行操作使字符串以moc.udiab.输出? (亿邮)
1.16 用PHP写出显示客户端IP与服务器IP的代码。
客户端IP:$_SERVER["REMOTE_ADDR"]
服务器端IP:$_SERVER["SERVER_ADDR"]
1.17 简述如何得到当前执行脚本路径,包括所得到参数。
获取当前执行脚本路径使用$_SERVER["SCRIPT_FILENAME"] 或 __FILE__
获取参数,使用$_SERVER["QUERY_STRING"]
__FILE__ :被称为PHP魔术常量,返回当前执行PHP脚本的完整路径和文件名,包含一个绝对路径
1.18 What is the difference between foo() & @foo()? (Yahoo)
foo() 会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。@foo() 在执行这个函式时,会隐藏所有上述的错误讯息。
很多应用程序都使用 @mysql_connect() 和 @mysql_query 来隐藏 mysql 的错误信息,这是不对的,因为错误不该被隐藏,你必须妥善处理它们,可能的话解决它们。
1.19 下面哪个选项没有将 john 添加到users 数组中? ( 百度 )
A. $users[ ] = "john";
B. array_add($users, "john"); //PHP中没有array_add这个函数
C. array_push($users, "john");
D. $users ||= "john" ;
答案:BD
1.20 检测一个变量是否有设置的函数是什么?是否为空的函数是什么?
isset 检测一个变量是否设置
empty 检测是否为空
注意二者的区别,如果 变量是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array() 以及没有任何属性的对象都将被认为是空的。
1.21 在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量______中;而链接到当前页面的的前一页面URL记录在预定义变量______中。
当前脚本名称:$_SERVER["PHP_SELF"] 或者 $_SERVER["SCRIPT_NAME"];
链接到当前页面的前一页面的 URL 地址:$_SERVER["HTTP_REFERER"]。
1.22 sort()、assort()、和 ksort() 有什么分别?它们分别在什么情况下使用?
sort(),根据数组中元素的值,以英文字母顺序排序,索引键会由 0 到 n-1 重新编号。主要是当数组索引键的值无关紧要时用来把数组排序。
assort(),PHP 没有 assort() 函式,所以可能是 asort() 的笔误。
asort(),对数组进行排序,数组的索引保持和单元的关联。主要用于对那些单元顺序很重要的结合数组进行排序。
ksort(),根据数组中索引键的值,以英文字母顺序排序,特别适合用于希望把索引键排序的关联数组。
1.23 在PHP中error_reporting这个函数有什么作用?
打开或者关闭错误报告,如:
error_reporting(0);
error_reporting(E_ALL & ~ E_NOTICE);
error_reporting(E_ALL);
相关题目:error_reporting(2047) 什么作用?(新浪)
2047 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256 + 512 + 1024
其中,1对应E_ERROR,2对应E_WARNING,4对应E_PARSE,8对应E_NOTICE,16对应E_CORE_ERROR,32对应E_CORE_WARNING,64对应E_COMPILE_ERROR, 128对应E_COMPILE_WARNING,256对应E_USER_ERROR,512对应E_USER_WARNING,1024对应E_USER_NOTICE。error_reporting(2047)意味着上述错误都会显示出来。
1.24 写出以下程序的输出结果 (CBSI)
hotdogok
相关题目:什么是可变变量?
获取一个普通变量的值作为这个可变变量的变量名。
1.25 常量如何定义? 如何检测一个常量是否被定义?
定义常量:define() ,
检测常量是否定义:defined(),如
define("TEST","happy new year!");
if( defined("TEST")){
echo TEST;
}
1.26 执行程序段<?php echo 8%(-3) ?>将输出
%为取模运算,输出0
$a % $b 其结果的正负取决于 $a 的符号。
echo ((-8)%3)."<br />"; //输出 -2
echo (8%(-3))."<br />"; //输出 2
1.27 数组函数 arsort 的作用是____;语句 error_reporting(2047)的作用是____。
arsort:对数组进行逆向排序并保持索引关系
error_reporting(2047)的作用 report All errors and warnings,见21题中相关题目。
1.28 以Apache模块的方式安装PHP,在文件http.conf中首先要用语句____动态装载PHP模块,然后再用语句____使得Apache把所有扩展名为php的文件都作为PHP脚本处理。
LoadModule php5_module "c:/php/php5apache2.dll";
AddType application/x-httpd-php .php
1.29 一个函数的参数不能是对变量的引用,除非在php.ini中把____设为on.
allow_call_time_pass_reference :是否启用在函数调用时强制参数被按照引用传递,默认关闭。
1.30 在PHP中,heredoc是一种特殊的字符串,它的结束标志必须____
顶格写,并且不能包含任何其它字符除";",如:
$str = <<<SHOW
my name is Jiang Qihui!
SHOW;
1.31 echo count("abc"); 输出什么?(新浪?)
输出1
count :计算数组中的单元数目或对象中的属性个数,通常是一个 array,任何其它类型都只有一个单元。
对于对象,如果安装了 SPL,可以通过实现 Countable 接口来调用 count()。该接口只有一个方法 count(),此方法返回 count() 函数的返回值。
如果 var 不是数组类型或者实现了 Countable 接口的对象,将返回 1,有一个例外,如果 var 是 NULL 则结果是 0。
相关题目:What will be the output of the following PHP code: (腾讯)
<?php
echo count(strlen("http://php.net"));
?>
answer: 1
1.32 写个函数用来对二维数组排序(新浪)
1.33 写5个不同的自己的函数,来获取一个全路径的文件的扩展名,允许封装php库中已有的函数。(新浪)
1.34 PHP的意思,它能干些什么?
PHP( Hypertext Preprocessor,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。
PHP 能做任何事。PHP 主要是用于服务端的脚本程序,因此可以用 PHP 来完成任何其它的 CGI 程序能够完成的工作,例如收集表单数据,生成动态网页,或者发送/接收 Cookies。但 PHP 的功能远不局限于此。
PHP 脚本主要用于以下三个领域:
1) 服务端脚本。这是 PHP 最传统,也是最主要的目标领域。
2) 命令行脚本。可以编写一段 PHP 脚本,并且不需要任何服务器或者浏览器来运行它。通过这种方式,仅仅只需要 PHP 解析器来执行。
3) 编写桌面应用程序。
1.35 Name a few ways to output (print) a block of HTML code in PHP?(Yahoo)
你可以使用 PHP 中任何一种输出语句,包括echo、print、printf,大部分人都使用如下例的 echo:
echo "My string $variable";
你也可以使用这种方法:
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;
1.36 写出以下程序的输出结果 (CBSI)
输出结果为 4
1.37 $arr = array('james', 'tom', 'symfony'); 请打印出第一个元素的值,并请将数组的值用','号分隔并合并成字串输出。
打印第一个元素:echo $arr[0];
以’,’合并成字符串:echo implode(',',$arr);
1.38 $a = 'abcdef'; 请取出$a的值并打印出第一个字母
echo $a{0} 或 echo $a[0]
相关题目:$string="abcdefg",那么$string{4}的值是? (卓望)
值是 e
1.39 What does === do? What's an example of something that will give true for '==', but not '==='? (Yahoo)
=== 表示全等,是指的两个变量的值和类型都相等。
如 if (strpos('abc','a') == false) 和 if (strpos('abc','a') === false)
1.40 Which of the following snippets prints a representation of 42 with two decimal places? (腾讯)
A. printf("%.2d\n", 42);
B. printf("%1.2f\n", 42);
C. printf("%1.2u\n", 42);
answer:B
1.41 Given $text = 'Content-Type:text/xml'; Which of the following prints 'text/xml'? (腾讯)
A. print substr($text, strchr($text, ':'));
B. print substr($text, strchr($text, ':') + 1);
C. print substr($text, strpos($text, ':') + 1);
D. print substr($text, strpos($text, ':') + 2);
E. print substr($text, 0, strchr($text, ':'));
answer:C
1.42 What is the value of $a? (腾讯)
A. True
B. False
answer:A
1.43 What is the value of $result in the following PHP code? (腾讯)
answer: NULL
1.44 What is the best all-purpose way of comparing two strings? (腾讯)
A. Using the strpos function
B. Using the == operator
C. Using strcasecmp()
D. Using strcmp()
answer:C
1.45 运行以下程序,$a的值是多少?
hello
1.46 运行以下程序,$b的值是多少?
1
1.47 运行以下程序,$x的值是多少?
ture
1.48 将字符09转换成十进制数字。(百度)
使用intval函数,echo intval("09"),或者使用int强制类型转换。
1.49 请写一个函数,实现以下功能: 字符串"open_door" 转换成 "OpenDoor"、"make_by_id" 转换成 "MakeById"。
1.50 要求写一段程序,实现以下数组$arr1转换成数组$arr2:
参考代码:
1.51 如何将一个数组元素的排列顺序反转过来(例如以下代码反转以后的顺序是: array ('d', 'c', 'b', 'a'))? (选择2个答案)
<?php
$array = array ('a', 'b', 'c', 'd');
?>
A. array_flip()
B. array_reverse()
C. sort()
D. rsort()
答案:BD
1.52 $val = max('string', array(2, 5, 7), 42); $val值为
array(2,5,7)
max用法示例如下:
1.53 定义常量MYPI=3.14_________________________;
define("MYPI",3.14);
1.54 简述单引号和双引号的用法
双引号串中的内容可以被解释而且替换,而单引号串中的内容总被认为是普通字符。
1.55 Switch完整语法和注意事项
使用 Switch 语句可以避免冗长的 if..elseif..else 代码块,case只能处理整数,或者能像整数一样运算的类型,比如char,使用时case 后用'',注意 break不能少,default是为了处理一些之前没有包含到的情况,这样更为安全。
1.56 用PHP编写代码在页面输出当前的北京时间,格式为“2007-01-18 09:22:03”
date_default_timezone_set('PRC');
echo date("Y-m-d H:i:s",time());
1.57 简述GBK、GB2312、BIG5 、GB18030
GB2312支持的汉字较少,GBK是相比GB2312汉字更为丰富,包括全部中日韩汉字,GB18030相比GBK增加了一些少数名族汉字汉字库更为多样,但是常人很难用到,一般简体中文使用GBK而繁体中文使用BIG5。
1.58 计算某段字符串中某个字符出现的次数(例如: gdfgfdgd59gmkblg中g的次数)
$text = 'gdfgfdgd59gmkblg';
echo substr_count ( $text,'g');
1.59 以下语句可能存在错误,如果存在错误请指出什么错误(每个语句单独考虑)
print_r $val = 333; // error,print_r是一个函数,需加上括号,如果是print则可以
print_r($val = 333); // 正确
$a += ($b = 4) + 5; // notice,$a未定义,但可以正确运行
$foo[bar] = 'enemy'; // notice,最好bar加上引号
function x($a = "1", $b){} // 无,但给参数默认值应尽量从右向左
1.60 写出如下程序的输出结果(小米)
相等
相等
不相等
1.61 写出如下程序的输出结果
true true true true true false true false
1.62 写出如下程序的输出结果
aaaaaa
1.63 写出如下程序的输出结果
5 0 1
在PHP中,作用域是不重叠的,函数之外的是全局变量,函数内部定义的则是局部变量,二者是两个不同的变量,除非在函数内使用global显式声明使用全局变量或直接用$_GLOBALS来引用。
1.64 写出如下程序的输出结果
5 2
1.65 写出如下程序的输出结果
1 2
1.66 $arr = array('james', 'tom', 'symfony'); 请将’jack’添加到$arr数组的开头,并把jack打印出来。
array_unshift($arr,’jack’);
echo $arr[0];
1.67 $arr = array('james', 'tom', 'symfony');请将$arr数组的值用’,’分割并合并成字符串输出?
echo implode(‘,’,$arr);
1.68 $str = ‘jack,james,tom,symfony’; 请将$str用’,’分割,并把分割后的值放到$arr数组中?
$arr = explode(‘,’,$str);
1.69 $arr = array(3,7,2,1,’d’,’abc’);请将$arr按照从大到小的顺序排序,并保持其键值不变?
arsort($arr);
print_r($arr);
1.70 $mail = “gaofei@163.com”; 请将此邮箱的域(163.com)取出来并打印,看最多能写出几种方法?
echo strstr($mail,'163');
echo substr($mail,7);
echo substr($mail, strpos($mail, '@')+1);
$arr = explode("@",$mail); echo $arr[1];
1.71 PHP中的注释的写法,要列出三种?
// 注释内容 C风格的单行注释
# 注释内容 unix风格的单行注释
/* 注释内容 */ C风格的多行注释
1.72 如何在一个php函数中使用具有全局属性的变量,说出两种方式?
global $a 或者 $GLOBALS['a']
1.73 若$aa='aa';则print('aa is \'aa\''."<br/>")会输出什么?
aa is 'aa'
1.74 如何把$a = ‘123’转化成123,列出两种方式?
相关题目:字符串怎么转成整数,有几种方法?怎么实现?
1) 强制类型转换: (整型)字符串变量名;
2) 直接转换:settype(字符串变量,整型);
3) intval(字符串变量);
1.75 说说break和continue可以用在哪些语句里,并且列出二者的区别?
break 和 continue 可以用在 switch 语句中,或是循环结构中
它们的区别主要是体现在循环语句中,break 表示 跳出整个循环,不再执行,循环将终止,而continue则表示跳出本次循环,继续下一次的循环,不会终止循环。
1.76 函数中的默认参数位置如何放置?
当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧;否则,函数将不会按照预期的情况工作。
1.77 如何往一个数组后面添加一个值?列出两种方式?
$arr[ ] = $value;
array_push($arr, $value);
1.78 说出数组涉及到的常用函数。
array -- 声明一个数组
count -- 计算数组中的单元数目或对象中的属性个数
foreach -- 遍历数组
list -- 遍历数组
explode -- 将字符串转成数组
implode -- 将数组转成一个新字符串
array_merge -- 合并一个或多个数组
is_array -- 检查是否是数组
print_r -- 输出数组
sort -- 数组排序
array_keys -- 返回数组中所有的键名
array_values -- 返回数组中所有的值
key -- 从关联数组中取得键名
1.79 字符串的常用函数?
trim() -- 去除字符串首尾处的空白字符(或者其他字符)
strlen() -- 字符串长度
substr() -- 截取字符串
str_replace() -- 替换字符串函数
substr_replace() -- 对指定字符串中的部分字符串进行替换
strstr() -- 检索字符串函数
explode() -- 分割字符串函数
implode() -- 将数组合并成字符串
str_repeat() -- 重复一个字符串
addslashes(); -- 转义字符串
htmlspecialchars() -- THML实体转义
1.80 以下代码的执行后是,$result值为:(奇矩互动)
A. a
B. false
C. true
D. b
E. c
答案:B
mixed array_rand( array $input [, int $num_req ] )
从数组中随机取出一个或多个单元,它接受 input 作为输入数组和一个可选的参数 num_req,指明了你想取出多少个单元 - 如果没有指定,默认为 1。
如果你只取出一个,array_rand() 返回一个随机单元的键名,否则就返回一个包含随机键名的数组。
所以使用array_rand函数,返回结果要么是键名,有么是数组,在这个例子中,数组是索引数组,所以返回的是整型。
1.81 以下代码的执行后是,$result值为: (奇矩互动)
A. 1
B. 2
C. 3
D. 4
E. 5
答案:B
1.82 php函数名是否区分大小写? (奇矩互动)
A. 不区分
B. 区分
答案:A
函数名是大小写无关的,不过在调用函数的时候,通常使用其在定义时相同的形式。以
1.83 下代码的执行后是,$result值为:(奇矩互动)
A. null
B. true
C. false
D. 1
答案:C
is_null -- 检测变量是否为 NULL,如果变量是 null 则返回 TRUE,否则返回 FALSE。
在下列情况下一个变量被认为是 NULL:
1) 被赋值为 NULL
2) 尚未被赋值
3) 被unset()
1.84 翻转字符串中的单词,字符串仅包含大小写字母和空格,单词间使用空格分隔。如:输入"This is PHP",输出"PHP is This"(非必要请不要使用PHP自带函数) (小米)
1.85 请列举出你所知道的全局环境变量 (亿邮)
$_ENV;
$_SERVER;
$_REQUEST;
$_FILES;
$_SESSION;
$_COOKIE;
$_GET;
$_POST;
$GLOBALS;
1.86 设有这样一个数组$a=array(array(id=>0),array(id=>1),array(id=>2)......)id=>0-10000,请问你如何使用PHP判断id=>500是否在这个数组内? (亿邮)
使用in_array 函数,代码如下:
1.87 在PHP中两个数组怎么连接合并在一起 (亿邮)
使用array_merge()函数
1.88 运行以上代码后$a $b $c分别是? (卓望)
$a 为false,$b = $c = 0
1.89 写出php的public、protected、private三种访问控制模式的区别(新浪网技术部)
public:公有,任何地方都可以访问
protected:继承,只能在本类或子类中访问,在其它地方不允许访问
private:私有,只能在本类中访问,在其他地方不允许访问
相关题目:请写出PHP5权限控制修饰符
private protected public
1.90 设计模式考察:请用单态设计模式方法设计类满足如下需求
请用PHP5代码编写类实现在每次对数据库连接的访问中都只能获得唯一的一个数据库连接,具体连接数据库的详细代码忽略,请写出主要逻辑代码(新浪网技术部)
1.91 写出下列程序的输出结果(新浪网技术部)
输出结果 10
1.92 PHP5中魔术方法函数有哪几个,请举例说明各自的用法 (腾讯PHP工程师笔试题)
__sleep serialize之前被调用
__wakeup unserialize时被调用
__toString 打印一个对象时被调用
__set_state 调用var_export时被调用,用__set_state的返回值作为var_export的返回值
__construct 构造函数,实例化对象时被调用
__destruct 析构函数,当对象销毁时被调用
__call 对象调用某个方法,若存在该方法,则直接调用,若不存在,则调用__call 函数
__get 读取一个对象属性时,若属性存在,则直接返回,若不存在,则调用__get 函数
__set 设置一个对象的属性时,若属性存在,则直接赋值,若不存在,则调用__set函数
__isset 检测一个对象的属性是否存在时被调用
__unset unset一个对象的属性时被调用
__clone 克隆对象时被调用
__autoload 实例化一个对象时,如果对应的类不存在,则该方法被调用
相关题目:请写出php5的构造函数和析构函数
构造函数:__construct
析构函数:__destruct
1.93 如何使用下面的类,并解释下面什么意思?
双重md5加密
$testObject = new test();
$encryption = $testObject->Get_test("itcast");
1.94 How would you declare a class named “myclass” with no methods or properties? (Yahoo)
class myclass{};
相关题目:如何声明一个名为“myclass”的没有方法和属性的类?
1.95 How would you create an object, which is an instance of “myclass”? (Yahoo)
$obj= new myclass();
相关题目:如何实例化一个名为“myclass”的对象?
1.96 How do you access and set properties of a class from within the class?(Yahoo)
使用语句:$this->propertyName,例如:
1.97 The code below ___________ because ____________. (腾讯)
A. will work, class definitions can be split up into multiple PHP blocks.
B. will not work, class definitions must be in a single PHP block.
C. will not work, class definitions must be in a single file but can be in multiple PHP blocks.
D. will work, class definitions can be split up into multiple files and multiple PHP blocks.
答案: B
1.98 类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是____。
serialize() 和 unserialize()
1.99 在PHP中,如果派生类与父类有相同名字的函数,则派生类的函数会替换父类的函数,程序结果为
A. tmp
B. Picachu
C. disName
D. Doraemon
E. 无输出
答案:D
1.100 接口和抽象类的区别是什么?
抽象类是一种不能被实例化的类,只能作为其他类的父类来使用。抽象类是通过关键字 abstract 来声明的。
抽象类与普通类相似,都包含成员变量和成员方法,两者的区别在于,抽象类中至少要包含一个抽象方法,
抽象方法没有方法体,该方法天生就是要被子类重写的。
抽象方法的格式为:abstract function abstractMethod();
接口是通过interface关键字来声明的,接口中的成员常量和方法都是public的,方法可以不写关键字public,
接口中的方法也是没有方法体。接口中的方法也天生就是要被子类实现的。
抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承。在应用中选择抽象类还是接口要看具体实现。
子类继承抽象类使用extends,子类实现接口使用implements。
1.101 类中如何定义常量、如何类中调用常量、如何在类外调用常量。
类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。定义常量使用关键字const,例如:const PI = 3.1415326;
无论是类内还是类外,常量的访问和变量是不一样的,常量不需要实例化对象,
访问常量的格式都是类名加作用域操作符号(双冒号)来调用,即:类名:: 类常量名。
1.102 autoload()函数是如何运作的?
使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。
当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。
这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。
1.103 哪种OOP设置模式能让类在整个脚本里只实例化一次?(奇矩互动)
A. MVC
B. 代理模式
C. 状态模式
D. 抽象工厂模式
E. 单件模式
答案:E
1.104 借助继承,我们可以创建其他类的派生类。在PHP中,子类最多可以继承几个父类?(奇矩互动)
A. 1个
B. 2个
C. 取决于系统资源
D. 3个
E. 想要几个有几个
答案:A
1.105 执行以下代码,输出结果是(奇矩互动)
A. a
B. 一个错误警告
C. 一个致命性的报错
答案:C 因为类a是抽象类,不能被实例化
1.106 执行以下代码,输出结果是
A. echo class a something echo class b something
B. echo class b something echo class a something
C. echo class a something
D. echo class b something
答案:D
类b继承自类a,两个类都定义了构造函数,由于二者名字相同,所以子类中的构造函数覆盖了父类的构造函数,要想子类对象实例化时也执行父类的构造函数,需要在子类构造函数中使用parent::__construct()来显示调用父类构造函数。
1.107 请定义一个名为MyClass的类,这个类只有一个静态方法justDoIt。(卓望)
1.108 只有该类才能访问该类的私有变量吗?(卓望)
是的
1.109 写出你知道的几种设计模式,并用php代码实现其中一种。(卓望)
单例模式,工厂模式
单例模式 实现代码 见 第二题
1.110 写出一个能创建多级目录的PHP函数(新浪网技术部)
1.111 写出smarty模板的特点(新浪网技术部)
速度快,编译型,缓存技术,插件机制,强大的表现逻辑
1.112 打开php.ini中的safe_mode,会影响哪些函数?至少说出6个。(新浪)
safe_mode,php安全模式,它提供一个基本安全的共享环境,在一个有多个用户账户存在的php开发的web服务器上。当安全模式打开的时候,一些函数将被完全的禁止,而另一些函数的功能将会受到限制,如:chdir, move_uploaded_file,chgrp,parse_ini_file, chown, rmdir, copy, rename, fopen, require,mkdir, unlink等。
注意,在php5.3以上版本,safe_mode被弃用,在php5.4以上版本,则将此特性完全去除了。
1.113 抓取远程图片到本地,你会用什么函数? (51.com笔试题)
1.114 file_get_contents 或者 curl PHP的垃圾收集机制是怎样的(腾讯)
PHP 可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(reference counting)这种单纯的垃圾回收(garbage collection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为 NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。
1.115 请写一段PHP代码,确保多个进程同时写入同一个文件成功(腾讯)
核心思路:加锁
1.116 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名,例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php (新浪)
参考方案1:
参考方案2:
相关题目:使用五种以上方式获取一个文件的扩展名,要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数,比如 get_ext1($file_name), get_ext2($file_name)
1.117 写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。(新浪)
1.118 简述论坛中无限分类的实现原理。(新浪)
创建类别表如下:
CREATE TABLE category(
cat_id smallint unsigned not null auto_increment primary key comment '类别ID',
cat_name VARCHAR(30) NOT NULL DEFAULT '' COMMENT '类别名称',
parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '类别父ID'
)engine=MyISAM charset=utf8;
编写一个函数,递归遍历,实现无限分类
1.119 写一个函数,算出两个文件的相对路径,如 $a = '/a/b/c/d/e.php'; $b = '/a/b/12/34/c.php';计算出 $b 相对于 $a 的相对路径应该是 ../../c/d (新浪)
1.120 mysql_fetch_row() 和 mysql_fetch_array() 有什么分别?
mysql_fetch_row() 把数据库的一列储存在一个以零为基数的数组中,第一栏在数组的索引 0,第二栏在索引 1,依此类推。
mysql_fetch_assoc() 把数据库的一列储存在一个关联数组中,数组的索引就是字段名称,例如我的数据库查询送回“first_name”、“last_name”、 “email”三个字段,数组的索引便是“first_name”、“last_name”和“email”。mysql_fetch_array() 可以同时送回 mysql_fetch_row() 和 mysql_fetch_assoc() 的值。
1.121 有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?
方法1(对于PHP5及更高版本):
$readcontents = fopen("http://www.phpres.com/index.html", "rb");
$contents = stream_get_contents($readcontents);
fclose($readcontents);
echo $contents;
方法2:
echo file_get_contents("http://www.phpres.com/index.html");
1.122 谈谈对mvc的认识
由模型(model),视图(view),控制器(controller)完成的应用程序,model层负责提供数据,和数据库有关的操作都交给模型层来处理,view层则提供交互的界面,并输出数据,而controller层则负责接收请求,并分发给相应的model来处理,然后调用view层来显示。
1.123 What does the GD library do? (Yahoo)
GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。自从 PHP 4.3.0 版本后 GD 便内建在 PHP 系统中。
1.124 What function can you use to open a file for reading and writing? (Yahoo)
A. fget();
B. file_open();
C. fopen();
D. open_file();
答案:C
fget() 这不是一个 PHP 函数,会引致执行错误。
file_open() 这不是一个 PHP 函数,会引致执行错误。
fopen()这是正确答案,fopen() 可以用来开启档案以便读写。
open_file() 这不是一个 PHP 函数,会引致执行错误。
1.125 Smarty的原理
smarty是一个模板引擎,使用smarty主要是为了实现逻辑和外在内容的分离,如果不使用模板的话,通常的做法就是php代码和html代码混编。使用了模板之后,则可以将业务逻辑都放到php文件中,而负责显示内容的模板则放到html文件中。Smarty在执行display方法的时候,读取模板文件,并进行数据替换,生成编译文件,之后每次访问都会直接访问编译文件,读取编译文件省去了读取模板文件,和字符串替换的时间,所以可以更快,编译文件里时间戳记录模板文件修改时间,如果模板被修改过就可以检测到,然后重新编译(编译是把静态内容保存起来,动态内容根据传入的参数不同而不同)。 如果启用了缓存,则会根据编译文件生成缓存文件,在访问的时候如果有缓存文件并且缓存文件没有过期,则直接访问缓存文件。
相关题目1:能够使HTML和PHP分离开使用的模板
smarty,phplib等
相关题目2:您是否用过模板引擎? 如果有您用的模板引擎的名字是?
Smarty
1.126 PHP如何实现页面跳转
方法一:php函数跳转,缺点,header头之前不能有输出,跳转后的程序继续执行,可用exit中断执行后面的程序。
header("Location: 网址"); //直接跳转
header("refresh:3;url=http://axgle.za.net"); //三秒后跳转
方法二:利用meta
echo "<meta http-equiv=refresh content='0; url=网址'>";
1.127 PHP可以和sql server/oracle等数据库连接吗?
可以
1.128 使用哪些工具进行版本控制?
SVN 或者 CVS
相关题目:您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?
TortoiseSVN-1.2.6
1.129 写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉):
过滤javascript脚本参考:
1.130 Given a line of text $string, how would you write a regular expression to strip all the HTML tags from it?(Yahoo)
方案一,使用PHP 内建函数 strip_tags() 除去 HTML 标签
方案二,自定义函数,如下:
1.131 请写一个函数验证电子邮件的格式是否正确(要求使用正则)(新浪)
preg_match('/^[\w\-\.]+@[\w\-]+(\.\w+)+$/', $email);
相关题目:请用正则表达式写一个函数,验证电子邮件的格式是否正确。 (鑫众人云)
1.132 请对POSIX风格和兼容Perl风格两种正则表达式的主要函数进行类比说明 (腾讯)
主要区别有以下三种:
1) preg_replace()里面的正则可以写成型如:"/.xxx/"而ereg_replace()里面的正则需写成型如"xxx"
2) preg_replace()能操作数组,而ereg_replace()不可以
3) 在逆向引用用preg_replace()可使用0-99个,而ereg_replace()最多为9个
使用 Perl 兼容正则表达式语法的 preg_match() 函数通常是比 ereg() 更快的替代方案。
1.133 请写出并说明如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数?(腾讯)
首先进入php安装目录
php -f d:/wamp/www/1.php 其中-f参数指定要执行的php文件
php -r phpinfo(); 其中-r表示直接执行php代码,无需写开始结束标记
1.134 使用正则表达式提取一段标识语言(html或xml)代码段中指定标签的指定属性值(需考虑属性值对不规则的情况,如大小写不敏感,属性名值与等号间有空格等)。此处假设需提取test标签的attr属性值,请自行构建包含该标签的串 (腾讯)
编写如下函数:
function getAttrValue($str, $tagName, $attrName){
$pattern1 = "/<" . $tagName . "(\\s+\\w+\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)
(\\2))*\\s+" . $attrName . "\\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\5)
(\\s+\\w+\\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\9))*\\s*>/i";
$arr = array();
$re = preg_match($pattern1, $str, $arr);
if($re){
echo "<br />\$arr[6]={$arr[6]}";
}
else{
echo "<br />没找到。";
}
}
测试:
$str1 = "<test attr='ddd'>";
getAttrValue($str1,"test","attr"); //找test标签中attr属性的值,结果为ddd
$str2 = "<test2 attr='ddd' attr2='ddd2' t1=\"t1 value\" t2 = 't2 value'>";
getAttrValue($str2,"test2","t1"); //找test2标签中t1属性的值,结果为t1 value
1.135 What does the following code do? Explain what's going on there. $date='08/26/2003'; print ereg_replace(“([0-9]+)/([0-9]+)/([0-9]+)”,\\2/\\1/\\3,$date); (Yahoo)
这是把一个日期从 MM/DD/YYYY 的格式转为 DD/MM/YYYY 格式。
输出26/08/2003
1.136 What function would you use to redirect the browser to a new page?(Yahoo)
A. redir()
B. header()
C. location()
D. redirect()
答案:B
redir() 这不是一个 PHP 函数,会引致执行错误。
header() 这个是正确答案,header()函数发送头信息,可以用来使浏览器转向到另一个页面,例如:header("Location: http://www.search-this.com/")。
location() 这不是一个 PHP 函数,会引致执行错误。
redirect() 这不是一个 PHP 函数,会引致执行错误。
1.137 When turned on ____________ will _________ your script with different variables from HTML forms and cookies. (腾讯)
A. show_errors, enable
B. show_errors, show
C. register_globals, enhance
D. register_globals, inject
答案:C
1.138 一个函数的参数不能是对变量的引用,除非在php.ini中把____设为on。
allow_call_time_pass_reference
是否启用在函数调用时强制参数被按照引用传递
1.139 在 HTML 语言中,页面头部的 meta 标记可以用来输出文件的编码格式,以下是一个标准的 meta 语句<META http-equiv='Content-Type' content='text/html; charset=gbk'>,请使用 PHP 语言写一个函数,把一个标准 HTML 页面中的类似 meta 标记中的 charset 部分值改为 big5。(新浪)
请注意:
4) 需要处理完整的 html 页面,即不光此 meta 语句
(2) 忽略大小写
11. ' 和 " 在此处是可以互换的
12. 'Content-Type' 两侧的引号是可以忽略的,但 'text/html; charset=gbk' 两侧的不行
13. 注意处理多余空格
编写正则表达式如下:
$reg1 = "/(<meta\\s*http-equiv\\s*=\\s*(['\"]?)Content-Type(\\2)\\s*content\\s*=\\s*(['\"])
text\/html;charset=)(UTF-8)(\\4)(\\s*\/?>)/i";
1.140 PHP中如何判断一个字符串是否是合法的日期模式:2007-03-13 13:13:13 。要求代码不超过5行。 (酷讯)
1.141 PHP中,如何获得一个数组的键值?(酷讯 )
使用 key() 可以获得数组中当前元素的键名,使用current()则可以返回当前元素的值。使用array_keys()则可以得到数组中所有的键名。使用foreach结构foreach($arr as $key=>$value) 可以通过$key 和 $value分别获取键名和值。
1.142 如果模板是用smarty模板。怎样用section语句来显示一个名为$data的组。比如:
$data = array(
0 => array('id' => 8, 'name' => 'name1'),
1 => array('id' => 10, 'name' => 'name2'),
2 => array('id' => 15, 'name' => 'name3')
);
写出在模板页的代码?若用foreach语句又要怎样显示呢?
用section语句:
<{section name=test loop=$data start=0 step=1}>
id:<{$data[test].id}><br />
name:<{$data[test].name}><br /><br />
<{sectionelse}>
数组为空
<{/section}>
用foreach语句:
<{foreach from=$data item=test}>
id:<{$test.id}><br />
name:<{$test.name}><br /><br />
<{foreachelse}>
数组为空
<{/foreach}>
1.143 哪个选项会匹配下边的这个正则表达式? (/.*\*xyz\d/)
A. ******xyz
B. *****_xyz1
C. ******xyz2
D. _*xyz
答案:C
1.144 以下哪个错误无法被标准的错误控制器获取?
A. E_WARNING
B. E_USER_ERROR
C. E_PARSE
D. E_NOTICE
答案:B
1.145 以下哪种错误类型无法被自定义的错误处理器捕捉到? (奇矩互动)
A. E_WARNING
B. E_USER_ERROR
C. E_PARSE
D. E_NOTICE
答案:C
1.146 (^\s*)|(\s*$)这个正则表达式作用是:__________;
匹配以0个或多个空白符开头或者0个或多个空白符结尾的字符串
1.147 编写函数取得上一月的最后一天
1.148 在很多时候,我们可以通过apache的主配置文件来设置对test目录的访问权限控制,如http://IP/test请问如果需设置test下的一个子目录的访问控制权限,是否可以在主配置文件中修改,如果不可以应如何解决。
可以,还可以在需要控制的子目录下创建.htaccess文件,写入访问控制。
1.149 如果我的网站用的utf-8编码,为防止乱码出现,都需要注意哪些地方?
从以下几个方面考虑:
1) 数据库中库和表都用utf8编码
2) php连接mysql,指定数据库编码为utf8 mysql_query(“set names utf8”);
3) php文件指定头部编码为utf-8 header(“content-type:text/html;charset=utf-8”);
4) 网站下所有文件的编码为utf8
5) html文件指定编码为utf-8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
1.150 在url中用get传值的时候,若中文出现乱码,应该用哪个函数对中文进行编码? urlencode()
1.151 写出两种对变量加密的函数?
md5($str);
sha1($str);
1.152 如何把2009-9-2 10:30:25变成unix时间戳?
1.153 如何把一个GB2312格式的字符串装换成UTF-8格式?
1.154 如果需要原样输出用户输入的内容,在数据入库前,要用哪个函数处理?
htmlspecialchars 或者 htmlentities
1.155 写出五种以上你使用过的PHP的扩展的名称(提示:常用的PHP扩展)
mb_sring、iconv、curl、GD、XML、socket、MySQL、PDO 等
1.156 了解MVC模式吗?请写出三种以上目前PHP流行的MVC框架名称(不区分大小写)
FleaPHP、Zend Framework、CakePHP、Symfony、ThinkPHP、YII、CodeIgniter等
1.157 php中WEB上传文件的原理是什么,如何限制上传文件的大小?
上传文件的表单使用post方式,并且要在form中添加enctype='multipart/form-data'。
一般可以加上隐藏域:<input type=hidden name='MAX_FILE_SIZE' value=dddddd>,位置在file域前面。value的值是上传文件的客户端字节限制。可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。
使用file文件域来选择要上传的文件,当点击提交按钮之后,文件会被上传到服务器中的临时目录,在脚本运行结束时会被销毁,所以应该在脚本结束之前,将其移动到服务器上的某个目录下,可以通过函数move_uploaded_file()来移动临时文件,要获取临时文件的信息,使用$_FILES。
限制上传文件大小的因素有:
1) 客户端的隐藏域MAX_FILE_SIZE的数值(可以被绕开)。
2) 服务器端的upload_max_filesize,post_max_size和memory_limit。这几项不能够用脚本来设置。
3) 自定义文件大小限制逻辑。即使服务器的限制是能自己决定,也会有需要个别考虑的情况。所以这个限制方式经常是必要的。
1.158 简述UBB code 的实现原理。(YG)
UBB代码是HTML的一个变种,通过程序自定义我们的标签,比如“[a]PHP中UBB的使用[/a]”这样的标签,其实质就是查找[a][/a]标签,将其替换成<a></a>的标准html,说白了,就是将标准的html标记通过技术手段使其简化,其输出出来的结果还是标准的 html。
明白了ubb的原理,那么再制作一个简单的 ubb 编辑器就不难了,和 fck 之类的编辑器比较起来,ubb 代码最大的优点就是代码简单,功能很少,简单的ubb只需要一个文件,而且 ubb 标签可以自己来定义,更改起来很方便,在 php 中就是利用替换函数就可以将 html 进行标签化,输出时进行标签的转化。
1.159 怎么把文件保存到指定目录?怎么避免上传文件重名问题?
可以自己设置上传文件的保存目录,与文件名拼凑形成一个文件路径,使用move_uploaded_file(),就可以完成将文件保存到指定目录。可以通过上传的文件名获取到文件后缀,然后使用时间戳+随机数+文件后缀的方式为文件重新命名,这样就避免了重名。
1.160 _____函数能返回脚本里的任意行中调用的函数的名称。该函数同时还经常被用在调试
中,用来判断错误是如何发生的。 (奇矩互动)
debug_print_backtrace()
1.161 在Smarty模板语法中怎么能遍历数组$a = array(array('id' => 0),array('id' =>
1),array('id' => 2),……) id=>0-10000 ,怎么判断当id=>500,让输出的值在HTML里变为红色? (亿邮)
设数组分配过来的数组名为 $ids
{section name = temp loop = $ids}
{if $ids[temp].id == 500}
<span style = ‘color: #f00;’>{$ids[temp].id}</span>
{esle}
{$ids[temp].id}
{/if}
{/section}
1.162 在Smarty模板语法中如何获取当前时间,并且使用Y-m-d H:i:s的格式输出?(亿邮)
使用{$smarty.now} 来获取当前时间,得到的是unix系统时间戳
使用变量调节器进行格式化,如下:
{$smarty.now | date_format : “%Y-%m-%d %H:%M:%S” }
1.163 在Smarty模板语法中如何获取php的全局环境变量 (亿邮)
$smarty.get.变量 #显示通过get方式传过来的指定变量的值
$smarty.post.变量 #显示通过post方式传过来的指定变量的值
$smarty.cookies.变量 #显示通过cookie中指定变量的值
$smarty.server.SERVER_NAME #显示server变量值,$_SERVER系列变量
$smarty.env.PATH #显示系统环境变量值,$_ENV系列变量
$smarty.session.变量 #显示session中指定变量的值
$smarty.request.变量 #显示通过post、get、cookie中指定变量的值
1.164 在Smarty模板中如何用自定义函数 (亿邮)
使用模板分隔符包含,传递参数则使用HTML属性的方式,例如:
{html_image file="pumpkin.jpg"}
1.165 列举出你所知道的php系统函数库例如,数学函数库 (亿邮)
mysql,gd,pdo,XML,zip,filesystem,mail等
1.166 假如让你来写一个函数实现Utf-8转gb2312,那么函数的名称应该怎么命名?(亿邮)
utf8_to_gb2312 或者 utf8togb2312
1.167 请描述如下URL重写规则的用意。(卓望)
<IfModulemod_rewrite.c>
RewriteEngineon
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteBase/
RewriteRule./index.php[L]
</IfModule>
如果REQUEST_FILENAME文件存在,就直接访问文件,不进行下面的rewrite规则,如果REQUEST_FILENAME目录存在,就直接访问目录,不进行下面的rewrite规则,RewriteRule./index.php[L]的意思是把所有的请求都给index.php处理。
1.168 Warning:Cannot modify header information-headers already sent by (output started at
D:\src\init.php:7) in D:\src\init.php on line10通常什么情况下php会报该警告信息?(卓望)
一般是在header、set_cookie以及session_start函数前面有输出(包括空格)的情况下,会报该警告信息
1.169 禁用COOKIE 后 SEESION 还能用吗? (51.com笔试题)
可以,COOKIE和SESSION都是用来实现会话机制的,由于http协议是无状态的,所以要想跟踪一个用户在同一个网站之间不同页面的 状态,需要有这么一个机制----会话机制。
COOKIE:将会话信息的保存到浏览器端。
SESSION:将会话信息保存到服务器端。
SESSION默认情况下是基于COOKIE的,对于SESSION来说,每生成一个SESSIONID,都会将其发送到浏览器端,让后将其保存到cookie当中。
如果禁用了COOKIE,则基于COOKIE的SESSION不好使了,我们可以使用get,传递SID,或者直接开启透明的SID(此时需要关闭基于cookie的SESSION配置项)。
相关题目:SESSION与COOKIE的区别?
COOKIE保存在客户端,而SESSION则保存服务器端。
从安全性的角度来讲,SESSION的安全性要高。
从保存内容的类型的角度来讲,COOKIE只保存字符串(及能够自动转换成字符串),而session则可以保存所有的数据类型。
从保存内容的大小的角度来讲,COOKIE保存的内容是有限制的,比较小,而SESSION基本上没有这个限制。
从性能的角度来讲,用SESSION的话,对服务器的压力会更大一些。
1.170 请使用socket相关函数(非curl)实现如下功能:构造一个post请求,发送到指定http server的指定端口的指定请求路径(如http://www.example.com:8080/test)。请求中包含以下变量:
用户名(username):温柔一刀
密码(pwd):&123=321&321=123&
个人简介(intro):Hello world!
且该http server需要以下cookie来进行简单的用户动作跟踪:
cur_query:you&me
last_tm:...(上次请求的unix时间戳,定为当前请求时间前10分钟)
cur_tm:...(当前请求的unix时间戳)
设置超时为10秒,发出请求后,将http server的响应内容输出 (腾讯)
参考代码:
if($fp = fsockopen('localhost', '80')) {
//连接成功
$request_data = "POST /2.php HTTP/1.1" . "\r\n"; //请求行
$request_data .= "Host: localhost" . "\r\n"; //host头信息
$request_data .= "User-Agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" . "\r\n";//host头信息
$request_content = "username=".urlencode('温柔一刀')."&pwd=".urlencode('&123=321&321=123&')."&intro=".urlencode("Hello world!");
$request_data .= "Content-Type: application/x-www-form-urlencoded" . "\r\n";
$request_data .= "Content-Length: " . strlen($request_content) . "\r\n";
$cur_query = urlencode("you&me");
$last_tm = time()-10*60;
$cur_tm = time();
$request_data .= "Cookie:cur_query=$cur_query;last_tm=$last_tm;cur_tm=$cur_tm" . "\r\n";
$request_data .= "\r\n"; //请求头信息结束时的空行
//请求主体数据部分
$request_data .= $request_content;
//利用建立好的通道,将数据发送过去
fwrite($fp, $request_data); //写入数据(发送数据)
//读取数据
while(!feof($fp)) { //判断是否没有到文件末尾
$resp_data = fgets($fp);
echo $resp_data . '<br>';
}
}
1.171 在HTTP 1.0中,状态码401的含义是________;如果返回“找不到文件”的提示,则可用 header 函数,其语句为__________;
未经授权:访问由于凭据无效被拒绝
header("HTTP/1.0 404 Not Found")
1.172 如何修改SESSION的生存时间?
要注意这里的生存时间指的是什么? 由于session默认是基于cookie的,也就是说使用session会话技术,首先是将session数据保存到服务器端,其次会将sessionID 保存到浏览器端,保存在服务器端的session文件生命周期由php.ini中的session.gc_maxlifetime、gc_probability和gc_divisor来决定,而保存在客户端的sessionID由客户端cookie来决定,默认其生存周期直到浏览器关闭,它也可以通过php.ini中的设置session.cookie_lifetime 来控制,二者共同来决定session 的生存时间,二者中的其中任意一个失效了,就会造成session失效,要根据自己的需求来决定是要从哪方面来修改其生存时间。
参考1:将php.ini中的session.gc_maxlifetime设置为9999重启apache
参考2:
$savePath = "./session_save_dir/";
$lifeTime = 小时 * 秒;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
参考3:
session_start();
$lifeTime = 24 * 3600; // 保存一天
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
1.173 How can you get round the stateless nature of HTTP using PHP? (Yahoo)
最主要的两个选择是SESSION和COOKIE。使用SESSION的方法是在每一页的开始加session_start(),然后利用$_SESSION来存取 SESSION变量。至于 COOKIE你只需记着一个原则:在输出任何文字之前调用 set_cookie() 函数设置COOKIE,使用 $_COOKIE 获取COOKIE变量。
6. PHP程序中如何设置当前页面的编码为utf-8?
header(“content-type:text/html;charset=utf-8”);
1.174 如何设置一个cookie的名字为username,值为jack,并且让此cookie一周后失效?
setcookie(‘username’,’jack’,time()+7*24*3600);
1.175 一个浏览器最多可以产生多少个cookie,每个cookie文件最大不能超过多少?
cookie的总数量没有限制,但是每个域名的COOKIE数量和每个COOKIE的大小是有限制的!
IE每个域名限制为50个。
Firefox每个域名cookie限制为50个。
Opera每个域名cookie限制为30个。
Safari/webkit貌似没有cookie限制。但是假如cookie很多,则会使header大小超过服务器的处理的限制,会导致错误发生。
不同浏览器间每个cookie文件大小也不同
Firefox和safari是4097个字节,包括名(name)、值(value)和等号。
Opera是4096个字节,包括:名(name)、值(value)和等号。
IE是4095个字节,包括:名(name)、值(value)和等号。
1.176 设置或读取session之前,需要做什么?
session_start()前面不能有任何输出,包括空行。
相关题目:使用setcookie函数前,需要注意什么?
前面不能有任何输出,包括空行。
1.177 请描述出七层网络模型的名称,由下到上(可以使用中文描述)
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
11. 说说下面这些这些协议的全称和中文解释(提示:都是工作在应用层)SMTP、POP3、HTTP、FTP、DNS (小米)
SMTP (Simple Mail Transfer Protocol) 简单邮件传输协议
POP3 (Post Office Protocol 3) 邮局协议第3版
HTTP (Hypertext Transfer Protocol) 超文本传输协议
FTP (File Transfer Protocol)文件传输协议
DNS (Domain Name System and Domain Name Service protocol) 域名系统(服务)协议
1.178 COOKIE、SESSION的联系和区别,多台web服务器如何共享 SESSION?
COOKIE和SESSION都是用于会话机制,COOKIE保存在客户端,而SESSION则保存在服务器端。在默认情况下,SESSION机制是基于COOKIE的,每生成一个SESSIONID,都会将其发送到浏览器端,让后将其保存到COOKIE当中,在下次请求的时候,由浏览器携带这个COOKIE。
要想多台web服务器共享SESSION,可以利用MySQL数据库存储SESSION数据。
1.179 HTTP/1.0中,状态码200 301 304 403 404 500的含义 (小米)
200 OK 服务器成功处理了请求
301 Moved Permanently(重定向)请求的URL已移走
304 Not Modified(未修改)客户的缓存资源是最新的, 要客户端使用缓存
403 Forbidden(禁止)请求被服务器拒绝了
404 Not Found 未找到资源
Internal Server Error(内部服务器错误) 服务器遇到一个错误,使其无法为请求提供服务
1.180 请描述PHP(或其他语言)Session的运行机制,大型网站中Session方面应注意什么?(小米)
session机制是一种服务器端的机制,它将数据保存到服务器端。
当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识, 称为 sessionid,如果已包含一个sessionid则说明以前已经为此客户端创建过session,服务器就按照sessionid把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含sessionid,则为此客户端创建一个session并且生成一个与此session相关联的sessionid,sessionid的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 sessionid将被在本次响应中返回给客户端以cookie的形式保存。
session在大访问量网站上确实影响系统性能,影响性能的原因之一由文件系统设计造成,在同一个目录下超过10000个文件时,文件的定位将非常耗时,另外就是小文件的效率问题,一般我们的session数据都不会太大(1~2K),如果有大量这样1~2K的文件在磁盘上,IO效率肯定会很差,我们可以采用改写session存储机制,比如存放到数据库中。
1.181 在子网掩码为255.255.255.248的局域网中能够同时使用的IP有多少个?(亿邮)
6个,255.255.255.248换算成二进制就是11111111.11111111.11111111.11111000
后面的三位用来表示主机,前面的29位用来表示网络。
三位表示主机,就是可以用来表示2^3=8个,再减去网络地址和广播地址,就是6个了。
1.182 简述TCP协议的三次握手过程。 (亿邮)
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
1.183 你会用哪个函数设置当前内容的Content-Type? (卓望)
header函数
1.184 通过页面输入用户名abc和密码123登录到www.10086.cn,请写出该次请求的HTTP协议报文(包括请求行、消息报头、请求正文)。 (卓望)
POST www.10086.cn HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://localhost/a.html
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; KB974487)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost
Content-Length: 25
Connection: Keep-Alive
username=abc&password=123
---恢复内容结束---
1.1 PHP中判断变量的相关函数
1.2 strlen( )与mb_strlen( )的作用分别是什么(新浪网技术部)
strlen 和mb_strlen 都是用于获取字符串长度的,其中strlen只针对单字节编码字符,也就是说它计算的是字符串的总字节数,如果是多字节编码,如gbk和utf8,使用strlen得到的不是字符串的个数,而是该字符串的总字节数,可以使用mb_strlen获取其字符个数,使用mb_strlen要注意两点,一是要开启mbstring扩展,二是要指定字符集。
示例:
相关题目1:实现中文字串截取无乱码的方法。
方法一,使用php内置函数 mb_substr()
方法二,自定义函数,以utf8为例,如下:
代码分析:
//u 表示按unicode(utf-8)匹配(主要针对多字节比如汉字)
join — 别名 implode()表示将一个一维数组的值转化为字符串
array_slice() 函数在数组中根据条件取出一段值,并返回
相关题目2:如何求解字符串“中国2北333京”的字符数(一个中文一个字符),并找到第四个字符“北”
方法一,使用php内置函数,确保配置中已打开mbstring扩展
方法二,自定义函数实现求其长度,截取使用上面定义的substr_utf8
代码分析:
1.3 下列哪个函数是用正则表达式将字符串分割到数组中( )
A. split
B. implode
C. explode
D. join
答案:A
1.4 写出下列程序的输出结果(新浪网技术部)
答案:1
1.5 注意:PHP的文件名不能有中文
1.6 写出下列几个预定义全局变量的作用(新浪网技术部)
$_SERVER['DOCUMENT_ROOT'] //当前运行脚本所在的文档根目录$_SERVER['HTTP_HOST '] //当前请求的 Host: 头部的内容
$_SERVER['REMOTE_ADDR'] //正在浏览当前页面用户的 IP 地址
$_SERVER['HTTP_REFERER'] //链接到当前页面的前一页面的 URL 地址
$_SERVER['SERVER_NAME'] //当前运行脚本所在服务器主机的名称
$_FILES //包含有所有上传的文件信息,他是预定义超级全局数组中唯一的二维数组。
S_FILES['userfile']['name'] //客户端机器文件的原名称
$_FILES['userfile']['type'] //文件MIME 类型,如果浏览器提供此信息的话,如“image/gif”。
$_FILES['userfile']['size'] //已上传文件的大小,单位为字节
$_FILES['userfile']['tmp_name'] //文件被上传后在服务端储存的临时文件名
$_FILES['userfile']['error'] //和该文件上传相关的错误代码
1.7 include和require都能把另外一个文件包含到当前文件中,他们有什么区别?Include和include_once又有什么区别?(新浪网技术部)
二者区别只有一个,那就是对包含文件的需求程度,include就是包含,如果被包含的文件不存在的话,那么则会提示一个错误,但是程序会继续执行下去。
而require意思是需要,如果被包含文件不存在或者无法打开的时候,则会提示错误,并且会终止程序的执行。
这两种结构除了在如何处理失败之外完全一样。
once的意思是一次,那么include_once和require_once表示只包含一次,避免重复包含。
相关题目1:What is the difference between include & include_once? include & require?(Yahoo)
相关题目2:语句 include 和 require 都能把另外一个文件包含到当前文件中,它们的区别是____;为了避免多次包含同一文件,可以用语句____来代替它们。
在如何处理失败时,include() 产生一个警告而 require() 则导致一个致命错误;require_once()/include_once()
相关题目3:What functions can you use to add library code to the currently running script?(Yahoo)
include、require
1.8 用最少的代码写一个求3值最大值的函数. (51.com笔试题)
1.9 简述POST 和GET传输的最大容量分别是多少? (51.com笔试题)
POST 根据你php.ini文件配置(默认是8M)
GET的话大小限制在2KB
相关题目:表单中 get与post提交方法的区别?
get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息。
1.10 有三个php文件位于同一目录下,内容如下所示,使用浏览器访问 c.php,请问是否存在问题。如果存在问题,请指出修正方法并写出浏览器查看效果,如果不存在问题,请写出浏览器查看效果(酷讯PHP工程师笔试题)
A.php:-------
<?php function fa() { echo "in Function A\n"; }?>
B.php:-------
<?php include 'a.php'; ?>
<?php function fb() { fa(); echo "in Function B\n"; } ?>
C.php:-------
<?php include 'a.php'; ?>
<?php include 'b.php'; ?>
<?php fa(); fb(); ?>
答案:存在问题,a.php 被包含了两次,导致fa()函数重复定义,使用include_once 避免重复包含。(此处应首先想到考点可能就是include和include_once)(总结:函数不能重复定义)
1.11 echo(),print(),print_r()的区别?(新浪)
echo 是一个语言结构,输出一个或多个字符串;
print() 实际上不是一个函数(它是一个语言结构),因此你可以不必使用圆括号来括起它的参数列表,它输出一个字符串;
print_r () 是一个函数,打印变量的信息,基本类型,数组,对象。
注意 ,是echo本身支持的一种语法,而. 则是字符串连接操作符,使用 , 的效率要高一些。
相关题目:What is the difference between "print()" and "echo( )"? (腾讯)
answer: print is a function,echo is a language construct
1.12 用PHP打印出前一天的时间格式是2006-5-10 22:21:21。
相关题目:求两个日期的差数,例如2009-3-1 ~ 2009-4-4 的日期差数
(strtotime("2009-4-4")-strtotime("2009-3-1"))/3600*24
1.13 不使用第三个变量交换两个变量的值
方案一:
方案二:
对字符进行编码,比如base64_encode,要保证编码是可逆的
1.14 请说明php中传值与传引用的区别。什么时候传值什么时候传引用?
变量默认总是传值赋值。那也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。
PHP 也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量简单引用(换言之,“成为其别名” 或者 “指向”)了原始变量。改动新的变量将影响到原始变量,反之亦然。使用引用赋值,简单地将一个 & 符号加到将要赋值的变量前(源变量)。
对象默认是传引用。
需要操作原始数据,则引用,不能影响原始数据,则值传递。
相关题目1:What would the following code print to the browser? Why?
输出 10 (调用函数的题一定要考虑是否有返回值)
相关题目2:What is the difference between a reference and a regular variable? How do you pass by reference & why would you want to?(Yahoo)
reference 传送的是变量的地址而非它的值,所以在函数中改变一个变量的值时,整个应用都见到这个变量的新值。
一个regular variable传送给函数的是它的值,当函数改变这个变量的值时,只有这个函数才见到新值,应用的其他部分仍然见到旧值。
1.15 将1234567890转换成1,234,567,890 每3位用逗号隔开的形式。(百度)
相关题目1:如何实现字符串翻转?
strrev(),不过这种方法都不能解决中文字符串翻转的问题,会出错的。
相关题目2:假设现在有一个字符串www.baidu.com如何使用PHP对它进行操作使字符串以moc.udiab.输出? (亿邮)
1.16 用PHP写出显示客户端IP与服务器IP的代码。
客户端IP:$_SERVER["REMOTE_ADDR"]
服务器端IP:$_SERVER["SERVER_ADDR"]
1.17 简述如何得到当前执行脚本路径,包括所得到参数。
获取当前执行脚本路径使用$_SERVER["SCRIPT_FILENAME"] 或 __FILE__
获取参数,使用$_SERVER["QUERY_STRING"]
__FILE__ :被称为PHP魔术常量,返回当前执行PHP脚本的完整路径和文件名,包含一个绝对路径
1.18 What is the difference between foo() & @foo()? (Yahoo)
foo() 会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。@foo() 在执行这个函式时,会隐藏所有上述的错误讯息。
很多应用程序都使用 @mysql_connect() 和 @mysql_query 来隐藏 mysql 的错误信息,这是不对的,因为错误不该被隐藏,你必须妥善处理它们,可能的话解决它们。
1.19 下面哪个选项没有将 john 添加到users 数组中? ( 百度 )
A. $users[ ] = "john";
B. array_add($users, "john"); //PHP中没有array_add这个函数
C. array_push($users, "john");
D. $users ||= "john" ;
答案:BD
1.20 检测一个变量是否有设置的函数是什么?是否为空的函数是什么?
isset 检测一个变量是否设置
empty 检测是否为空
注意二者的区别,如果 变量是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array() 以及没有任何属性的对象都将被认为是空的。
1.21 在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量______中;而链接到当前页面的的前一页面URL记录在预定义变量______中。
当前脚本名称:$_SERVER["PHP_SELF"] 或者 $_SERVER["SCRIPT_NAME"];
链接到当前页面的前一页面的 URL 地址:$_SERVER["HTTP_REFERER"]。
1.22 sort()、assort()、和 ksort() 有什么分别?它们分别在什么情况下使用?
sort(),根据数组中元素的值,以英文字母顺序排序,索引键会由 0 到 n-1 重新编号。主要是当数组索引键的值无关紧要时用来把数组排序。
assort(),PHP 没有 assort() 函式,所以可能是 asort() 的笔误。
asort(),对数组进行排序,数组的索引保持和单元的关联。主要用于对那些单元顺序很重要的结合数组进行排序。
ksort(),根据数组中索引键的值,以英文字母顺序排序,特别适合用于希望把索引键排序的关联数组。
1.23 在PHP中error_reporting这个函数有什么作用?
打开或者关闭错误报告,如:
error_reporting(0);
error_reporting(E_ALL & ~ E_NOTICE);
error_reporting(E_ALL);
相关题目:error_reporting(2047) 什么作用?(新浪)
2047 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256 + 512 + 1024
其中,1对应E_ERROR,2对应E_WARNING,4对应E_PARSE,8对应E_NOTICE,16对应E_CORE_ERROR,32对应E_CORE_WARNING,64对应E_COMPILE_ERROR, 128对应E_COMPILE_WARNING,256对应E_USER_ERROR,512对应E_USER_WARNING,1024对应E_USER_NOTICE。error_reporting(2047)意味着上述错误都会显示出来。
1.24 写出以下程序的输出结果 (CBSI)
hotdogok
相关题目:什么是可变变量?
获取一个普通变量的值作为这个可变变量的变量名。
1.25 常量如何定义? 如何检测一个常量是否被定义?
定义常量:define() ,
检测常量是否定义:defined(),如
define("TEST","happy new year!");
if( defined("TEST")){
echo TEST;
}
1.26 执行程序段<?php echo 8%(-3) ?>将输出
%为取模运算,输出0
$a % $b 其结果的正负取决于 $a 的符号。
echo ((-8)%3)."<br />"; //输出 -2
echo (8%(-3))."<br />"; //输出 2
1.27 数组函数 arsort 的作用是____;语句 error_reporting(2047)的作用是____。
arsort:对数组进行逆向排序并保持索引关系
error_reporting(2047)的作用 report All errors and warnings,见21题中相关题目。
1.28 以Apache模块的方式安装PHP,在文件http.conf中首先要用语句____动态装载PHP模块,然后再用语句____使得Apache把所有扩展名为php的文件都作为PHP脚本处理。
LoadModule php5_module "c:/php/php5apache2.dll";
AddType application/x-httpd-php .php
1.29 一个函数的参数不能是对变量的引用,除非在php.ini中把____设为on.
allow_call_time_pass_reference :是否启用在函数调用时强制参数被按照引用传递,默认关闭。
1.30 在PHP中,heredoc是一种特殊的字符串,它的结束标志必须____
顶格写,并且不能包含任何其它字符除";",如:
$str = <<<SHOW
my name is Jiang Qihui!
SHOW;
1.31 echo count("abc"); 输出什么?(新浪?)
输出1
count :计算数组中的单元数目或对象中的属性个数,通常是一个 array,任何其它类型都只有一个单元。
对于对象,如果安装了 SPL,可以通过实现 Countable 接口来调用 count()。该接口只有一个方法 count(),此方法返回 count() 函数的返回值。
如果 var 不是数组类型或者实现了 Countable 接口的对象,将返回 1,有一个例外,如果 var 是 NULL 则结果是 0。
相关题目:What will be the output of the following PHP code: (腾讯)
<?php
echo count(strlen("http://php.net"));
?>
answer: 1
1.32 写个函数用来对二维数组排序(新浪)
1.33 写5个不同的自己的函数,来获取一个全路径的文件的扩展名,允许封装php库中已有的函数。(新浪)
1.34 PHP的意思,它能干些什么?
PHP( Hypertext Preprocessor,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。
PHP 能做任何事。PHP 主要是用于服务端的脚本程序,因此可以用 PHP 来完成任何其它的 CGI 程序能够完成的工作,例如收集表单数据,生成动态网页,或者发送/接收 Cookies。但 PHP 的功能远不局限于此。
PHP 脚本主要用于以下三个领域:
1) 服务端脚本。这是 PHP 最传统,也是最主要的目标领域。
2) 命令行脚本。可以编写一段 PHP 脚本,并且不需要任何服务器或者浏览器来运行它。通过这种方式,仅仅只需要 PHP 解析器来执行。
3) 编写桌面应用程序。
1.35 Name a few ways to output (print) a block of HTML code in PHP?(Yahoo)
你可以使用 PHP 中任何一种输出语句,包括echo、print、printf,大部分人都使用如下例的 echo:
echo "My string $variable";
你也可以使用这种方法:
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;
1.36 写出以下程序的输出结果 (CBSI)
输出结果为 4
1.37 $arr = array('james', 'tom', 'symfony'); 请打印出第一个元素的值,并请将数组的值用','号分隔并合并成字串输出。
打印第一个元素:echo $arr[0];
以’,’合并成字符串:echo implode(',',$arr);
1.38 $a = 'abcdef'; 请取出$a的值并打印出第一个字母
echo $a{0} 或 echo $a[0]
相关题目:$string="abcdefg",那么$string{4}的值是? (卓望)
值是 e
1.39 What does === do? What's an example of something that will give true for '==', but not '==='? (Yahoo)
=== 表示全等,是指的两个变量的值和类型都相等。
如 if (strpos('abc','a') == false) 和 if (strpos('abc','a') === false)
1.40 Which of the following snippets prints a representation of 42 with two decimal places? (腾讯)
A. printf("%.2d\n", 42);
B. printf("%1.2f\n", 42);
C. printf("%1.2u\n", 42);
answer:B
1.41 Given $text = 'Content-Type:text/xml'; Which of the following prints 'text/xml'? (腾讯)
A. print substr($text, strchr($text, ':'));
B. print substr($text, strchr($text, ':') + 1);
C. print substr($text, strpos($text, ':') + 1);
D. print substr($text, strpos($text, ':') + 2);
E. print substr($text, 0, strchr($text, ':'));
answer:C
1.42 What is the value of $a? (腾讯)
A. True
B. False
answer:A
1.43 What is the value of $result in the following PHP code? (腾讯)
answer: NULL
1.44 What is the best all-purpose way of comparing two strings? (腾讯)
A. Using the strpos function
B. Using the == operator
C. Using strcasecmp()
D. Using strcmp()
answer:C
1.45 运行以下程序,$a的值是多少?
hello
1.46 运行以下程序,$b的值是多少?
1
1.47 运行以下程序,$x的值是多少?
ture
1.48 将字符09转换成十进制数字。(百度)
使用intval函数,echo intval("09"),或者使用int强制类型转换。
1.49 请写一个函数,实现以下功能: 字符串"open_door" 转换成 "OpenDoor"、"make_by_id" 转换成 "MakeById"。
1.50 要求写一段程序,实现以下数组$arr1转换成数组$arr2:
参考代码:
1.51 如何将一个数组元素的排列顺序反转过来(例如以下代码反转以后的顺序是: array ('d', 'c', 'b', 'a'))? (选择2个答案)
<?php
$array = array ('a', 'b', 'c', 'd');
?>
A. array_flip()
B. array_reverse()
C. sort()
D. rsort()
答案:BD
1.52 $val = max('string', array(2, 5, 7), 42); $val值为
array(2,5,7)
max用法示例如下:
1.53 定义常量MYPI=3.14_________________________;
define("MYPI",3.14);
1.54 简述单引号和双引号的用法
双引号串中的内容可以被解释而且替换,而单引号串中的内容总被认为是普通字符。
1.55 Switch完整语法和注意事项
使用 Switch 语句可以避免冗长的 if..elseif..else 代码块,case只能处理整数,或者能像整数一样运算的类型,比如char,使用时case 后用'',注意 break不能少,default是为了处理一些之前没有包含到的情况,这样更为安全。
1.56 用PHP编写代码在页面输出当前的北京时间,格式为“2007-01-18 09:22:03”
date_default_timezone_set('PRC');
echo date("Y-m-d H:i:s",time());
1.57 简述GBK、GB2312、BIG5 、GB18030
GB2312支持的汉字较少,GBK是相比GB2312汉字更为丰富,包括全部中日韩汉字,GB18030相比GBK增加了一些少数名族汉字汉字库更为多样,但是常人很难用到,一般简体中文使用GBK而繁体中文使用BIG5。
1.58 计算某段字符串中某个字符出现的次数(例如: gdfgfdgd59gmkblg中g的次数)
$text = 'gdfgfdgd59gmkblg';
echo substr_count ( $text,'g');
1.59 以下语句可能存在错误,如果存在错误请指出什么错误(每个语句单独考虑)
print_r $val = 333; // error,print_r是一个函数,需加上括号,如果是print则可以
print_r($val = 333); // 正确
$a += ($b = 4) + 5; // notice,$a未定义,但可以正确运行
$foo[bar] = 'enemy'; // notice,最好bar加上引号
function x($a = "1", $b){} // 无,但给参数默认值应尽量从右向左
1.60 写出如下程序的输出结果(小米)
相等
相等
不相等
1.61 写出如下程序的输出结果
true true true true true false true false
1.62 写出如下程序的输出结果
aaaaaa
1.63 写出如下程序的输出结果
5 0 1
在PHP中,作用域是不重叠的,函数之外的是全局变量,函数内部定义的则是局部变量,二者是两个不同的变量,除非在函数内使用global显式声明使用全局变量或直接用$_GLOBALS来引用。
1.64 写出如下程序的输出结果
5 2
1.65 写出如下程序的输出结果
1 2
1.66 $arr = array('james', 'tom', 'symfony'); 请将’jack’添加到$arr数组的开头,并把jack打印出来。
array_unshift($arr,’jack’);
echo $arr[0];
1.67 $arr = array('james', 'tom', 'symfony');请将$arr数组的值用’,’分割并合并成字符串输出?
echo implode(‘,’,$arr);
1.68 $str = ‘jack,james,tom,symfony’; 请将$str用’,’分割,并把分割后的值放到$arr数组中?
$arr = explode(‘,’,$str);
1.69 $arr = array(3,7,2,1,’d’,’abc’);请将$arr按照从大到小的顺序排序,并保持其键值不变?
arsort($arr);
print_r($arr);
1.70 $mail = “gaofei@163.com”; 请将此邮箱的域(163.com)取出来并打印,看最多能写出几种方法?
echo strstr($mail,'163');
echo substr($mail,7);
echo substr($mail, strpos($mail, '@')+1);
$arr = explode("@",$mail); echo $arr[1];
1.71 PHP中的注释的写法,要列出三种?
// 注释内容 C风格的单行注释
# 注释内容 unix风格的单行注释
/* 注释内容 */ C风格的多行注释
1.72 如何在一个php函数中使用具有全局属性的变量,说出两种方式?
global $a 或者 $GLOBALS['a']
1.73 若$aa='aa';则print('aa is \'aa\''."<br/>")会输出什么?
aa is 'aa'
1.74 如何把$a = ‘123’转化成123,列出两种方式?
相关题目:字符串怎么转成整数,有几种方法?怎么实现?
1) 强制类型转换: (整型)字符串变量名;
2) 直接转换:settype(字符串变量,整型);
3) intval(字符串变量);
1.75 说说break和continue可以用在哪些语句里,并且列出二者的区别?
break 和 continue 可以用在 switch 语句中,或是循环结构中
它们的区别主要是体现在循环语句中,break 表示 跳出整个循环,不再执行,循环将终止,而continue则表示跳出本次循环,继续下一次的循环,不会终止循环。
1.76 函数中的默认参数位置如何放置?
当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧;否则,函数将不会按照预期的情况工作。
1.77 如何往一个数组后面添加一个值?列出两种方式?
$arr[ ] = $value;
array_push($arr, $value);
1.78 说出数组涉及到的常用函数。
array -- 声明一个数组
count -- 计算数组中的单元数目或对象中的属性个数
foreach -- 遍历数组
list -- 遍历数组
explode -- 将字符串转成数组
implode -- 将数组转成一个新字符串
array_merge -- 合并一个或多个数组
is_array -- 检查是否是数组
print_r -- 输出数组
sort -- 数组排序
array_keys -- 返回数组中所有的键名
array_values -- 返回数组中所有的值
key -- 从关联数组中取得键名
1.79 字符串的常用函数?
trim() -- 去除字符串首尾处的空白字符(或者其他字符)
strlen() -- 字符串长度
substr() -- 截取字符串
str_replace() -- 替换字符串函数
substr_replace() -- 对指定字符串中的部分字符串进行替换
strstr() -- 检索字符串函数
explode() -- 分割字符串函数
implode() -- 将数组合并成字符串
str_repeat() -- 重复一个字符串
addslashes(); -- 转义字符串
htmlspecialchars() -- THML实体转义
1.80 以下代码的执行后是,$result值为:(奇矩互动)
A. a
B. false
C. true
D. b
E. c
答案:B
mixed array_rand( array $input [, int $num_req ] )
从数组中随机取出一个或多个单元,它接受 input 作为输入数组和一个可选的参数 num_req,指明了你想取出多少个单元 - 如果没有指定,默认为 1。
如果你只取出一个,array_rand() 返回一个随机单元的键名,否则就返回一个包含随机键名的数组。
所以使用array_rand函数,返回结果要么是键名,有么是数组,在这个例子中,数组是索引数组,所以返回的是整型。
1.81 以下代码的执行后是,$result值为: (奇矩互动)
A. 1
B. 2
C. 3
D. 4
E. 5
答案:B
1.82 php函数名是否区分大小写? (奇矩互动)
A. 不区分
B. 区分
答案:A
函数名是大小写无关的,不过在调用函数的时候,通常使用其在定义时相同的形式。以
1.83 下代码的执行后是,$result值为:(奇矩互动)
A. null
B. true
C. false
D. 1
答案:C
is_null -- 检测变量是否为 NULL,如果变量是 null 则返回 TRUE,否则返回 FALSE。
在下列情况下一个变量被认为是 NULL:
1) 被赋值为 NULL
2) 尚未被赋值
3) 被unset()
1.84 翻转字符串中的单词,字符串仅包含大小写字母和空格,单词间使用空格分隔。如:输入"This is PHP",输出"PHP is This"(非必要请不要使用PHP自带函数) (小米)
1.85 请列举出你所知道的全局环境变量 (亿邮)
$_ENV;
$_SERVER;
$_REQUEST;
$_FILES;
$_SESSION;
$_COOKIE;
$_GET;
$_POST;
$GLOBALS;
1.86 设有这样一个数组$a=array(array(id=>0),array(id=>1),array(id=>2)......)id=>0-10000,请问你如何使用PHP判断id=>500是否在这个数组内? (亿邮)
使用in_array 函数,代码如下:
1.87 在PHP中两个数组怎么连接合并在一起 (亿邮)
使用array_merge()函数
1.88 运行以上代码后$a $b $c分别是? (卓望)
$a 为false,$b = $c = 0
1.89 写出php的public、protected、private三种访问控制模式的区别(新浪网技术部)
public:公有,任何地方都可以访问
protected:继承,只能在本类或子类中访问,在其它地方不允许访问
private:私有,只能在本类中访问,在其他地方不允许访问
相关题目:请写出PHP5权限控制修饰符
private protected public
1.90 设计模式考察:请用单态设计模式方法设计类满足如下需求
请用PHP5代码编写类实现在每次对数据库连接的访问中都只能获得唯一的一个数据库连接,具体连接数据库的详细代码忽略,请写出主要逻辑代码(新浪网技术部)
1.91 写出下列程序的输出结果(新浪网技术部)
输出结果 10
1.92 PHP5中魔术方法函数有哪几个,请举例说明各自的用法 (腾讯PHP工程师笔试题)
__sleep serialize之前被调用
__wakeup unserialize时被调用
__toString 打印一个对象时被调用
__set_state 调用var_export时被调用,用__set_state的返回值作为var_export的返回值
__construct 构造函数,实例化对象时被调用
__destruct 析构函数,当对象销毁时被调用
__call 对象调用某个方法,若存在该方法,则直接调用,若不存在,则调用__call 函数
__get 读取一个对象属性时,若属性存在,则直接返回,若不存在,则调用__get 函数
__set 设置一个对象的属性时,若属性存在,则直接赋值,若不存在,则调用__set函数
__isset 检测一个对象的属性是否存在时被调用
__unset unset一个对象的属性时被调用
__clone 克隆对象时被调用
__autoload 实例化一个对象时,如果对应的类不存在,则该方法被调用
相关题目:请写出php5的构造函数和析构函数
构造函数:__construct
析构函数:__destruct
1.93 如何使用下面的类,并解释下面什么意思?
双重md5加密
$testObject = new test();
$encryption = $testObject->Get_test("itcast");
1.94 How would you declare a class named “myclass” with no methods or properties? (Yahoo)
class myclass{};
相关题目:如何声明一个名为“myclass”的没有方法和属性的类?
1.95 How would you create an object, which is an instance of “myclass”? (Yahoo)
$obj= new myclass();
相关题目:如何实例化一个名为“myclass”的对象?
1.96 How do you access and set properties of a class from within the class?(Yahoo)
使用语句:$this->propertyName,例如:
1.97 The code below ___________ because ____________. (腾讯)
A. will work, class definitions can be split up into multiple PHP blocks.
B. will not work, class definitions must be in a single PHP block.
C. will not work, class definitions must be in a single file but can be in multiple PHP blocks.
D. will work, class definitions can be split up into multiple files and multiple PHP blocks.
答案: B
1.98 类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是____。
serialize() 和 unserialize()
1.99 在PHP中,如果派生类与父类有相同名字的函数,则派生类的函数会替换父类的函数,程序结果为
A. tmp
B. Picachu
C. disName
D. Doraemon
E. 无输出
答案:D
1.100 接口和抽象类的区别是什么?
抽象类是一种不能被实例化的类,只能作为其他类的父类来使用。抽象类是通过关键字 abstract 来声明的。
抽象类与普通类相似,都包含成员变量和成员方法,两者的区别在于,抽象类中至少要包含一个抽象方法,
抽象方法没有方法体,该方法天生就是要被子类重写的。
抽象方法的格式为:abstract function abstractMethod();
接口是通过interface关键字来声明的,接口中的成员常量和方法都是public的,方法可以不写关键字public,
接口中的方法也是没有方法体。接口中的方法也天生就是要被子类实现的。
抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承。在应用中选择抽象类还是接口要看具体实现。
子类继承抽象类使用extends,子类实现接口使用implements。
1.101 类中如何定义常量、如何类中调用常量、如何在类外调用常量。
类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。定义常量使用关键字const,例如:const PI = 3.1415326;
无论是类内还是类外,常量的访问和变量是不一样的,常量不需要实例化对象,
访问常量的格式都是类名加作用域操作符号(双冒号)来调用,即:类名:: 类常量名。
1.102 autoload()函数是如何运作的?
使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。
当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。
这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。
1.103 哪种OOP设置模式能让类在整个脚本里只实例化一次?(奇矩互动)
A. MVC
B. 代理模式
C. 状态模式
D. 抽象工厂模式
E. 单件模式
答案:E
1.104 借助继承,我们可以创建其他类的派生类。在PHP中,子类最多可以继承几个父类?(奇矩互动)
A. 1个
B. 2个
C. 取决于系统资源
D. 3个
E. 想要几个有几个
答案:A
1.105 执行以下代码,输出结果是(奇矩互动)
A. a
B. 一个错误警告
C. 一个致命性的报错
答案:C 因为类a是抽象类,不能被实例化
1.106 执行以下代码,输出结果是
A. echo class a something echo class b something
B. echo class b something echo class a something
C. echo class a something
D. echo class b something
答案:D
类b继承自类a,两个类都定义了构造函数,由于二者名字相同,所以子类中的构造函数覆盖了父类的构造函数,要想子类对象实例化时也执行父类的构造函数,需要在子类构造函数中使用parent::__construct()来显示调用父类构造函数。
1.107 请定义一个名为MyClass的类,这个类只有一个静态方法justDoIt。(卓望)
1.108 只有该类才能访问该类的私有变量吗?(卓望)
是的
1.109 写出你知道的几种设计模式,并用php代码实现其中一种。(卓望)
单例模式,工厂模式
单例模式 实现代码 见 第二题
1.110 写出一个能创建多级目录的PHP函数(新浪网技术部)
1.111 写出smarty模板的特点(新浪网技术部)
速度快,编译型,缓存技术,插件机制,强大的表现逻辑
1.112 打开php.ini中的safe_mode,会影响哪些函数?至少说出6个。(新浪)
safe_mode,php安全模式,它提供一个基本安全的共享环境,在一个有多个用户账户存在的php开发的web服务器上。当安全模式打开的时候,一些函数将被完全的禁止,而另一些函数的功能将会受到限制,如:chdir, move_uploaded_file,chgrp,parse_ini_file, chown, rmdir, copy, rename, fopen, require,mkdir, unlink等。
注意,在php5.3以上版本,safe_mode被弃用,在php5.4以上版本,则将此特性完全去除了。
1.113 抓取远程图片到本地,你会用什么函数? (51.com笔试题)
1.114 file_get_contents 或者 curl PHP的垃圾收集机制是怎样的(腾讯)
PHP 可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(reference counting)这种单纯的垃圾回收(garbage collection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为 NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。
1.115 请写一段PHP代码,确保多个进程同时写入同一个文件成功(腾讯)
核心思路:加锁
1.116 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名,例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php (新浪)
参考方案1:
参考方案2:
相关题目:使用五种以上方式获取一个文件的扩展名,要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数,比如 get_ext1($file_name), get_ext2($file_name)
1.117 写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。(新浪)
1.118 简述论坛中无限分类的实现原理。(新浪)
创建类别表如下:
CREATE TABLE category(
cat_id smallint unsigned not null auto_increment primary key comment '类别ID',
cat_name VARCHAR(30) NOT NULL DEFAULT '' COMMENT '类别名称',
parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '类别父ID'
)engine=MyISAM charset=utf8;
编写一个函数,递归遍历,实现无限分类
1.119 写一个函数,算出两个文件的相对路径,如 $a = '/a/b/c/d/e.php'; $b = '/a/b/12/34/c.php';计算出 $b 相对于 $a 的相对路径应该是 ../../c/d (新浪)
1.120 mysql_fetch_row() 和 mysql_fetch_array() 有什么分别?
mysql_fetch_row() 把数据库的一列储存在一个以零为基数的数组中,第一栏在数组的索引 0,第二栏在索引 1,依此类推。
mysql_fetch_assoc() 把数据库的一列储存在一个关联数组中,数组的索引就是字段名称,例如我的数据库查询送回“first_name”、“last_name”、 “email”三个字段,数组的索引便是“first_name”、“last_name”和“email”。mysql_fetch_array() 可以同时送回 mysql_fetch_row() 和 mysql_fetch_assoc() 的值。
1.121 有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?
方法1(对于PHP5及更高版本):
$readcontents = fopen("http://www.phpres.com/index.html", "rb");
$contents = stream_get_contents($readcontents);
fclose($readcontents);
echo $contents;
方法2:
echo file_get_contents("http://www.phpres.com/index.html");
1.122 谈谈对mvc的认识
由模型(model),视图(view),控制器(controller)完成的应用程序,model层负责提供数据,和数据库有关的操作都交给模型层来处理,view层则提供交互的界面,并输出数据,而controller层则负责接收请求,并分发给相应的model来处理,然后调用view层来显示。
1.123 What does the GD library do? (Yahoo)
GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。自从 PHP 4.3.0 版本后 GD 便内建在 PHP 系统中。
1.124 What function can you use to open a file for reading and writing? (Yahoo)
A. fget();
B. file_open();
C. fopen();
D. open_file();
答案:C
fget() 这不是一个 PHP 函数,会引致执行错误。
file_open() 这不是一个 PHP 函数,会引致执行错误。
fopen()这是正确答案,fopen() 可以用来开启档案以便读写。
open_file() 这不是一个 PHP 函数,会引致执行错误。
1.125 Smarty的原理
smarty是一个模板引擎,使用smarty主要是为了实现逻辑和外在内容的分离,如果不使用模板的话,通常的做法就是php代码和html代码混编。使用了模板之后,则可以将业务逻辑都放到php文件中,而负责显示内容的模板则放到html文件中。Smarty在执行display方法的时候,读取模板文件,并进行数据替换,生成编译文件,之后每次访问都会直接访问编译文件,读取编译文件省去了读取模板文件,和字符串替换的时间,所以可以更快,编译文件里时间戳记录模板文件修改时间,如果模板被修改过就可以检测到,然后重新编译(编译是把静态内容保存起来,动态内容根据传入的参数不同而不同)。 如果启用了缓存,则会根据编译文件生成缓存文件,在访问的时候如果有缓存文件并且缓存文件没有过期,则直接访问缓存文件。
相关题目1:能够使HTML和PHP分离开使用的模板
smarty,phplib等
相关题目2:您是否用过模板引擎? 如果有您用的模板引擎的名字是?
Smarty
1.126 PHP如何实现页面跳转
方法一:php函数跳转,缺点,header头之前不能有输出,跳转后的程序继续执行,可用exit中断执行后面的程序。
header("Location: 网址"); //直接跳转
header("refresh:3;url=http://axgle.za.net"); //三秒后跳转
方法二:利用meta
echo "<meta http-equiv=refresh content='0; url=网址'>";
1.127 PHP可以和sql server/oracle等数据库连接吗?
可以
1.128 使用哪些工具进行版本控制?
SVN 或者 CVS
相关题目:您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?
TortoiseSVN-1.2.6
1.129 写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉):
过滤javascript脚本参考:
1.130 Given a line of text $string, how would you write a regular expression to strip all the HTML tags from it?(Yahoo)
方案一,使用PHP 内建函数 strip_tags() 除去 HTML 标签
方案二,自定义函数,如下:
1.131 请写一个函数验证电子邮件的格式是否正确(要求使用正则)(新浪)
preg_match('/^[\w\-\.]+@[\w\-]+(\.\w+)+$/', $email);
相关题目:请用正则表达式写一个函数,验证电子邮件的格式是否正确。 (鑫众人云)
1.132 请对POSIX风格和兼容Perl风格两种正则表达式的主要函数进行类比说明 (腾讯)
主要区别有以下三种:
1) preg_replace()里面的正则可以写成型如:"/.xxx/"而ereg_replace()里面的正则需写成型如"xxx"
2) preg_replace()能操作数组,而ereg_replace()不可以
3) 在逆向引用用preg_replace()可使用0-99个,而ereg_replace()最多为9个
使用 Perl 兼容正则表达式语法的 preg_match() 函数通常是比 ereg() 更快的替代方案。
1.133 请写出并说明如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数?(腾讯)
首先进入php安装目录
php -f d:/wamp/www/1.php 其中-f参数指定要执行的php文件
php -r phpinfo(); 其中-r表示直接执行php代码,无需写开始结束标记
1.134 使用正则表达式提取一段标识语言(html或xml)代码段中指定标签的指定属性值(需考虑属性值对不规则的情况,如大小写不敏感,属性名值与等号间有空格等)。此处假设需提取test标签的attr属性值,请自行构建包含该标签的串 (腾讯)
编写如下函数:
function getAttrValue($str, $tagName, $attrName){
$pattern1 = "/<" . $tagName . "(\\s+\\w+\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)
(\\2))*\\s+" . $attrName . "\\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\5)
(\\s+\\w+\\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\9))*\\s*>/i";
$arr = array();
$re = preg_match($pattern1, $str, $arr);
if($re){
echo "<br />\$arr[6]={$arr[6]}";
}
else{
echo "<br />没找到。";
}
}
测试:
$str1 = "<test attr='ddd'>";
getAttrValue($str1,"test","attr"); //找test标签中attr属性的值,结果为ddd
$str2 = "<test2 attr='ddd' attr2='ddd2' t1=\"t1 value\" t2 = 't2 value'>";
getAttrValue($str2,"test2","t1"); //找test2标签中t1属性的值,结果为t1 value
1.135 What does the following code do? Explain what's going on there. $date='08/26/2003'; print ereg_replace(“([0-9]+)/([0-9]+)/([0-9]+)”,\\2/\\1/\\3,$date); (Yahoo)
这是把一个日期从 MM/DD/YYYY 的格式转为 DD/MM/YYYY 格式。
输出26/08/2003
1.136 What function would you use to redirect the browser to a new page?(Yahoo)
A. redir()
B. header()
C. location()
D. redirect()
答案:B
redir() 这不是一个 PHP 函数,会引致执行错误。
header() 这个是正确答案,header()函数发送头信息,可以用来使浏览器转向到另一个页面,例如:header("Location: http://www.search-this.com/")。
location() 这不是一个 PHP 函数,会引致执行错误。
redirect() 这不是一个 PHP 函数,会引致执行错误。
1.137 When turned on ____________ will _________ your script with different variables from HTML forms and cookies. (腾讯)
A. show_errors, enable
B. show_errors, show
C. register_globals, enhance
D. register_globals, inject
答案:C
1.138 一个函数的参数不能是对变量的引用,除非在php.ini中把____设为on。
allow_call_time_pass_reference
是否启用在函数调用时强制参数被按照引用传递
1.139 在 HTML 语言中,页面头部的 meta 标记可以用来输出文件的编码格式,以下是一个标准的 meta 语句<META http-equiv='Content-Type' content='text/html; charset=gbk'>,请使用 PHP 语言写一个函数,把一个标准 HTML 页面中的类似 meta 标记中的 charset 部分值改为 big5。(新浪)
请注意:
4) 需要处理完整的 html 页面,即不光此 meta 语句
(2) 忽略大小写
11. ' 和 " 在此处是可以互换的
12. 'Content-Type' 两侧的引号是可以忽略的,但 'text/html; charset=gbk' 两侧的不行
13. 注意处理多余空格
编写正则表达式如下:
$reg1 = "/(<meta\\s*http-equiv\\s*=\\s*(['\"]?)Content-Type(\\2)\\s*content\\s*=\\s*(['\"])
text\/html;charset=)(UTF-8)(\\4)(\\s*\/?>)/i";
1.140 PHP中如何判断一个字符串是否是合法的日期模式:2007-03-13 13:13:13 。要求代码不超过5行。 (酷讯)
1.141 PHP中,如何获得一个数组的键值?(酷讯 )
使用 key() 可以获得数组中当前元素的键名,使用current()则可以返回当前元素的值。使用array_keys()则可以得到数组中所有的键名。使用foreach结构foreach($arr as $key=>$value) 可以通过$key 和 $value分别获取键名和值。
1.142 如果模板是用smarty模板。怎样用section语句来显示一个名为$data的组。比如:
$data = array(
0 => array('id' => 8, 'name' => 'name1'),
1 => array('id' => 10, 'name' => 'name2'),
2 => array('id' => 15, 'name' => 'name3')
);
写出在模板页的代码?若用foreach语句又要怎样显示呢?
用section语句:
<{section name=test loop=$data start=0 step=1}>
id:<{$data[test].id}><br />
name:<{$data[test].name}><br /><br />
<{sectionelse}>
数组为空
<{/section}>
用foreach语句:
<{foreach from=$data item=test}>
id:<{$test.id}><br />
name:<{$test.name}><br /><br />
<{foreachelse}>
数组为空
<{/foreach}>
1.143 哪个选项会匹配下边的这个正则表达式? (/.*\*xyz\d/)
A. ******xyz
B. *****_xyz1
C. ******xyz2
D. _*xyz
答案:C
1.144 以下哪个错误无法被标准的错误控制器获取?
A. E_WARNING
B. E_USER_ERROR
C. E_PARSE
D. E_NOTICE
答案:B
1.145 以下哪种错误类型无法被自定义的错误处理器捕捉到? (奇矩互动)
A. E_WARNING
B. E_USER_ERROR
C. E_PARSE
D. E_NOTICE
答案:C
1.146 (^\s*)|(\s*$)这个正则表达式作用是:__________;
匹配以0个或多个空白符开头或者0个或多个空白符结尾的字符串
1.147 编写函数取得上一月的最后一天
1.148 在很多时候,我们可以通过apache的主配置文件来设置对test目录的访问权限控制,如http://IP/test请问如果需设置test下的一个子目录的访问控制权限,是否可以在主配置文件中修改,如果不可以应如何解决。
可以,还可以在需要控制的子目录下创建.htaccess文件,写入访问控制。
1.149 如果我的网站用的utf-8编码,为防止乱码出现,都需要注意哪些地方?
从以下几个方面考虑:
1) 数据库中库和表都用utf8编码
2) php连接mysql,指定数据库编码为utf8 mysql_query(“set names utf8”);
3) php文件指定头部编码为utf-8 header(“content-type:text/html;charset=utf-8”);
4) 网站下所有文件的编码为utf8
5) html文件指定编码为utf-8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
1.150 在url中用get传值的时候,若中文出现乱码,应该用哪个函数对中文进行编码? urlencode()
1.151 写出两种对变量加密的函数?
md5($str);
sha1($str);
1.152 如何把2009-9-2 10:30:25变成unix时间戳?
1.153 如何把一个GB2312格式的字符串装换成UTF-8格式?
1.154 如果需要原样输出用户输入的内容,在数据入库前,要用哪个函数处理?
htmlspecialchars 或者 htmlentities
1.155 写出五种以上你使用过的PHP的扩展的名称(提示:常用的PHP扩展)
mb_sring、iconv、curl、GD、XML、socket、MySQL、PDO 等
1.156 了解MVC模式吗?请写出三种以上目前PHP流行的MVC框架名称(不区分大小写)
FleaPHP、Zend Framework、CakePHP、Symfony、ThinkPHP、YII、CodeIgniter等
1.157 php中WEB上传文件的原理是什么,如何限制上传文件的大小?
上传文件的表单使用post方式,并且要在form中添加enctype='multipart/form-data'。
一般可以加上隐藏域:<input type=hidden name='MAX_FILE_SIZE' value=dddddd>,位置在file域前面。value的值是上传文件的客户端字节限制。可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。
使用file文件域来选择要上传的文件,当点击提交按钮之后,文件会被上传到服务器中的临时目录,在脚本运行结束时会被销毁,所以应该在脚本结束之前,将其移动到服务器上的某个目录下,可以通过函数move_uploaded_file()来移动临时文件,要获取临时文件的信息,使用$_FILES。
限制上传文件大小的因素有:
1) 客户端的隐藏域MAX_FILE_SIZE的数值(可以被绕开)。
2) 服务器端的upload_max_filesize,post_max_size和memory_limit。这几项不能够用脚本来设置。
3) 自定义文件大小限制逻辑。即使服务器的限制是能自己决定,也会有需要个别考虑的情况。所以这个限制方式经常是必要的。
1.158 简述UBB code 的实现原理。(YG)
UBB代码是HTML的一个变种,通过程序自定义我们的标签,比如“[a]PHP中UBB的使用[/a]”这样的标签,其实质就是查找[a][/a]标签,将其替换成<a></a>的标准html,说白了,就是将标准的html标记通过技术手段使其简化,其输出出来的结果还是标准的 html。
明白了ubb的原理,那么再制作一个简单的 ubb 编辑器就不难了,和 fck 之类的编辑器比较起来,ubb 代码最大的优点就是代码简单,功能很少,简单的ubb只需要一个文件,而且 ubb 标签可以自己来定义,更改起来很方便,在 php 中就是利用替换函数就可以将 html 进行标签化,输出时进行标签的转化。
1.159 怎么把文件保存到指定目录?怎么避免上传文件重名问题?
可以自己设置上传文件的保存目录,与文件名拼凑形成一个文件路径,使用move_uploaded_file(),就可以完成将文件保存到指定目录。可以通过上传的文件名获取到文件后缀,然后使用时间戳+随机数+文件后缀的方式为文件重新命名,这样就避免了重名。
1.160 _____函数能返回脚本里的任意行中调用的函数的名称。该函数同时还经常被用在调试
中,用来判断错误是如何发生的。 (奇矩互动)
debug_print_backtrace()
1.161 在Smarty模板语法中怎么能遍历数组$a = array(array('id' => 0),array('id' =>
1),array('id' => 2),……) id=>0-10000 ,怎么判断当id=>500,让输出的值在HTML里变为红色? (亿邮)
设数组分配过来的数组名为 $ids
{section name = temp loop = $ids}
{if $ids[temp].id == 500}
<span style = ‘color: #f00;’>{$ids[temp].id}</span>
{esle}
{$ids[temp].id}
{/if}
{/section}
1.162 在Smarty模板语法中如何获取当前时间,并且使用Y-m-d H:i:s的格式输出?(亿邮)
使用{$smarty.now} 来获取当前时间,得到的是unix系统时间戳
使用变量调节器进行格式化,如下:
{$smarty.now | date_format : “%Y-%m-%d %H:%M:%S” }
1.163 在Smarty模板语法中如何获取php的全局环境变量 (亿邮)
$smarty.get.变量 #显示通过get方式传过来的指定变量的值
$smarty.post.变量 #显示通过post方式传过来的指定变量的值
$smarty.cookies.变量 #显示通过cookie中指定变量的值
$smarty.server.SERVER_NAME #显示server变量值,$_SERVER系列变量
$smarty.env.PATH #显示系统环境变量值,$_ENV系列变量
$smarty.session.变量 #显示session中指定变量的值
$smarty.request.变量 #显示通过post、get、cookie中指定变量的值
1.164 在Smarty模板中如何用自定义函数 (亿邮)
使用模板分隔符包含,传递参数则使用HTML属性的方式,例如:
{html_image file="pumpkin.jpg"}
1.165 列举出你所知道的php系统函数库例如,数学函数库 (亿邮)
mysql,gd,pdo,XML,zip,filesystem,mail等
1.166 假如让你来写一个函数实现Utf-8转gb2312,那么函数的名称应该怎么命名?(亿邮)
utf8_to_gb2312 或者 utf8togb2312
1.167 请描述如下URL重写规则的用意。(卓望)
<IfModulemod_rewrite.c>
RewriteEngineon
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteBase/
RewriteRule./index.php[L]
</IfModule>
如果REQUEST_FILENAME文件存在,就直接访问文件,不进行下面的rewrite规则,如果REQUEST_FILENAME目录存在,就直接访问目录,不进行下面的rewrite规则,RewriteRule./index.php[L]的意思是把所有的请求都给index.php处理。
1.168 Warning:Cannot modify header information-headers already sent by (output started at
D:\src\init.php:7) in D:\src\init.php on line10通常什么情况下php会报该警告信息?(卓望)
一般是在header、set_cookie以及session_start函数前面有输出(包括空格)的情况下,会报该警告信息
1.169 禁用COOKIE 后 SEESION 还能用吗? (51.com笔试题)
可以,COOKIE和SESSION都是用来实现会话机制的,由于http协议是无状态的,所以要想跟踪一个用户在同一个网站之间不同页面的 状态,需要有这么一个机制----会话机制。
COOKIE:将会话信息的保存到浏览器端。
SESSION:将会话信息保存到服务器端。
SESSION默认情况下是基于COOKIE的,对于SESSION来说,每生成一个SESSIONID,都会将其发送到浏览器端,让后将其保存到cookie当中。
如果禁用了COOKIE,则基于COOKIE的SESSION不好使了,我们可以使用get,传递SID,或者直接开启透明的SID(此时需要关闭基于cookie的SESSION配置项)。
相关题目:SESSION与COOKIE的区别?
COOKIE保存在客户端,而SESSION则保存服务器端。
从安全性的角度来讲,SESSION的安全性要高。
从保存内容的类型的角度来讲,COOKIE只保存字符串(及能够自动转换成字符串),而session则可以保存所有的数据类型。
从保存内容的大小的角度来讲,COOKIE保存的内容是有限制的,比较小,而SESSION基本上没有这个限制。
从性能的角度来讲,用SESSION的话,对服务器的压力会更大一些。
1.170 请使用socket相关函数(非curl)实现如下功能:构造一个post请求,发送到指定http server的指定端口的指定请求路径(如http://www.example.com:8080/test)。请求中包含以下变量:
用户名(username):温柔一刀
密码(pwd):&123=321&321=123&
个人简介(intro):Hello world!
且该http server需要以下cookie来进行简单的用户动作跟踪:
cur_query:you&me
last_tm:...(上次请求的unix时间戳,定为当前请求时间前10分钟)
cur_tm:...(当前请求的unix时间戳)
设置超时为10秒,发出请求后,将http server的响应内容输出 (腾讯)
参考代码:
if($fp = fsockopen('localhost', '80')) {
//连接成功
$request_data = "POST /2.php HTTP/1.1" . "\r\n"; //请求行
$request_data .= "Host: localhost" . "\r\n"; //host头信息
$request_data .= "User-Agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" . "\r\n";//host头信息
$request_content = "username=".urlencode('温柔一刀')."&pwd=".urlencode('&123=321&321=123&')."&intro=".urlencode("Hello world!");
$request_data .= "Content-Type: application/x-www-form-urlencoded" . "\r\n";
$request_data .= "Content-Length: " . strlen($request_content) . "\r\n";
$cur_query = urlencode("you&me");
$last_tm = time()-10*60;
$cur_tm = time();
$request_data .= "Cookie:cur_query=$cur_query;last_tm=$last_tm;cur_tm=$cur_tm" . "\r\n";
$request_data .= "\r\n"; //请求头信息结束时的空行
//请求主体数据部分
$request_data .= $request_content;
//利用建立好的通道,将数据发送过去
fwrite($fp, $request_data); //写入数据(发送数据)
//读取数据
while(!feof($fp)) { //判断是否没有到文件末尾
$resp_data = fgets($fp);
echo $resp_data . '<br>';
}
}
1.171 在HTTP 1.0中,状态码401的含义是________;如果返回“找不到文件”的提示,则可用 header 函数,其语句为__________;
未经授权:访问由于凭据无效被拒绝
header("HTTP/1.0 404 Not Found")
1.172 如何修改SESSION的生存时间?
要注意这里的生存时间指的是什么? 由于session默认是基于cookie的,也就是说使用session会话技术,首先是将session数据保存到服务器端,其次会将sessionID 保存到浏览器端,保存在服务器端的session文件生命周期由php.ini中的session.gc_maxlifetime、gc_probability和gc_divisor来决定,而保存在客户端的sessionID由客户端cookie来决定,默认其生存周期直到浏览器关闭,它也可以通过php.ini中的设置session.cookie_lifetime 来控制,二者共同来决定session 的生存时间,二者中的其中任意一个失效了,就会造成session失效,要根据自己的需求来决定是要从哪方面来修改其生存时间。
参考1:将php.ini中的session.gc_maxlifetime设置为9999重启apache
参考2:
$savePath = "./session_save_dir/";
$lifeTime = 小时 * 秒;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
参考3:
session_start();
$lifeTime = 24 * 3600; // 保存一天
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
1.173 How can you get round the stateless nature of HTTP using PHP? (Yahoo)
最主要的两个选择是SESSION和COOKIE。使用SESSION的方法是在每一页的开始加session_start(),然后利用$_SESSION来存取 SESSION变量。至于 COOKIE你只需记着一个原则:在输出任何文字之前调用 set_cookie() 函数设置COOKIE,使用 $_COOKIE 获取COOKIE变量。
6. PHP程序中如何设置当前页面的编码为utf-8?
header(“content-type:text/html;charset=utf-8”);
1.174 如何设置一个cookie的名字为username,值为jack,并且让此cookie一周后失效?
setcookie(‘username’,’jack’,time()+7*24*3600);
1.175 一个浏览器最多可以产生多少个cookie,每个cookie文件最大不能超过多少?
cookie的总数量没有限制,但是每个域名的COOKIE数量和每个COOKIE的大小是有限制的!
IE每个域名限制为50个。
Firefox每个域名cookie限制为50个。
Opera每个域名cookie限制为30个。
Safari/webkit貌似没有cookie限制。但是假如cookie很多,则会使header大小超过服务器的处理的限制,会导致错误发生。
不同浏览器间每个cookie文件大小也不同
Firefox和safari是4097个字节,包括名(name)、值(value)和等号。
Opera是4096个字节,包括:名(name)、值(value)和等号。
IE是4095个字节,包括:名(name)、值(value)和等号。
1.176 设置或读取session之前,需要做什么?
session_start()前面不能有任何输出,包括空行。
相关题目:使用setcookie函数前,需要注意什么?
前面不能有任何输出,包括空行。
1.177 请描述出七层网络模型的名称,由下到上(可以使用中文描述)
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
11. 说说下面这些这些协议的全称和中文解释(提示:都是工作在应用层)SMTP、POP3、HTTP、FTP、DNS (小米)
SMTP (Simple Mail Transfer Protocol) 简单邮件传输协议
POP3 (Post Office Protocol 3) 邮局协议第3版
HTTP (Hypertext Transfer Protocol) 超文本传输协议
FTP (File Transfer Protocol)文件传输协议
DNS (Domain Name System and Domain Name Service protocol) 域名系统(服务)协议
1.178 COOKIE、SESSION的联系和区别,多台web服务器如何共享 SESSION?
COOKIE和SESSION都是用于会话机制,COOKIE保存在客户端,而SESSION则保存在服务器端。在默认情况下,SESSION机制是基于COOKIE的,每生成一个SESSIONID,都会将其发送到浏览器端,让后将其保存到COOKIE当中,在下次请求的时候,由浏览器携带这个COOKIE。
要想多台web服务器共享SESSION,可以利用MySQL数据库存储SESSION数据。
1.179 HTTP/1.0中,状态码200 301 304 403 404 500的含义 (小米)
200 OK 服务器成功处理了请求
301 Moved Permanently(重定向)请求的URL已移走
304 Not Modified(未修改)客户的缓存资源是最新的, 要客户端使用缓存
403 Forbidden(禁止)请求被服务器拒绝了
404 Not Found 未找到资源
Internal Server Error(内部服务器错误) 服务器遇到一个错误,使其无法为请求提供服务
1.180 请描述PHP(或其他语言)Session的运行机制,大型网站中Session方面应注意什么?(小米)
session机制是一种服务器端的机制,它将数据保存到服务器端。
当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识, 称为 sessionid,如果已包含一个sessionid则说明以前已经为此客户端创建过session,服务器就按照sessionid把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含sessionid,则为此客户端创建一个session并且生成一个与此session相关联的sessionid,sessionid的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 sessionid将被在本次响应中返回给客户端以cookie的形式保存。
session在大访问量网站上确实影响系统性能,影响性能的原因之一由文件系统设计造成,在同一个目录下超过10000个文件时,文件的定位将非常耗时,另外就是小文件的效率问题,一般我们的session数据都不会太大(1~2K),如果有大量这样1~2K的文件在磁盘上,IO效率肯定会很差,我们可以采用改写session存储机制,比如存放到数据库中。
1.181 在子网掩码为255.255.255.248的局域网中能够同时使用的IP有多少个?(亿邮)
6个,255.255.255.248换算成二进制就是11111111.11111111.11111111.11111000
后面的三位用来表示主机,前面的29位用来表示网络。
三位表示主机,就是可以用来表示2^3=8个,再减去网络地址和广播地址,就是6个了。
1.182 简述TCP协议的三次握手过程。 (亿邮)
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
1.183 你会用哪个函数设置当前内容的Content-Type? (卓望)
header函数
1.184 通过页面输入用户名abc和密码123登录到www.10086.cn,请写出该次请求的HTTP协议报文(包括请求行、消息报头、请求正文)。 (卓望)
POST www.10086.cn HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://localhost/a.html
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; KB974487)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost
Content-Length: 25
Connection: Keep-Alive
username=abc&password=123