加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php面试题之PHP核心技术

发布时间:2020-05-25 08:23:57 所属栏目:PHP 来源:互联网
导读:一、PHP核心技术 更多PHP相关知识请关注我的专栏PHPzhuanlan.zhihu.com 1.写出一个能创建多级目录的PHP函数(新浪网技术部) lt;?php /** * 创建多级目录 *

一、PHP核心技术

更多PHP相关知识请关注我的专栏PHPzhuanlan.zhihu.com

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.写出smarty模板的特点(新浪网技术部)

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

3.打开php.ini中的safe_mode,会影响哪些函数?至少说出6个。(新浪)

safe_mode,PHP安全模式,它提供一个基本安全的共享环境,在一个有多个用户账户存在的php开发的web服务器上。当安全模式打开的时候,一些函数将被完全的禁止,而另一些函数的功能将会受到限制,如:chdir,move_uploaded_file,chgrp,parse_ini_file,chown,rmdir,copy,rename,fopen,require,mkdir,unlink等。
注意,在php5.3以上版本,safe_mode被弃用,在php5.4以上版本,则将此特性完全去除了。

4.抓取远程图片到本地,你会用什么函数?(http://51.com笔试题)

file_get_contents或者curl

5.PHP的垃圾收集机制是怎样的(腾讯)

PHP可以自动进行内存管理,清除不再需要的对象。
PHP使用了引用计数(reference counting)这种单纯的垃圾回收(garbage collection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为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里取出文件的扩展名,例如:

http://www.sina.com.cn/abc/de/fg.php?id=1需要取出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 "<br />";

    echo getExt2($path);

?>

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

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 "<br />";

    echo releative_path($a,$c);//结果是a/b/c/d

    echo "<br />";

    echo releative_path($a,$d);//结果是./

    echo "<br />";

?>

11.mysql_fetch_row()和mysql_fetch_array()有什么分别?

mysql_fetch_row()把数据库的一列储存在一个以零为基数的数组中,第一栏在数组的索引0,第二栏在索引1,依此类推。
mysql_fetch_assoc()把数据库的一列储存在一个关联数组中,数组的索引就是字段名称,例如我的数据库查询送回“first_name”、“last_name”、“email”三个字段,数组的索引便是“first_name”、“last_name”和“email”。
mysql_fetch_array()可以同时送回mysql_fetch_row()和mysql_fetch_assoc()的值。

12.有一个网页地址,比如PHP开发资源网主页:http://www.phpres.com/index.html,如何得到它的内容?

方法1(对于PHP5及更高版本):

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

$contents=stream_get_contents($readcontents);

fclose($readcontents);

echo $contents;

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

13.谈谈对mvc的认识

由模型(model),视图(view),控制器(controller)完成的应用程序。
model层负责提供数据,和数据库有关的操作都交给模型层来处理,view层则提供交互的界面,并输出数据,而controller层则负责接收请求,并分发给相应的model来处理,然后调用view层来显示。

14.What does the GD library do?(Yahoo)

GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。自从PHP 4.3.0版本后GD便内建在PHP系统中。

15.What function can you use to open a file for reading and writing?(Yahoo)

A.fget();
B.file_open();
C.fopen();
D.open_file();
答案:C
fget()这不是一个PHP函数,会引致执行错误。
file_open()这不是一个PHP函数,会引致执行错误。
fopen()这是正确答案,fopen()可以用来开启档案以便读写。
open_file()这不是一个PHP函数,会引致执行错误。

16.Smarty的原理

smarty是一个模板引擎,使用smarty主要是为了实现逻辑和外在内容的分离,如果不使用模板的话,通常的做法就是php代码和html代码混编。使用了模板之后,则可以将业务逻辑都放到php文件中,而负责显示内容的模板则放到html文件中。
Smarty在执行display方法的时候,读取模板文件,并进行数据替换,生成编译文件,之后每次访问都会直接访问编译文件,读取编译文件省去了读取模板文件,和字符串替换的时间,所以可以更快,编译文件里时间戳记录模板文件修改时间,如果模板被修改过就可以检测到,然后重新编译(编译是把静态内容保存起来,动态内容根据传入的参数不同而不同)。
如果启用了缓存,则会根据编译文件生成缓存文件,在访问的时候如果有缓存文件并且缓存文件没有过期,则直接访问缓存文件。

相关题目1:能够使HTML和PHP分离开使用的模板

smarty,phplib等

相关题目2:您是否用过模板引擎?如果有您用的模板引擎的名字是?

Smarty

17.PHP如何实现页面跳转

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读