一、PHP开发部分
1.合并两个数组有几种方式,试比较它们的异同
2.请写一个函数来检查用户提交的数据是否为整数(不区分数据类型,可以为二进制、八进制、十进制、十六进制数字)
3.PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码,请写两个替代的函数实现兼容Unicode文字的字符串大小写转换
4.PHP的is_writeable()函数存在Bug,无法准确判断一个目录/文件是否可写,请写一个函数来判断目录/文件是否绝对可写
5.PHP的chmod()函数存在Bug,无法保证设置成功,请写一个函数在指定路径下创建一个目录/文件并确保可以正确设置权限掩码
6.PHP处理上传文件信息数组中的文件类型$_FILES[‘type’]由客户端浏览器提供,有可能是黑客伪造的信息,请写一个函数来确保用户上传的图像文件类型真实可靠
7.PHP通过对数据的URL编码来实现与Javascript的数据交互,但是对于部分特殊字符的编解码与Javascript的规则不尽相同,请具体说明这种差异,并针对UTF-8字符集的数据,写出PHP的编解码函数和Javascript的编解码函数,确保PHP编码数据可以被Javascript正确解码 、Javascript编码的数据可以被PHP正确解码
8.试阐述Memcache的key多节点分布的算法?当任一节点出现故障时PHP的Memcache客户端将如何处置?如何确保Memcache数据读写操作的原子性?
9.如何实现PHP的安全最大化?怎样避免SQL注入漏洞和XSS跨站脚本攻击漏洞?
10.请设计一个数据结构可以实现无限级子菜单的树型菜单功能并提供菜单生成算法,用UML描述设计并写出相关PHP代码
一. array_combine(),英文里面的combine有结合的意思,将两个数结合并成一个新的数组,第一个参数为keys,第二个参数为values;
array_merge(),将一个或者多个数组合并成为一个数组,如果keys为整数,则新的数组将返回从0开始索引的数组,如果数组里面有相同的keys,则后面的覆盖前面的,与此不同的是array_merge_recursive;
array_merge_recursive,其他的等同于array_merge,但是数组里面有相同的keys的话,会合并递归为新的数组;
二. 本来以为用is_num就可以,不过仔细一想,post过来的数据是char来的。
if(!is_numeric($postn)||strpos($postn,”.”)!==false){
echo “不是整数”;
}else{
echo “是整数”;
}
三.
function mystrtoupper($a){
$b = str_split($a, 1);
$r = '';
foreach($b as $v){
$v = ord($v);
if($v >= 97 && $v<= 122){
$v -= 32;
}
//转化成ascii码,然后减少32就是小写转大写,增加32就是大写转小写
$r .= chr($v);
}
return $r;
}
function mystrtolower($a){
$b = str_split($a, 1);
$r = '';
foreach($b as $v){
$v = ord($v);
if($v >= 97 && $v<= 122){
$v += 32;
}
//只转化成ascii码,然后减少32就是小写转大写,增加32就是大写转小写
$r .= chr($v);
}
return $r;
}
四.
function is_really_writable($file)
{
// If we're on a Unix server with safe_mode off we call is_writable
if (DIRECTORY_SEPARATOR == '/' AND @ini_get("safe_mode") == FALSE)
{
return is_writable($file);
}
// For windows servers and safe_mode "on" installations we'll actually
// write a file then read it. Bah...
if (is_dir($file))
{
$file = rtrim($file, '/').'/'.md5(mt_rand(1,100).mt_rand(1,100));
if (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE)
{
return FALSE;
}
fclose($fp);
@chmod($file, DIR_WRITE_MODE);
@unlink($file);
return TRUE;
}
elseif ( ! is_file($file) OR ($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE)
{
return FALSE;
}
fclose($fp);
return TRUE;
}
五.不知道是不是因为设置了成功不成功都返回true的原因,暂过。
六.
$file = $_Files['file'];
if (getimagesize($file)){
echo 'true';
} else{
echo 'false';
//假的图片就会显示为错误
}
七.