php面試題寶典

$url = 'https://www.baidu.com/sd/index.php?s=12';
        $filename = parse_url($url);
        vp($filename);
        /**
         * array(3) {
              ["scheme"]=>
              string(5) "https"
              ["host"]=>
              string(13) "www.baidu.com"
              ["path"]=>
              string(15) "/index.php/s/12"
            }
         */
        $file = basename($filename['path']);//獲得非參數的文件名
        vp(explode('.',$file)[1]);
        $html = ' <title>Bootstrap 模板</title>
      <!--網站描述信息-->
      <meta name="description" content="web小黑IT-專一於php、前端、C++等技術分享與我的學習路程" />
      <!--關鍵詞-->
      <meta name="keywords" content="php, web前端, C++, 算法, Bootstrap, jQuery, layui, 彙編程序設計, python" />
      <!--指定檢索信息-->
      <meta name="robots" content="index,follow" />
      <!--做者-->
      <meta name="author" content="webcyh<1992281294@qq.com>">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">';
      $rst = strip_tags($html,array('meta'));
      p($rst);
      p(count($rst));//count計算字符串時候永遠都是返回1
      //若是一個腳本沒法正確識別另外一個存在在另外一個平臺上的文件的行結尾時候 php.ini中能夠經過設置auto_detect_line_endings 來實現但系統保存文件的時候能夠自動檢測結束類型的目的 
      //要限制腳本只能訪問一個指定的文件夾能夠用open_basedir指定容許的文件夾
      

      //下面看一個例子
      $filepath = MI.'\Controller\face.txt';
      touch($filepath,0777);

      $file  = fopen($filepath,'w');
      fwrite($file,'這是一個測試');
      fclose($file);
      //判斷文件是否存在
      p($filepath);
      p(file_exists($filepath));//返回1
      //刪除該文件
    //  unlink($filepath);
      //這裏可能出現問題就是刪除該文件後下面的函數仍然輸出1
      //這是由於php會緩存某些文件系統函數的返回值 解決方法
      //clearstatcache()清理緩存
      p(file_exists($filepath));//返回1
      //寫一個函數來解決多線程同時讀寫一個文件的問題
      $fp = fopen($filepath);
      if(flock($fp,LOCK_EX)){//進行排他型鎖定
          fwrite($fp,'這是一個測試');
          flock($fp,LOCK_UN);//釋放鎖定
      }else{
          p('不能鎖定文件');
      }
      fclose($fp);

      //上傳的文件當中的size值的單位爲B(上傳以前先確保在php.ini當中已經打開文件上傳功能 默認上傳的文件大小爲2MB 設置file_upload_max)
      //這些文件在腳本執行期間保存在制定的臨時文件夾當中 爲了確保當前操做的文件是正確的方法有:
      //is_upload_file肯定該文件是經過http方式傳輸的
      //move_upload_file將文件移動到安全的位置
      
     
      //file_get_content 可使用context設置超時時間
      //file能夠安全的讀取二進制文件
      //在沒有上傳文件的時候$_FILES的值爲NULL
      //fputs用於上傳 寫入字符串到文件當中 不能下載ftp文件
      //readfile()用於輸出文件 輸出成功顯示字節數 不然爲false
      //
      //
      //注意php配置文件當中的open_basedir的使用
      //當設置爲/dir/user時候 客戶端能夠訪問
      // /dir/user 和 /dir/user1 也就是說這個限定的是前綴 若是指定在某一個目錄下可使用/dir/user/ 必須加斜槓
      // register_global 爲on 的時候將用戶傳遞過來的參數當作全局變量來使用 若是爲off這些參數只能到指定數組去取出來 好比post數組 get數組 files數組當中
      //disable_function能夠限制某些函數的使用 爲了保證服務器的安全應該將這些函數放在disable_function當中或者打開save_mode安全模式
      

      //文件操做函數
      //chown()
      //copy()、unlink、dirname、fclose、file(返回文件數組)、file_get_contents、fopen、fread(根據指定的讀取大小讀取)、filesize、filetype、fwrite、is_dir
      //
      //fstat基於文件指針工做
      //stat基於路徑工做
      //
      //讀取文件內容
      //while(!feof($fp)){
      //    echo fgets($fp);//讀取行 
      //}
      //fseek(0,SEEK_SET) 
      //文件開頭
      //CUR當前位置
      //END尾部位置
      //函數能夠移動文件指針在文件中的定位
      //
      //關於文件之間的競爭
      //flock是協議鎖定機制 即全部訪問次文件的線程必須使用flock不然仍是存在文件競爭
      //fopen打開的臨時文件也不能保證不競爭
      //建立的臨時目錄也出現競爭
      //mkdir這樣能夠保證任什麼時候刻 只有一個進程能處理這個文件夾保證操做的原子性
      //
      //
      //header函數主要功能
      //跳轉功能 header('Location://www.baidu.com/')
      //
      //指定網頁內容 header('Content-type:application/xml')告訴網頁這個是xml格式來解析內容分 若是爲header('Content-type:text/xml')會當中純文原本解析
      //
      //指定文件爲附件
      //header('Content-Disposition:attachment;filename="downloaded.pdf');這時候訪問該網頁會直接下載該文件到本地

 

http 和 ip 
     如何利用php解決http的無狀態本質?
     使用session和cookie
     
     http的Keep-Alice做用是什麼?
     使客戶端和服務端的連接持續有效
     避免創建或者從新創建連接 web服務基本都支持Keep-Alice
     
     缺點:持續保持連接 佔用資源影響性能
     解決方案:Keep-Alice:timeout=5,max=100;過時時間爲5s
     max爲最大請求數
     
     
     http請求須要經歷如下7個步驟
     創建TCP連接:web瀏覽器須要經過網絡與web服務器連接 經過TCP\IP完成
     web瀏覽器向web服務器發送請求命令:
     web瀏覽器發送請求頭信息 經過發送空白行說明發送結束
     web服務器應答:返回http協議的版本和應答狀態 例如:HTTP:1.1 200 OK
     web服務請發送應答頭信息:隨同應答發送數據或者被請求的文檔
     web服務器向瀏覽器發送數據
     web服務器關閉TCP鏈接
     
     通常來講web服務器發送完數據就會端來鏈接 能夠在瀏覽器或者服務器請求頭上添加
     Connection:keep-alive 這樣就能夠保持連接 瀏覽器就能夠繼續經過相同的連接發送請求 
     如何理解http的gzip壓縮傳輸
     這個在Linux平臺上使用十分普遍、先將文本壓縮爲.gz而後傳輸給瀏覽器 瀏覽器賦值解壓縮呈現給用戶 下降網絡傳輸的字節數 加快網頁傳輸速度
     https佔用143端口 爲使用SSL/TSL證書保證加密傳輸
     http爲明文傳輸 佔用80端口 使用TCP/IP協議容易致使數據泄露 和被篡改 甚至收到流量劫持 釣魚攻擊等等
     
     
     
     正則表達式的使用
     常見關鍵字的含義
     $ 匹配字符串的結束位置
     +? 匹配一個以上字符
     ^ 匹配字符串的開始
     [^]匹配範圍之外
     ?<gl>分組別名
     ?!匹配後面不是什麼
     ?<!匹配前面不是
     ?:匹配但不加入分組
     
     
     
     面向對象與設計模式
     面向對象是顯示世界的抽象好理解 是程序的一種設計方式 提升程序的重用性以及使程序結構更加清晰
     特徵:封裝(隱藏內部細節 公開接口) 繼承(能夠重寫父類方法 擴展方法) 多態
     
     序列化一個對象的時候只會保存對象的變量但不會保存方法 只保存類的名稱
     
     當子類設置了構造函數 構造對象的時候 構造函數將父類的構造函數覆蓋掉 要想調用父類構造函數 應該在子類構造函數當中添加 parent::__construct();
     類應該事先接口的全部方法 不然報錯
     漢字也能夠做爲類名稱
     php4.0當中還沒有出現類 這些概念
     get_class();獲取對象的類名
     class_exists();判斷是否存在指定的類
     php當中的垃圾回收機制
     當php對象沒有變量指向對象時候 該對象變爲垃圾將在內存中被銷燬 能夠防止內存溢出
     內存當中有變量計數當前的對象的引用數量 當爲0的時候變量被銷燬
     
     面向對象存在的5大基本原則:
     單一原則(一個類只作一件事 低耦合高內聚)
     開放封閉原則(可擴展 儘量不修改)
     替換原則()
     依賴原則
     接口分離原則(一個功能一個接口 下降類之間的耦合性 提升代碼的靈活性 提升穩定性)
     final禁止子類繼承
     
     MVC是一種設計模式 由模型層 邏輯層 視圖層組成用戶經過入口訪問到控制器 控制器從邏輯層獲取數據而後分配視圖,並加載數據到視圖層
     用戶經過視圖層操做箱邏輯層反饋 若是涉及數據庫的操做 那麼將在模型層中對數據庫的增刪改查最後邏輯層將執行完的結構返回到視圖層
     
     MVC的缺點:
     增長系統結構的實現的複雜性 對於簡單的界面若是嚴格使用MVC會下降系統執行效率
     視圖和控制器之間過於緊密鏈接
     視圖對模型數據的低效率訪問
     
     
     smarty的簡單使用 基於MVC模型開發 實現先後端分離
     
     單一入口文件:一個文件處理全部的http請求
     優勢:集中進行安全性檢查
     對特殊字符 記錄日誌 等等集中處理的任務
     缺點:url不美觀 對搜索引擎不友好
     
     php緩存技術有如下幾種:全頁面靜態化緩存技術、頁面部分緩存技術、數據緩存技術、查詢緩存技術
     
     在軟件結構上如何解決大流量網站的訪問量問題
     :
     首先得是高配置服務器
     減小數據庫的訪問 使用redis memcache進行數據的緩存 儘可能使用靜態頁面
     禁止外部盜鏈
     控制大文件的下載建議不超過2MB
     實心主機分流 
     使用流量分析系統軟件 針對性的優化頁面 提升訪問速度
     
     
     web服務器
     nginx主要用哪些協議?
     TCP/IP HTTP HTTPS Webstocket
     nginx如何實現pathinfo?
     SERVER['PATH_INFO']
     pathinfo()
     nginx默認不會設置path_inf
     o這個全局變量 須要設置cgi.fix_pathinfo=1但這樣會帶來安全隱患 若是設置爲0 php就沒法獲取這個全局變量 哪些依賴PATH_INFO進行URL美化的程序就會失效
     
     以apache模塊的方式安裝php
     在http.conf當中首先使用語句LoadModule加載php 而後添加AddType application/x-httpd-php.php使apache把全部擴展名爲php的文件都做爲php腳本處理
     appserv環境報 的php默認選擇的目錄:WampServer/www
     .htaccess文件的用處針對特定的目錄及子目錄改變服務器上的配置 能夠作到文件擴展名更改 網址格式化 及 重定向
     
      數據庫知識 
相關文章
相關標籤/搜索