我们在之前的文章中我们介绍了php面试题的汇总,以及php面试题中thinkphp以及笔记题目的汇总,这些对新手以及工作经验不是很多的小伙伴们来说已经是足够使用了,但是对于一些高手甚至是工作三四年的朋友来说我们之前介绍的php面试题显然就不够用了,那么我们今天就大家来总结下php面试题中的PHP核心技术!
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.php.cn/abc/de/fg.php?id=1需要取出php或.php
<?php // 方案一 function getExt1($url){ $arr = parse_url($url); //Array ( [scheme] => http [host] => www.php.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.php.cn/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核心技术,对于新手可能有点深度了,但是对于经验丰富的朋友来说,这确实一个不错的选择!希望对你有所帮助!
相关推荐:
以上是php面试题中php核心技术的问题分享的详细内容。更多信息请关注PHP中文网其他相关文章!

PHP在现代Web开发中仍然重要,尤其在内容管理和电子商务平台。1)PHP拥有丰富的生态系统和强大框架支持,如Laravel和Symfony。2)性能优化可通过OPcache和Nginx实现。3)PHP8.0引入JIT编译器,提升性能。4)云原生应用通过Docker和Kubernetes部署,提高灵活性和可扩展性。

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。

PHP和Python各有优势,适合不同场景。1.PHP适用于web开发,提供内置web服务器和丰富函数库。2.Python适合数据科学和机器学习,语法简洁且有强大标准库。选择时应根据项目需求决定。

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

PHP成为许多网站首选技术栈的原因包括其易用性、强大社区支持和广泛应用。1)易于学习和使用,适合初学者。2)拥有庞大的开发者社区,资源丰富。3)广泛应用于WordPress、Drupal等平台。4)与Web服务器紧密集成,简化开发部署。

PHP在现代编程中仍然是一个强大且广泛使用的工具,尤其在web开发领域。1)PHP易用且与数据库集成无缝,是许多开发者的首选。2)它支持动态内容生成和面向对象编程,适合快速创建和维护网站。3)PHP的性能可以通过缓存和优化数据库查询来提升,其广泛的社区和丰富生态系统使其在当今技术栈中仍具重要地位。

在PHP中,弱引用是通过WeakReference类实现的,不会阻止垃圾回收器回收对象。弱引用适用于缓存系统和事件监听器等场景,需注意其不能保证对象存活,且垃圾回收可能延迟。

\_\_invoke方法允许对象像函数一样被调用。1.定义\_\_invoke方法使对象可被调用。2.使用$obj(...)语法时,PHP会执行\_\_invoke方法。3.适用于日志记录和计算器等场景,提高代码灵活性和可读性。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver Mac版
视觉化网页开发工具

WebStorm Mac版
好用的JavaScript开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),