ホームページ > バックエンド開発 > PHPチュートリアル > 古典的な PHP コア テクノロジの面接の質問の概要

古典的な PHP コア テクノロジの面接の質問の概要

藏色散人
リリース: 2023-04-10 06:30:01
転載
2840 人が閲覧しました

この記事は、古典的な 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 でセーフモードをオンにするとどのような機能が影響を受けますか?少なくとも 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 は、純粋なガベージ コレクション メカニズムである参照カウントを使用します。各オブジェクトには参照カウンタが含まれており、オブジェクトに接続されている参照ごとにカウンタが 1 ずつ増加します。参照がリビング スペースから出るか、NULL に設定されると、カウンターは 1 ずつ減らされます。オブジェクトの参照カウンタがゼロになると、PHP はそのオブジェクトを使用する必要がなくなったことを認識し、そのオブジェクトが占有しているメモリ領域を解放します。

6. 複数のプロセスが同じファイルに同時に正常に書き込むことができるように、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);
?>
ログイン後にコピー

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);
?>
ログイン後にコピー

関連トピック: ファイルの拡張子を取得するには 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;
    }
?>
ログイン後にコピー

無限分類を実現するために再帰的に走査する関数を作成します

<?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 />";
?>
ログイン後にコピー

10. 2 つのファイルの相対パスを計算する関数を作成します、 b='/a/b/12/34/c.php' など; a の計算された相対パスは ../../c/d

$readcontents=fopen("http://www.phpres.com/index.html","rb");
$contents=stream_get_contents($readcontents);
fclose($readcontents);
echo $contents;
ログイン後にコピー

11.mysql_fetch_row () および mysql_fetch_array である必要があります。 () 違いは何ですか?

mysql_fetch_row () はデータベース列を 0 から始まる配列に格納します。最初の列は配列のインデックス 0、2 番目の列はインデックス 1 などになります。

mysql_fetch_assoc () は、データベースの列を連想配列に格納します。配列のインデックスはフィールド名です。たとえば、データベース クエリは 3 つのフィールド「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 などの Web ページ アドレスがありますが、そのコンテンツを取得するにはどうすればよいですか?

方法 1 (PHP5 以降の場合):

echo file_get_contents("http://www.phpres.com/index.html");
ログイン後にコピー

方法 2:

header("Location:网址");//直接跳转
header("refresh:3;url=http://axgle.za.NET");//三秒后跳转
ログイン後にコピー
ログイン後にコピー

13. mvc の理解について話す

これは、モデル、ビュー、およびcontrol コントローラー アプリケーションが完了しました。モデル層はデータの提供を担当し、データベースに関連する操作は処理のためにモデル層に渡されます。

ビュー層は対話型インターフェイスを提供し、データを出力します。

コントローラーは、対話型インターフェイスを提供し、データを出力します。レイヤーはリクエストを受信し、それを対応するモデルに配布して処理し、ビューレイヤーを呼び出して表示します。

14.GD ライブラリは何をしますか?

GD ライブラリは、画像を処理するための一連の API を提供します。GD ライブラリを使用して、画像を処理したり、画像を生成したりできます。 Web サイトでは、GD ライブラリは通常、サムネイルの生成や画像への透かしの追加、または Web サイト データに関するレポートの生成に使用されます。 GD はバージョン 4.3.0 以降、PHP システムに組み込まれています。

15.読み取りと書き込みのためにファイルを開くために使用できる関数は何ですか?

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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート