PHP面试题 PHP核心技术(生活)

 2024-03-15 01:08:19  阅读 0

1.PHP核心技术

很多人在刚接触这个行业或者遇到瓶颈期的时候总会遇到一些问题。 比如,学习一段时间后,感觉自己没有方向感,不知道从哪里开始学习。 我整理了这篇,如果需要资料可以免费分享给大家(点击这里加入PHP进阶交流群,一起学习交流。11年架构师给你讲解面试通过的秘诀)年薪50万。)

如果你喜欢我的文章,想和一群资深开发者交流学习,获得更多各大厂商的相关面试咨询和指导,欢迎加入我的学习交流群\点击这里一起学习成长

1、编写一个可以创建多级目录的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 "创建目录失败";
            }
        }
    }
?>

2.写下模板的特点(新浪技术部)

速度快、编译、缓存技术、插件机制、强大的表现逻辑

3、打开php.ini会影响哪些功能? 至少说出6个。(新浪)

,PHP安全模式,在存在多个用户帐户的PHP开发Web服务器上提供基本的安全共享环境。 开启安全模式后,某些功能会被完全禁止,而其他功能的功能则会受到限制,如:chdir、chgrp、chown、rmdir、copy、fopen、mkdir等。注意,在php5.3和在 php5.4 及以上版本中,该功能已被弃用,并且在 php5.4 及以上版本中,该功能已被完全删除。

4. 如果要将远程图像采集到本地,您会使用什么功能? (笔试题)

或卷曲

5.PHP的垃圾回收机制是什么(腾讯)

PHP 可以自动管理内存并清除不再需要的对象。 PHP 使用引用计数 (),一种简单的垃圾回收 () 机制。 每个对象都包含一个引用计数器,每次与该对象的连接,计数器都会加1。当离开生存空间或被设置为NULL时,计数器会减1。当对象的引用计数器达到零时,PHP知道不再需要使用该对象并释放它占用的内存空间。

6、请写一段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);
?>

7. 编写一个函数以尽可能高效地从标准 URL 检索文件扩展名,例如:

需要删除php或.php(新浪)

<?php
    // 方案一
    function getExt1($url){
        $arr = parse_url($url);
        //Array ( [scheme] => http [host] => www.sina.com.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.sina.com.cn/abc/de/fg.php?id=1";
    echo getExt1($path);
    echo "
"; echo getExt2($path); ?>

相关主题: 使用五种以上方法获取文件扩展名。 要求:dir/.image.jpg。 要查找.jpg或jpg,必须使用PHP自带的处理函数进行处理。 方法不能明显重复,可以封装成,如()

8、编写一个函数,可以遍历文件夹中的所有文件和子文件夹。 (新浪)

<?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;
            }
        }
    }
?>

9、简述论坛无限分类的实现原理。 (新浪)

创建类别表如下:

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;
    }
?>

10、编写一个函数计算两个文件的相对路径,如b='/a/b/12/34/c.php'; 计算a的相对路径应该是../../c/d(新浪)

<?php
    function releative_path($path1,$path2){
        $arr1 = explode("/",dirname($path1));
        $arr2 = explode("/",dirname($path2));
  
        for ($i=0,$len = count($arr2); $i < $len; $i++) {
            if ($arr1[$i]!=$arr2[$i]) {
                break;
            }
        }
  
        // 不在同一个根目录下
        if ($i==1) {
            $return_path = array();
        }
  
        // 在同一个根目录下
        if ($i != 1 && $i < $len) {
            $return_path = array_fill(0, $len - $i,"..");
        }
  
        // 在同一个目录下
        if ($i == $len) {
            $return_path = array('./');
        }
  
        $return_path = array_merge($return_path,array_slice($arr1,$i));
        return implode('/',$return_path);
    }
  
    $a = '/a/b/c/d/e.php';
    $b = '/a/b/12/34/c.php';
    $c = '/e/b/c/d/f.php';
    $d = '/a/b/c/d/g.php';
  
    echo releative_path($a,$b);//结果是../../c/d
    echo "
"; echo releative_path($a,$c);//结果是a/b/c/d echo "
"; echo releative_path($a,$d);//结果是./ echo "
"; ?>

11.()和()有什么区别?

() 将数据库列存储在从零开始的数组中,第一列位于数组索引 0 处,第二列位于索引 1 处,依此类推。 () 将数据库的列存储在关联数组中。 数组的索引是字段名称。 例如,我的数据库查询返回三个字段“”、“”和“电子邮件”。 数组的索引是“”、“”和“电子邮件”。 ()可以同时传回()和()的值。

12.有一个网页地址,如PHP开发资源网主页:/index.html,如何获取其内容?

方法一(适用于PHP5及以上版本):

$readcontents=fopen("http://www.phpres.com/index.html","rb");
$contents=stream_get_contents($readcontents);
fclose($readcontents);
echo $contents;

方法二:

echo file_get_contents("http://www.phpres.com/index.html");

13.谈谈你对mvc的理解

一个应用程序由模型、视图和控制器组成。 模型层负责提供数据。 与数据库相关的操作都交给模型层处理。 视图层提供交互界面并输出数据。 该层负责接收请求并分发给相应的模型进行处理,然后调用视图。 要显示的图层。

14.GD是做什么的? (雅虎)

GD库提供了一系列用于处理图像的API。 您可以使用GD库来处理图像或生成图像。 在网站上,GD库通常用于生成缩略图或为图像添加水印或生成网站数据报告。 GD从4.3.0版本开始就被内置到PHP系统中。

15.你可以用什么来打开 和 的文件? (雅虎)

