时间:2021-07-01 10:21:17 帮助过:4人阅读
PHP核心技术
1.请写一段PHP代码,确保多个进程同时写入同一个文件成功
核心思路:加锁
<?php $fp = fopen("lock.txt","w+"); if (flock($fp,LOCK_EX)) { //获得写锁,写数据 fwrite($fp, "write something"); // 解除锁定 flock($fp, LOCK_UN); } else { echo "file is locking..."; } fclose($fp);?>
2.写一个函数,尽可能高效的,从一个标准url里取出文件的扩展名,例如:http://www.gxlcms.com/abc/de/fg.php?id=1需要取出php或.php
<?php // 方案一 function getExt1($url){ $arr = parse_url($url); //Array ( [scheme] => http [host] => www.gxlcms.com [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.gxlcms.com/abc/de/fg.php?id=1"; echo getExt1($path); echo "<br />"; echo getExt2($path);?>
相关题目:使用五种以上方式获取一个文件的扩展名,要求:dir/upload.image.jpg,找出.jpg或者jpg,必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数,比如get_ext1(filename),getext2(file_name)
3.简述论坛中无限分类的实现原理
创建类别表如下:
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;
编写一个函数,递归遍历,实现无限分类
<?php function tree($arr,$pid=0,$level=0){ static $list = array(); foreach ($arr as $v) { //如果是顶级分类,则将其存到$list中,并以此节点为根节点,遍历其子节点 if ($v['parent_id'] == $pid) { $v['level'] = $level; $list[] = $v; tree($arr,$v['cat_id'],$level+1); } } return $list; } ?>
4.写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉)
过滤javascript脚本参考:
<?php header("content-type:text/html;charset=utf-8"); $script = "以下内容不显示:<script type='text/javascript'>alert('cc');</script>"; $pattern = '/<script[^>]*?>.*?</script>/si'; echo preg_replace($pattern, "脚本内容", $script);//以下内容不显示:脚本内容 ?>
5.写出一个能创建多级目录的PHP函数
<?php /** * 创建多级目录 * @param $path string 要创建的目录 * @param $mode int 创建目录的模式,在windows下可忽略 */ function create_dir($path,$mode = 0777) { if (is_dir($path)) { # 如果目录已经存在,则不创建 echo "该目录已经存在"; } else { # 不存在,创建 if (mkdir($path,$mode,true)) { echo "创建目录成功"; } else { echo "创建目录失败"; } } }?>
6.PHP的垃圾收集机制是怎样的
PHP可以自动进行内存管理,清除不再需要的对象。
PHP使用了引用计数(reference counting)这种单纯的垃圾回收(garbage collection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。
7.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹
<?php function my_scandir($dir){ $files = array(); if(is_dir($dir)){ if ($handle = opendir($dir)) { while (($flie = readdir($handle))!== false) { if ($flie!="." && $file!="..") { if (is_dir($dir."/".$file)) { $files[$file] = my_scandir($dir."/".$file); } else { $files[] = $dir."/".$file; } } } closedir($handle); return $files; } } }?>
8.PHP中如何判断一个字符串是否是合法的日期模式:2007-03-13 13:13:13。要求代码不超过5行
<?php function checkDateTime($data){ if (date('Y-m-d H:i:s',strtotime($data)) == $data) { return true; } else { return false; } } // 示例 $data = '2015-06-20 13:35:42'; var_dump(checkDateTime($data));//bool(true) $data = '2015-06-36 13:35:42'; var_dump(checkDateTime($data));//bool(false)?>
9.PHP中,如何获得一个数组的键值?
使用key()可以获得数组中当前元素的键名,使用current()则可以返回当前元素的值。
使用array_keys()则可以得到数组中所有的键名。
使用foreach结构foreach($arr as key=>value)可以通过key和value分别获取键名和值。
10.如果模板是用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}>
总结:
在我们这片文章我们主要给大家总结的是php面试题中php核心技术,对于新手可能有点深度了,但是对于经验丰富的朋友来说,这确实一个不错的选择!希望对你有所帮助!
相关推荐:
2017招聘季:PHP面试题超强总结!
以上就是php面试题中php核心技术的问题分享的详细内容,更多请关注Gxl网其它相关文章!