總結PHP核心技術經典面試題

藏色散人
發布: 2023-04-10 06:30:01
轉載
2791 人瀏覽過

這篇文章向大家彙整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. 寫出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. 抓取遠端圖片到本地,你會用什麼函數?

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[&#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);
?>
登入後複製

相關題目:使用五種以上方式取得一個檔案的副檔名,要求: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

<?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,第二欄在索引 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?

GD 函式庫提供了一系列用來處理圖片的 API,使用 GD 函式庫可以處理圖片,或產生圖片。在網站上 GD 庫通常用來產生縮圖或用來為圖片加浮水印或對網站資料產生報表。自從 PHP 4.3.0 版本後 GD 便內建於 PHP 系統。

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

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 如何实现页面跳转

方法一:php 函数跳转,缺点,header 头之前不能有输出,跳转后的程序继续执行,可用 exit 中断执行后面的程序。

header("Location:网址");//直接跳转
header("refresh:3;url=http://axgle.za.NET");//三秒后跳转
登入後複製

方法二:利用 meta

echo"<meta http-equiv=refresh content=&#39;0;url=网址&#39;>";
登入後複製

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

可以

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

SVN 或者 CVS,Git

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

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?

方案一,使用 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(&#39;/^[w-.]+@[w-]+(.w+)+$/&#39;,$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;"]*)())*s+".$attrName."s*=s*([&#39;"]?)([^&#39;"]*)()(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);

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

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

A.redir()

B.header()

C.location()

D.redirect()

答案:B

redir () 这不是一个 PHP 函数,会引致执行错误。

header () 这个是正确答案,header () 函数发送头信息,可以用来使浏览器转向到另一个页面,例如:header (“Location: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="/(<metas*http-equivs*=s*([&#39;"]?)Content-Type()s*contents*=s*([&#39;"])text/html;charset=)(UTF-8)()(s*/?>)/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. 哪个选项会匹配下边的这个正则表达式?(/.*xyzd/)

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

<meta http-equiv="Content-Type"content="text/html;charset=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 的实现原理。

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 Hs 的格式输出?

使用 {$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:srcinit.php:7) in D:srcinit.php on line10 通常什么情况下 php 会报该警告信息?

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

以上是總結PHP核心技術經典面試題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
php
來源:learnku.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板