A.fget(); B.(); C.fopen(); D.(); 答:C fget() 不是 PHP 函数,会导致执行错误。 ()这不是 PHP 函数,会导致执行错误。 fopen() 这是正确的答案。 fopen() 可用于打开文件进行读取和写入。 ()这不是 PHP 函数,会导致执行错误。

php区分大小写吗_php中的函数名区分大小写吗_php大小写转换函数

16. 原则

它是一个模板引擎。 主要用来实现逻辑与外部内容的分离。 如果不使用模板,通常的做法是混合 PHP 代码和 HTML 代码。 使用模板后,可以将业务逻辑放在php文件中,而负责显示内容的模板则放在html文件中。 执行该方法时,读取模板文件,进行数据替换,生成编译文件。 之后每次访问都会直接访问编译后的文件。 读取编译后的文件节省了读取模板文件和字符串替换的时间,因此可以更快。 编译文件中的时间戳记录了模板文件的修改时间。 如果模板被修改了,可以检测到然后重新编译(编译保存的是静态内容,动态内容根据传入的参数而变化)。 如果启用缓存,则会根据编译后的文件生成缓存文件。 如果存在缓存文件,且访问时该缓存文件未过期,则直接访问该缓存文件。

相关主题1:HTML和PHP可以分开使用的模板

,等待

相关问题2:您用过模板引擎吗? 如果是,您使用的模板引擎的名称是什么?

17.如何在PHP中实现页面跳转

方法一:PHP函数跳转,缺点是头部之前不能有输出。 跳转后的程序继续执行,可以使用exit来中断后续程序的执行。 (":URL");//直接跳转 (":3;url=axgle.za.NET");//三秒后跳转

方法二:使用meta echo"";

18.PHP可以连接sql等吗? 数据库?

19.版本控制使用哪些工具?

SVN 或 CVS

相关问题:你用过版本控制软件吗? 如果是,您使用的版本控制软件的名称是什么?

-1.2.6

20、编写正则表达式过滤网页上所有JS/VBS脚本(即去掉标签及其内容):

过滤脚本参考:

<?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);//以下内容不显示:脚本内容
?>

21.给定一行文本$,如何编写正则表达式来删除所有HTML标签?

方案一、使用PHP内置函数()去除HTML标签

方案二,自定义函数,如下:

<?php
    header("content-type:text/html;charset=utf-8");
  
    function strip_html_tags($str){
        $pattern = '/<("[^"]*"|\'[^\']\*\'|[^>"\'])*>/';
        return preg_replace($pattern,'',$str);
    }
  
    // 实例
    $html = '

ddddd

'; echo strip_html_tags($html); echo "
"; $html = '

bb
aaa

'; echo strip_html_tags($html); ?>

22.请写一个函数来验证邮件格式是否正确(需要正则表达式)(新浪)

('/^[\w\-\.]+@[\w\-]+(\.\w+)+$/',$email);

相关问题:请使用正则表达式编写一个函数来验证电子邮件的格式是否正确。 (辛仲仁云)

23、请提供POSIX风格和Perl兼容正则表达式的主要功能的类比(腾讯)

主要有以下三个区别:

()里面的正则表达式可以写成:“/.xxx/”,()里面的正则表达式需要写成“xxx”

() 可以操作数组,但 () 不能操作

反向引用时使用()时,可以使用0-99,()的最大数量为9。

使用与 Perl 兼容的正则表达式语法的 () 函数通常比 ereg() 更快。

24、请写出并解释一下如何在命令行上运行PHP脚本(写出两种方式)并同时向PHP脚本传递参数? (腾讯)

首先进入php安装目录 php -fd:/wamp/www/1.php 其中-f参数指定要执行的php文件 php -r(); 其中-r表示直接执行php代码,不写开始和结束标签

25、使用正则表达式提取标记语言(html或xml)代码段中指定标签的指定属性值(需要考虑属性值不规则,如不区分大小写、中间有空格)属性名称值和等号)等等)。 这里假设需要提取test标签的attr属性值。 请自行构造包含该标签的字符串(腾讯)

编写以下函数:

<?php
    header("content-type:text/html;charset=utf-8");
  
    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"
\$arr[6]={$arr[6]}"; }else{ echo"
没找到。"; } } // 示例 $str1=""; getAttrValue($str1,"test","attr");//找test标签中attr属性的值,结果为ddd $str2=""; getAttrValue($str2,"test2","t1");//找test2标签中t1属性的值,结果为t1 value ?>

26.该代码的作用是什么? 那里发生了什么事。日期); (雅虎)

这是将日期从 MM/DD/YYYY 格式转换为 DD/MM/YYYY 格式。 产出 2003 年 8 月 26 日

27.你会用什么来打开新页面? (雅虎)

A.redir() B.() C.() D.() 答案:B redir() 这不是 PHP 函数,会导致执行错误。 () 这是正确答案。 ()函数发送标头信息,可用于将浏览器重定向到另一个页面,如:(“:/”)。 ()这不是 PHP 函数,会导致执行错误。 ()这不是 PHP 函数,会导致执行错误。

28.当从HTML表单和.(腾讯)A.,B.,显示C.,D.时,答案:C

29、函数的参数不能是变量的引用,除非在php.ini中设置____为on。调用函数时是否启用强制参数按引用传递

30、HTML语言中,可以通过页面头部的meta标签来输出文件的编码格式。 以下是标准的元语句。 请使用PHP语言编写一个函数,将类似的元标记转换为标准的HTML页面。 中的一些值改为big5。 (新浪)

请注意:(1)需要处理完整的html页面,即不仅仅是这个meta语句(2)忽略大小写(3)'和"在这里可以互换(4)'-Type'两边的引号都是可以的被忽略,但'text/html;=gbk'两边不行 (5) 注意处理多余的空格,正则表达式写成:$reg1="/()/i";

标签: 函数 新浪 表达式

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码