> 백엔드 개발 > PHP 튜토리얼 > PHP 면접 질문에서 PHP 핵심 기술 문제 공유

PHP 면접 질문에서 PHP 핵심 기술 문제 공유

黄舟
풀어 주다: 2023-03-17 09:28:01
원래의
2495명이 탐색했습니다.

이전 기사에서는 PHP 면접 질문 요약과 PHP 면접 질문의 thinkphp 및 필기 질문 요약을 소개했습니다. 이는 초보자와 업무 경험이 거의 없는 친구에게도 충분하지만 일부 전문가 및 심지어 3~4년 정도 일한 친구들은 앞서 소개해드린 PHP 면접 질문이 확실히 부족하다고 하셔서 오늘은 PHP 면접 질문에 PHP 핵심 기술을 정리해보겠습니다!

PHP 핵심 기술

1. 여러 프로세스가 동시에 동일한 파일을 성공적으로 쓸 수 있도록 PHP 코드를 작성하세요

핵심 아이디어: 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. 최대한 효율적으로 함수를 작성하고 표준 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[&#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 = "http://www.php.cn/abc/de/fg.php?id=1";    
echo getExt1($path);    
echo "<br />";    
echo getExt2($path);?>
로그인 후 복사

관련 주제: 파일 확장자를 얻으려면 5개 이상의 방법을 사용하십시오. 요구사항: dir/upload.image.jpg .jpg 또는 jpg를 찾으려면 PHP 자체 처리 기능을 사용해야 합니다. 메소드는 명백히 반복될 수 없습니다. get_ext1(파일명), getext2(파일명)

3. 포럼에서 무한 분류의 구현 원리를 간략하게 설명하세요

다음과 같이 카테고리 테이블을 생성하세요. :

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;
로그인 후 복사

재귀적으로 순회하는 함수 작성, 무제한 분류 달성

<?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. 웹 페이지의 모든 JS/VBS 스크립트를 필터링하는 정규식을 작성합니다(즉, 스크립트 태그와 해당 내용을 제거합니다).

필터 자바스크립트 스크립트 참조:

<?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. 다중 레벨 디렉토리를 생성할 수 있는 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는 참조 카운팅이라는 간단한 가비지 수집 메커니즘을 사용합니다. 각 개체에는 참조 카운터가 포함되어 있으며 개체에 연결된 각 참조는 카운터를 1씩 증가시킵니다. 참조가 생활 공간을 벗어나거나 NULL로 설정되면 카운터가 1씩 감소합니다. 객체의 참조 카운터가 0에 도달하면 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(&#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. PHP에서 배열의 키 값을 얻는 방법은 무엇입니까?

배열에 있는 현재 요소의 키 이름을 가져오려면 key()를 사용하고, 현재 요소의 값을 반환하려면 current()를 사용하세요. array_keys()를 사용하여 배열의 모든 키 이름을 가져옵니다.

foreach 구조 foreach($arr as key=>value)를 사용하여 키와 값을 통해 각각 키 이름과 값을 얻습니다.



10. 템플릿이 스마트한 템플릿이라면. $data라는 그룹을 표시하기 위해 섹션 문을 사용하는 방법. 예:

$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;)
);
로그인 후 복사
템플릿 페이지에 코드를 작성하시겠습니까? foreach 문을 사용하는 경우 어떻게 표시합니까?

섹션 문 사용:

<{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 면접 질문의 필기 시험 문제 요약


2017년 PHP 면접 질문 및 답변의 가장 완전한 요약


PHP 면접 질문의 Thinkphp 질문 요약

2017 리크루팅 시즌 : PHP 면접 질문 완전 요약!

위 내용은 PHP 면접 질문에서 PHP 핵심 기술 문제 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