Home  >  Article  >  Backend Development  >  Sharing of questions about PHP core technology in PHP interview questions

Sharing of questions about PHP core technology in PHP interview questions

黄舟
黄舟Original
2017-11-10 10:02:232456browse

In our previous article, we introduced a summary of PHP interview questions, as well as a summary of thinkphp and note-taking questions in PHP interview questions. These are enough for novices and friends with little work experience. But for some experts or even friends who have worked for three or four years, the PHP interview questions we introduced before are obviously not enough, so today we will summarize the PHP core technology in the PHP interview questions!

PHP core technology

1. Please write a piece of PHP code to ensure that multiple processes can write the same file successfully at the same time

Core idea: lock

<?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.Write a function to retrieve the file extension from a standard URL as efficiently as possible , for example: //m.sbmmt.com/abc/de/fg.php?id=1 Need to remove php or .php

<?php
    // 方案一
    function getExt1($url){
        $arr = parse_url($url);        
//Array ( [scheme] => http [host] => m.sbmmt.com [path] => /abc/de/fg.php [query] => id=1 )

        $file = basename($arr[&#39;path&#39;]);
        $ext = explode(&#39;.&#39;, $file);        
return $ext[count($ext)-1];
    }    // 方案二
    function getExt2($url){
        $url = basename($url);
        $pos1 = strpos($url,&#39;.&#39;);
        $pos2 = strpos($url,&#39;?&#39;);        
if (strstr($url,&#39;?&#39;)) {            
return substr($url,$pos1+1,$pos2-$pos1-1);
        } else {            
return substr($url,$pos1);
        }

    }

    $path = "//m.sbmmt.com/abc/de/fg.php?id=1";    
echo getExt1($path);    
echo "<br />";    
echo getExt2($path);?>

Related questions: Use more than five kinds Method to obtain the extension of a file, requirements: dir/upload.image.jpg, find .jpg or jpg, must use PHP's own processing function for processing, the method cannot be obviously repeated, can be encapsulated into a function, such as get_ext1(filename ),getext2(file_name)

3. Briefly describe the implementation principle of unlimited classification in the forum

Create the category table as follows:

CREATE TABLE category(
cat_id smallint unsigned not null auto_increment primary key comment&#39;类别ID&#39;,
cat_name VARCHAR(30)NOT NULL DEFAULT&#39;&#39;COMMENT&#39;类别名称&#39;,
parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT&#39;类别父ID&#39;)engine=MyISAM charset=utf8;

Write a function to traverse recursively to achieve infinite classification

<?php
    function tree($arr,$pid=0,$level=0){        
static $list = array();        
foreach ($arr as $v) {            //如果是顶级分类,则将其存到$list中,并以此节点为根节点,遍历其子节点
            if ($v[&#39;parent_id&#39;] == $pid) {
                $v[&#39;level&#39;] = $level;
                $list[] = $v;
                tree($arr,$v[&#39;cat_id&#39;],$level+1);
            }
        }        
return $list;
    }
?>

4. Write a regular expression to filter all JS/VBS scripts on the web page (ie. The script tag and its contents are removed)

Filter javascript script reference:

<?php
    header("content-type:text/html;charset=utf-8");

    $script = "以下内容不显示:<script type=&#39;text/javascript&#39;>alert(&#39;cc&#39;);</script>";
    $pattern = &#39;/<script[^>]*?>.*?</script>/si&#39;;    
echo preg_replace($pattern, "脚本内容", $script);//以下内容不显示:脚本内容
?>

5. Write a PHP function that can create multi-level directories

<?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. What is PHP’s garbage collection mechanism?

PHP can automatically manage memory and clear objects that are no longer needed.
PHP uses a simple garbage collection mechanism called reference counting. Each object contains a reference counter, and each reference connected to the object increases the counter by one. When reference leaves the living space or is set to NULL, the counter is decremented by 1. When an object's reference counter reaches zero, PHP knows that you no longer need to use the object and releases the memory space it occupies.

7. Write a function that can traverse all files and subfolders in a folder

<?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. How to determine whether a string is in PHP Is a legal date pattern: 2007-03-13 13:13:13. The code is required to be no more than 5 lines

<?php
    function checkDateTime($data){        
if (date(&#39;Y-m-d H:i:s&#39;,strtotime($data)) == $data) {            
return true;
        } else {            
return false;
        }
    }    // 示例
    $data = &#39;2015-06-20 13:35:42&#39;;
    var_dump(checkDateTime($data));//bool(true)

    $data = &#39;2015-06-36 13:35:42&#39;;
    var_dump(checkDateTime($data));//bool(false)?>

9. How to get the key value of an array in PHP?

Use key() to get the key name of the current element in the array, and use current() to return the value of the current element.
Use array_keys() to get all the key names in the array.
Use the foreach structure foreach($arr as key=>value) to obtain the key name and value respectively through key and value.

10. If the template is a smart template. How to use section statement to display a group named $data. For example:

$data=array(0=>array(&#39;id&#39;=>8,&#39;name&#39;=>&#39;name1&#39;),1=>array(&#39;id&#39;=>10,&#39;name&#39;=>&#39;name2&#39;),2=>array(&#39;id&#39;=>15,&#39;name&#39;=>&#39;name3&#39;)
);

Write the code on the template page? How to display it if using foreach statement?

Use section statement:

<{section name=test loop=$data start=0 step=1}>
id:<{$data[test].id}><br/>
name:<{$data[test].name}>
<br/>
<br/>
<{sectionelse}>
数组为空
<{/section}>

Use foreach statement:

<{foreach from=$data item=test}>
id:<{$test.id}><br/>
name:<{$test.name}>
<br/>
<br/>
<{foreachelse}>
数组为空
<{/foreach}>

Summary:

In our article, we mainly summarize for you the core technology of PHP in the PHP interview questions. It may be a bit in-depth for novices, but for experienced friends, this is indeed a good choice! Hope this helps!

related suggestion:

Summary of written test questions in php interview questions


The most complete summary of php interview questions and answers in 2017


Summary of Thinkphp questions in PHP interview questions

2017 recruitment season: Super summary of PHP interview questions!

The above is the detailed content of Sharing of questions about PHP core technology in PHP interview questions. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn