> 백엔드 개발 > PHP 튜토리얼 > 2018php 최신 인터뷰 질문 PHP 핵심 기술

2018php 최신 인터뷰 질문 PHP 핵심 기술

不言
풀어 주다: 2023-04-03 12:00:02
원래의
18491명이 탐색했습니다.

이 글은 2018년 PHP 면접 질문에 대한 최신 PHP 핵심 기술을 공유합니다. 도움이 필요한 친구들이 참고할 수 있습니다.

관련 추천: "2019 PHP 면접 질문 요약(모음)"

1. PHP 핵심 기술

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에서 safe_mode를 열고, 어떤 기능을 하게 될까요? 체하는? 적어도 6명을 말하세요. (Sina)

safe_mode, PHP 안전 모드는 여러 사용자 계정이 있는 PHP 개발 웹 서버에서 기본적인 보안 공유 환경을 제공합니다. 안전 모드가 켜지면 일부 기능은 완전히 금지되고 chdir, move_uploaded_file, chgrp,parse_ini_file, chown, rmdir, copy, rename, fopen, require, mkdir, unlink와 같은 다른 기능의 기능은 제한됩니다. 등.
php5.3 이상에서는 safe_mode가 더 이상 사용되지 않으며 php5.4 이상에서는 이 기능이 완전히 제거되었습니다.

4. 원격 이미지를 로컬로 캡처하려면 어떤 기능을 사용하시겠습니까?(51.com 작성 테스트 질문)

file_get_contents 또는 컬

5. PHP(Tencent)의 가비지 수집 메커니즘은 무엇입니까? 자동으로 메모리를 관리하고 더 이상 필요하지 않은 개체를 지울 수 있습니다. PHP는 간단한 가비지 수집인 참조 카운팅을 사용합니다. 수집) 메커니즘. 각 개체에는 참조 카운터가 포함되어 있으며 개체에 연결된 각 참조는 카운터를 1씩 증가시킵니다. 참조가 생활 공간을 벗어나거나 NULL로 설정되면 카운터가 1씩 감소합니다. 객체의 참조 카운터가 0에 도달하면 PHP는 더 이상 객체를 사용할 필요가 없다는 것을 알고 객체가 차지하는 메모리 공간을 해제합니다.


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

핵심 아이디어: 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);
?>
로그인 후 복사

7. , 표준 URL에서 파일 확장자를 가져옵니다. 예: http://www.sina.com.cn/abc/de/fg.php?id=1 php 또는 .php(Sina )

<?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[&#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.sina.com.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(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&#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;
    }
?>
로그인 후 복사

10 b='/와 같이 두 파일의 상대 경로를 계산하는 함수를 작성합니다. a/b /12/34/c.php'; 계산된 a의 상대 경로는 ../../c/d (Sina)

<?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(&#39;./&#39;);
        }
 
        $return_path = array_merge($return_path,array_slice($arr1,$i));
        return implode(&#39;/&#39;,$return_path);
    }
 
    $a = &#39;/a/b/c/d/e.php&#39;;
    $b = &#39;/a/b/12/34/c.php&#39;;
    $c = &#39;/e/b/c/d/f.php&#39;;
    $d = &#39;/a/b/c/d/g.php&#39;;
 
    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부터 시작하는 배열에 데이터베이스 열을 저장합니다. 첫 번째 열은 배열의 인덱스 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 Development Resource Network 홈페이지와 같은 웹페이지 주소가 있습니다: http://www.phpres.com/index.html, 콘텐츠를 얻는 방법은 무엇입니까?

방법 1(for 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에 대한 이해를 이야기해 보세요

모델, 뷰, 컨트롤러로 완성되는 애플리케이션입니다. 모델 레이어는 데이터 제공을 담당하고, 데이터베이스 관련 작업은 처리를 위해 모델 레이어로 넘겨지며, 뷰 레이어는 대화형 인터페이스를 제공하고 데이터를 출력하며, 컨트롤러 레이어는 요청을 수신하고 배포하는 역할을 합니다. 처리할 해당 모델을 호출하여 표시합니다.


14.GD 라이브러리는 무엇을 합니까?(Yahoo)

GD 라이브러리는 이미지 처리를 위한 일련의 API를 제공합니다. GD 라이브러리를 사용하여 이미지를 생성할 수 있습니다. 웹사이트에서 GD 라이브러리는 일반적으로 썸네일을 생성하거나 이미지에 워터마크를 추가하거나 웹사이트 데이터에 대한 보고서를 생성하는 데 사용됩니다. GD는 PHP 버전 4.3.0부터 PHP 시스템에 내장되었습니다.

15.읽고 쓰기 위해 파일을 여는 데 사용할 수 있는 기능은 무엇인가요?(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主要是为了实现逻辑和外在内容的分离,如果不使用模板的话,通常的做法就是php代码和html代码混编。使用了模板之后,则可以将业务逻辑都放到php文件中,而负责显示内容的模板则放到html文件中。
Smarty在执行display方法的时候,读取模板文件,并进行数据替换,生成编译文件,之后每次访问都会直接访问编译文件,读取编译文件省去了读取模板文件,和字符串替换的时间,所以可以更快,编译文件里时间戳记录模板文件修改时间,如果模板被修改过就可以检测到,然后重新编译(编译是把静态内容保存起来,动态内容根据传入的参数不同而不同)。
如果启用了缓存,则会根据编译文件生成缓存文件,在访问的时候如果有缓存文件并且缓存文件没有过期,则直接访问缓存文件。

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

smarty,phplib等

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

Smarty

17.PHP如何实现页面跳转

方法一:php函数跳转,缺点,header头之前不能有输出,跳转后的程序继续执行,可用exit中断执行后面的程序。
header("Location:网址");//直接跳转
header("refresh:3;url=http://axgle.za.NET");//三秒后跳转

方法二:利用meta
echo"";

18.PHP可以和sql server/oracle等数据库连接吗?

可以

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

SVN或者CVS

相关题目:您是否用过版本控制软件?如果有您用的版本控制软件的名字是?

TortoiseSVN-1.2.6

20.写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉):

过滤JavaScript脚本参考:

<?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);//以下内容不显示:脚本内容
?>
로그인 후 복사

21.Given a line of text $string,how would you write a regular expression to strip all the HTML tags from it?(Yahoo)

方案一,使用PHP内建函数strip_tags()除去HTML标签
方案二,自定义函数,如下:

<?php
    header("content-type:text/html;charset=utf-8");
 
    function strip_html_tags($str){
        $pattern = &#39;/<("[^"]*"|\&#39;[^\&#39;]\*\&#39;|[^>"\&#39;])*>/&#39;;
        return preg_replace($pattern,&#39;&#39;,$str);
    }
 
    // 实例
    $html = &#39;<p id="">ddddd<br /></p>&#39;;
    echo strip_html_tags($html);
    echo "<br />";
 
    $html = &#39;<p id=">">bb<br />aaa<br /></p>&#39;;
    echo strip_html_tags($html);
?>
로그인 후 복사

22.请写一个函数验证电子邮件的格式是否正确(要求使用正则)(新浪)

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

相关题目:请用正则表达式写一个函数,验证电子邮件的格式是否正确。(鑫众人云)

23.请对POSIX风格和兼容Perl风格两种正则表达式的主要函数进行类比说明(腾讯)

主要区别有以下三种:

preg_replace()里面的正则可以写成型如:"/.xxx/"而ereg_replace()里面的正则需写成型如 "xxx"

preg_replace()能操作数组,而ereg_replace()不可以

在逆向引用用preg_replace()可使用0-99个,而ereg_replace()最多为9个

使用Perl兼容正则表达式语法的preg_match()函数通常是比ereg()更快的替代方案。

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

首先进入php安装目录
php -f d:/wamp/www/1.php 其中-f参数指定要执行的php文件
php -r phpinfo(); 其中-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*([\\&#39;\\\"]?)([^\\&#39;\\\"]*)(\\2))*\\s+".$attrName."\\s*=\\s*([\\&#39;\\\"]?)([^\\&#39;\\\"]*)(\\5)(\\s+\\w+\\s*=\\s*([\\&#39;\\\"]?)([^\\&#39;\\\"]*)(\\9))*\\s*>/i";
 
        $arr=array();
        $re=preg_match($pattern1,$str,$arr);
 
        if($re){
            echo"<br/>\$arr[6]={$arr[6]}";
        }else{
            echo"<br/>没找到。";
        }
    }
 
    // 示例
    $str1="<test attr=&#39;ddd&#39;>";
    getAttrValue($str1,"test","attr");//找test标签中attr属性的值,结果为ddd
    $str2="<test2 attr=&#39;ddd&#39;attr2=&#39;ddd2&#39;t1=\"t1 value\"t2=&#39;t2 value&#39;>";
    getAttrValue($str2,"test2","t1");//找test2标签中t1属性的值,结果为t1 value
?>
로그인 후 복사

26.What does the following code do?Explain what's going on there.date);(Yahoo)

这是把一个日期从MM/DD/YYYY的格式转为DD/MM/YYYY格式。
输出26/08/2003

27.What function would you use to redirect the browser to a new page?(Yahoo)

A.redir()
B.header()
C.location()
D.redirect()
答案:B
redir()这不是一个PHP函数,会引致执行错误。
header()这个是正确答案,header()函数发送头信息,可以用来使浏览器转向到另一个页面,例如:header("Location:http://www.search-this.com/")。
location()这不是一个PHP函数,会引致执行错误。
redirect()这不是一个PHP函数,会引致执行错误。

28.When turned on____________will_________your script with different variables from
HTML forms and cookies.(腾讯)

A.show_errors,enable
B.show_errors,show
C.register_globals,enhance
D.register_globals,inject
答案:C

29.一个函数的参数不能是对变量的引用,除非在php.ini中把____设为on。
allow_call_time_pass_reference
是否启用在函数调用时强制参数被按照引用传递

30.在HTML语言中,页面头部的meta标记可以用来输出文件的编码格式,以下是一个标准的meta语句,请使用PHP语言写一个函数,把一个标准HTML页面���的类似meta标记中的charset部分值改为big5。(新浪)

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

31.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)
?>
로그인 후 복사

32.PHP中,如何获得一个数组的键值?(酷讯)

使用key()可以获得数组中当前元素的键名,使用current()则可以返回当前元素的值。
使用array_keys()则可以得到数组中所有的键名。
使用foreach结构foreach($arr as value)可以通过value分别获取键名和值。

33.如果模板是用smarty模板。怎样用section语句来显示一个名为$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语句:

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

34.哪个选项会匹配下边的这个正则表达式?(/.*xyz\d/)
A.*****xyz

B.*****xyz1
C.******xyz2
D.*xyz
答案:C

35.以下哪个错误无法被标准的错误控制器获取?

A.E_WARNING
B.E_USER_ERROR
C.E_PARSE
D.E_NOTICE
答案:B

36.以下哪种错误类型无法被自定义的错误处理器捕捉到?(奇矩互动)

A.E_WARNING
B.E_USER_ERROR
C.E_PARSE
D.E_NOTICE
答案:C

37.(^\s)|(\s$)这个正则表达式作用是:__________;

匹配以0个或多个空白符开头或者0个或多个空白符结尾的字符串

38.编写函数取得上一月的最后一天

<?php
    date_default_timezone_set(&#39;PRC&#39;);
 
    /**
     * 获取给定月份的上一月最后一天
     * @param $date string 给定日期
     * @return string 上一月最后一天
     */
    function get_last_month_last_day($date = &#39;&#39;){
        if ($date != &#39;&#39;) {
            $time = strtotime($date);
        } else {
            $time = time();
        }
        $day = date(&#39;j&#39;,$time);//获取该日期是当前月的第几天
        return date(&#39;Y-m-d&#39;,strtotime("-{$day} days",$time));
    }
 
    // 测试
    echo get_last_month_last_day();
    echo "<br />";
    echo get_last_month_last_day("2013-3-21");
?>
로그인 후 복사

39.在很多时候,我们可以通过apache的主配置文件来设置对test目录的访问权限控制,如http://IP/test请问如果需设置test下的一个子目录的访问控制权限,是否可以在主配置文件中修改,如果不可以应如何解决

可以,还可以在需要控制的子目录下创建.htaccess文件,写入访问控制。

40.如果我的网站用的utf-8编码,为防止乱码出现,都需要注意哪些地方?

从以下几个方面考虑:

数据库中库和表都用utf8编码

php连接mysql,指定数据库编码为utf8 mysql_query(“set names utf8”);

php文件指定头部编码为utf-8header(“content-type:text/html;charset=utf-8”);

网站下所有文件的编码为utf8

html文件指定编码为utf-8

41.在url中用get传值的时候,若中文出现乱码,应该用哪个函数对中文进行编码?

urlencode()

42.写出两种对变量加密的函数?

md5(str);

43.如何把2009-9-2 10:30:25变成unix时间戳?

<?php
    date_default_timezone_set("PRC");
 
    // 将字符串转成Unix时间戳
    $unix_time = strtotime("2009-9-2 10:30:45");
    echo $unix_time;
    echo "<br />";
 
    // 格式化Unix时间戳为正常时间格式
    echo date("Y-m-d H:i:s",$unix_time);
?>
로그인 후 복사

44.如何把一个GB2312格式的字符串装换成UTF-8格式?

<?php
    iconv(&#39;GB2312&#39;,&#39;UTF-8&#39;,&#39;悄悄是别离的笙箫&#39;);
?>
로그인 후 복사

45.如果需要原样输出用户输入的内容,在数据入库前,要用哪个函数处理?

htmlspecialchars或者htmlentities

46.写出五种以上你使用过的PHP的扩展的名称(提示:常用的PHP扩展)

mb_sring、iconv、curl、GD、XML、socket、MySQL、PDO等

47.了解MVC模式吗?请写出三种以上目前PHP流行的MVC框架名称(不区分大小写)

FleaPHP、Zend Framework、CakePHP、Symfony、ThinkPHP、YII、CodeIgniter等

48.php中WEB上传文件的原理是什么,如何限制上传文件的大小?

上传文件的表单使用post方式,并且要在form中添加enctype='multipart/form-data'。
一般可以加上隐藏域:,位置在file域前面。
value的值是上传文件的客户端字节限制。可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。
使用file文件域来选择要上传的文件,当点击提交按钮之后,文件会被上传到服务器中的临时目录,在脚本运行结束时会被销毁,所以应该在脚本结束之前,将其移动到服务器上的某个目录下,可以通过函数move_uploaded_file()来移动临时文件,要获取临时文件的信息,使用$_FILES。

限制上传文件大小的因素有:

客户端的隐藏域MAX_FILE_SIZE的数值(可以被绕开)。

服务器端的upload_max_filesize,post_max_size和memory_limit。这几项不能够用脚本来设置。

自定义文件大小限制逻辑。即使服务器的限制是能自己决定,也会有需要个别考虑的情况。所以这个限制方式经常是必要的。

49.简述UBB code的实现原理。(YG)

UBB代码是HTML的一个变种,通过程序自定义我们的标签,比如“[a]PHP中UBB的使用[/a]”这样的标签,其实质就是查找[a][/a]标签,将其替换成的标准html,说白了,就是将标准的html标记通过技术手段使其简化,其输出出来的结果还是标准的html。
明白了ubb的原理,那么再制作一个简单的ubb编辑器就不难了,和fck之类的编辑器比较起来,ubb代码最大的优点就是代码简单,功能很少,简单的ubb只需要一个文件,而且ubb标签可以自己来定义,更改起来很方便,在php中就是利用替换函数就可以将
html进行标签化,输出时进行标签的转化。

50.怎么把文件保存到指定目录?怎么避免上传文件重名问题?

可以自己设置上传文件的保存目录,与文件名拼凑形成一个文件路径,使用move_uploaded_file(),就可以完成将文件保存到指定目录。
可以通过上传的文件名获取到文件后缀,然后使用时间戳+随机数+文件后缀的方式为文件重新命名,这样就避免了重名。

51._____函数能返回脚本里的任意行中调用的函数的名称。该函数同时还经常被用在调试中,用来判断错误是如何发生的。(奇矩互动)

debug_print_backtrace()

52.在Smarty模板语法中怎么能遍历数组ids

{section name=temp loop=$ids}
    {if $ids[temp].id==500}
        <span style=‘color:#f00;’>{$ids[temp].id}</span>
    {esle}
        {$ids[temp].id}
    {/if}
{/section}
로그인 후 복사

53.在Smarty模板语法中如何获取当前时间,并且使用Y-m-d H:i:s的格式输出?(亿邮)

使用{$smarty.now}来获取当前时间,得到的是unix系统时间戳
使用变量调节器进行格式化,如下:

{$smarty.now|date_format:“%Y-%m-%d%H:%M:%S”}
로그인 후 복사

54.在Smarty模板语法中如何获取php的全局环境变量(亿邮)

$smarty.get.变量 #显示通过get方式传过来的指定变量的值
$smarty.post.变量 #显示通过post方式传过来的指定变量的值
$smarty.cookies.变量 #显示通过cookie中指定变量的值
$smarty.server.SERVER_NAME #显示server变量值,$_SERVER系列变量
$smarty.env.PATH #显示系统环境变量值,$_ENV系列变量
$smarty.session.变量 #显示session中指定变量的值
$smarty.request.变量 #显示通过post、get、cookie中指定变量的值

55.在Smarty模板中如何用自定义函数(亿邮)

使用模板分隔符包含,传递参数则使用HTML属性的方式,例如:
{html_image file="pumpkin.jpg"}

56.列举出你所知道的php系统函数库例如,数学函数库(亿邮)

mysql,gd,pdo,XML,zip,filesystem,mail等

57.假如让你来写一个函数实现Utf-8转gb2312,那么函数的名称应该怎么命名?(亿邮)

utf8_to_gb2312或者utf8togb2312

58.请描述如下URL重写规则的用意。(卓望)

<IfModulemod_rewrite.c>
RewriteEngineon
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteBase/
RewriteRule./index.php[L]
</IfModule>
로그인 후 복사

如果REQUEST_FILENAME文件存在,就直接访问文件,不进行下面的rewrite规则,
如果REQUEST_FILENAME目录存在,就直接访问目录,不进行下面的rewrite规则,
RewriteRule./index.php[L]的意思是把所有的请求都给index.php处理。

59.Warning:Cannot modify header information-headers already sent by(output started at D:\src\init.php:7)in D:\src\init.php on line10通常什么情况下php会报该警告信息?(卓望)

一般是在header、set_cookie以及session_start函数前面有输出(包括空格)的情况下,会报该警告信息

위 내용은 2018php 최신 인터뷰 질문 PHP 핵심 기술의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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