ホームページ > バックエンド開発 > 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 を見つけるには、PHP の独自の処理関数を使用する必要があります。 get_ext1(filename)、getext2(file_name) などの関数にカプセル化することができます

フォーラムで無限分類の実装原理を簡単に説明します

次のようにカテゴリ テーブルを作成します。 :

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. Web ページ上のすべての 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);//以下内容不显示:脚本内容
?>
ログイン後にコピー

5. マルチレベルのディレクトリを作成できる PHP 関数を作成します

6. PHP はメモリを自動的に管理し、不要なオブジェクトをクリアします。もっと長く必要です。 PHP は、参照カウントと呼ばれる単純なガベージ コレクション メカニズムを使用します。各オブジェクトには参照カウンタが含まれており、オブジェクトに接続されている参照ごとにカウンタが 1 ずつ増加します。参照がリビング スペースを離れるか、NULL に設定されると、カウンターは 1 ずつ減らされます。オブジェクトの参照カウンタがゼロになると、PHP はそのオブジェクトを使用する必要がなくなったことを認識し、そのオブジェクトが占有しているメモリ領域を解放します。

7. フォルダー内のすべてのファイルとサブフォルダーを走査できる関数を作成します

<?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 "创建目录失败";
            }
        }
    }?>
ログイン後にコピー

8. PHP で文字列が有効な日付パターンであるかどうかを判断する方法: 2007-03-13 13:13 :13。コードは 5 行以内である必要があります

<?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 PHP で配列のキー値を取得するにはどうすればよいですか?

配列内の現在の要素のキー名を取得するには key() を使用し、現在の要素の値を返すには current() を使用します。 array_keys() を使用して、配列内のすべてのキー名を取得します。 foreach 構造体 foreach($arr as key=>value) を使用して、キーと値を通じてそれぞれキー名と値を取得します。



10. テンプレートがスマートなテンプレートの場合。セクションステートメントを使用して $data という名前のグループを表示する方法。例:

<?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)?>
ログイン後にコピー
テンプレート ページにコードを書きますか? foreach文を使用する場合、どのように表示すればよいでしょうか?

セクションステートメントを使用する:

$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}>
ログイン後にコピー

概要:

この記事では、主に php の面接の質問におけるコア php テクノロジーについてまとめています。初心者には少し詳しくなりますが、経験豊富な友人にとっては、これは確かに良い選択です。お役に立てれば!

関連するおすすめ:

PHPの面接の質問における筆記試験の質問の概要


2017年のPHPの面接の質問と回答の最も完全な要約


PHPの面接の質問におけるThinkphpの質問の概要

2017年採用シーズン:PHP面接の質問超まとめ!

以上がPHP面接の質問におけるPHPコアテクノロジーに関する質問の共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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