php知识二
2020-03-08 13:34:30 来源:admin 点击:780
5 写一个函数,尽可能高效的,从一个标准url里取出文件的扩展名,
例如:http://www.startphp.cn/abc/de/fg.php?id=1需要取出php或.php
<?php
// 方案一
function getExt1($url){
$arr = parse_url($url);
//Array ( [scheme] => http [host] => www.startphp.cn [path] => /abc/de/fg.php [query] => id=1 )
$file = basename($arr['path']);
$ext = explode('.', $file);
return $ext[count($ext)-1];
}
// 方案二
function getExt2($url){
$url = basename($url);
$pos1 = strpos($url,'.');
$pos2 = strpos($url,'?');
if (strstr($url,'?')) {
return substr($url,$pos1+1,$pos2-$pos1-1);
} else {
return substr($url,$pos1);
}
}
$path = "http://www.startphp.cn/abc/de/fg.php?id=1";
echo getExt1($path);
echo "<br />";
echo getExt2($path);
?>
6 使用正则表达式提取一段标识语言(html或xml)代码段中指定标签的指定属性值(需考虑属性值对不规则的情况,如大小写不敏感,属性名值与等号间有空格等)。此处假设需提取test标签的attr属性值,请自行构建包含该标签的串(腾讯)
如下:
<?php
header("content-type:text/html;charset=utf-8");
function getAttrValue($str,$tagName,$attrName){
$pattern1="/<".$tagName."(s+w+s*=s*(['"]?)([^'"]*)())*s+".$attrName."s*=s*(['"]?)([^'"]*)()(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
?>
7 php中WEB上传文件的原理是什么,如何限制上传文件的大小?
move_uploaded_file()
来移动临时文件,要获取临时文件的信息,使用$_FILES。MAX_FILE_SIZE
的数值(可以被绕开)。upload_max_filesize
,post_max_size
和memory_limit
。这几项不能够用脚本来设置。8 请说明 PHP 中传值与传引用的区别,什么时候传值什么时候传引用?
按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。(优缺点会考到)
9 MySQL数据库中的字段类型varchar和char的主要区别是什么?
Varchar是变长,节省存储空间,char是固定长度。查找效率要char型快,因为varchar是非定长,必须先查找长度,然后进行数据的提取,比char定长类型多了一个步骤,所以效率低一些。
10 静态化如何实现的?伪静态如何实现?
1、 静态化指的是页面静态化,也即生成实实在在的静态文件,也即不需要查询数据库就可以直接从文件中获取数据,指的是真静态。
实现方式主要有两种:一种是我们在添加信息入库的时候就生成的静态文件,也称为模板替换技术。一种是用户在访问我们的页面时先判断是否有对应的缓存文件存在,如果存在就读缓存,不存在就读数据库,同时生成缓存文件。
2、伪静态不是真正意义上的静态化,之所以使用伪静态,主要是为了SEO推广,搜索引擎对动态的文件获取难度大,不利于网站的推广。实习原理是基于Apache或Nginx的rewrite机智
主要有两种方式:一种是直接在配置虚拟机的位置配置伪静态,这个每次修改完成后需要重启web服务器。另一种采用分布式的,可以在网站的根目录上创建.htaccess的文件,在里面配置相应的重写规则来实现伪静态,这种每次重写时不需要重启web服务器,且结构上比较清晰。