PHP常見面試題彙總(二)

PHP常見面試題彙總(二)

 
 
  1. //第51題:統計一維數組中全部值出現的次數?返回一個數組,其元素的鍵名是原數組的值;鍵值是該值在原數組中出現的次數  
  2. $array=array(4,5,1,2,3,1,2,"a","a");  
  3.   
  4. $ac=array_count_values($array);  
  5.   
  6. /** 
  7.  * 輸出結果: 
  8.  * Array( 
  9.  *   [4] => 1 
  10.  *   [5] => 1 
  11.  *   [1] => 2 
  12.  *   [2] => 2 
  13.  *   [3] => 1 
  14.  *   [a] => 2 
  15.  * ) 
  16.  */  
  17. echo "<pre>";print_r($ac);  
[php]  view plain  copy
 
  1. //第52題:如何統計字符串中每種字符的出現次數並排序?  
  2. function countStr($str){   
  3.     $str_array=str_split($str);//str_split()函數能將字符串中每一個字符都轉化爲數組的元素   
  4.     $str_array=array_count_values($str_array);   
  5.     arsort($str_array);//arsort()函數對數組進行逆向排序並保持索引關係  
  6.     return $str_array;  
  7. }   
  8. $str="asdfgfdas323344##$\$fdsdfg*$**$*$**$$443563536254fas";  
  9. /** 
  10.  * 輸出結果: 
  11.  * Array( 
  12.     [$] => 7 
  13.     [3] => 6 
  14.     [*] => 6 
  15.     [4] => 5 
  16.     [f] => 5 
  17.     [s] => 4 
  18.     [d] => 4 
  19.     [5] => 3 
  20.     [a] => 3 
  21.     [6] => 2 
  22.     [2] => 2 
  23.     [g] => 2 
  24.     [#] => 2 
  25.   ) 
  26.  */  
  27. echo "<pre>";print_r(countStr($str));   
[php]  view plain  copy
 
  1. //第53題:str_word_count() 函數計算字符串中的單詞數?  
  2.   
  3. /** 
  4.  * 輸出結果:2 
  5.  */  
  6. echo str_word_count("Hello world!");//參數二:默認0,返回單詞的數目  
  7.   
  8. /** 
  9.  * 輸出結果: 
  10.    Array( 
  11.     [0] => Hello 
  12.     [1] => world 
  13.    ) 
  14.  */  
  15. echo "<pre>";print_r(str_word_count("Hello world!",1));//參數二:1-返回包含字符串中的單詞的數組  
  16.   
  17. /** 
  18.  * 輸出結果: 
  19.    Array( 
  20.     [0] => Hello 
  21.     [6] => world 
  22.    ) 
  23.  */  
  24. echo "<pre>";print_r(str_word_count("Hello world!",2));//參數二:2-返回一個數組,其中的鍵是單詞在字符串中的位置,值是實際的單詞.  
[php]  view plain  copy
 
  1. <?php  
  2. /** 
  3.  *  第56題:redis與memcached區別? 
  4.  * 
  5.  *  不一樣點: 
  6.  * 
  7.  *      (1)redis中並非全部數據在有效期內只能常駐內存的(若是須要,可按期同步持久化到磁盤),這是和memcached相比一個最大的區別(memcached中的數據在有效期內是以鍵值對的形式常駐內存的) 
  8.  *      (2)redis不只僅支持簡單的鍵值對類型的數據,同時還提供list,set,hash等數據結構的存儲;memcached僅支持簡單的鍵值對類型的數據,可是memcached卻能夠緩存圖片、視頻等等數據 
  9.  *      (3)redis支持數據的備份,即master-slave模式的數據備份 
  10.  *      (4)redis支持數據的持久化和數據同步,能夠將內存中的數據保存在磁盤中,重啓系統後能夠再次加載進行使用,緩存數據不會所以而丟失.memached緩存數據是常駐內存的,重啓系統後數據就沒了 
  11.  *      (5)redis能夠經過expire設定有效期,memcached在set數據的時候能夠指定要緩存的數據永不過時 
  12.  *      (6)redis能夠作一主多從;memcached也能夠作一主多從 
  13.  *      (7)redis當物理內存用完時,能夠將一些好久沒用到的value交換到磁盤;memcached當物理內存用完後就會自動清理一些早期的數據 
  14.  * 
  15.  *  相同點: 
  16.  * 
  17.  *      (1)redis和memcached都是將數據存放在內存中,都是內存數據庫 
  18.  *      (2)redis和memcached均可以作一主多從 
  19.  * 
  20.  *  性能: 
  21.  * 
  22.  *      (1)redis根據其官方的測試結果:在50個併發的狀況下請求10w次,寫的速度是110000次/s,讀的速度是81000次/s 
  23.  *      (2)redis將鍵名與值的最大上限各自設定爲512MB;memcached則<span id="transmark"></span>將鍵名限制在250字節,值也被限制在不超過1MB,且只適用於普通字符串. 
  24.  * 
  25.  *      什麼時候使用memcached: 
  26.  * 
  27.  *      (1)小型靜態數據:當咱們須要緩存小型靜態數據的時候能夠考慮memcached,最具表明性的例子就是HTML代碼片斷;由於memcached的內部內存管理機制雖然不像redis的那樣複雜,但卻更具實際效率,這是由於memcached在處理元數據時所消耗的內存資源相對更少.做爲memcached所支持的唯一一種數據類型,字符串很是適合用於保存那些只須要進行讀取操做的數據,由於字符串自己無需進行進一步處理<span id="transmark"></span>. 
  28.  * 
  29.  */  
  30. ?>  
  31.    

 
 
 
 
[php]  view plain  copy
 
  1. <?php  
  2. //第57題:memcached的使用案例  
  3.   
  4. //第一步:獲取數據  
  5. function get_data(){  
  6.     $sql = "SELECT * from order_master ";//通常來講都是超級複雜的sql語句  
  7.     return $this->db->cache_all($sql);//獲取緩存數據(若是緩存數據過時,則從新查詢數據庫並將查詢到的數據放到memcache中並返回)  
  8. }  
  9.   
  10. //第二步:獲取memcache中緩存數據  
  11. public function cache_all($sql, $reload = false, $limit = null) {//參數1-sql語句、參數2-是否從數據庫中從新獲取數據並寫入memcache、參數3-每次獲取記錄數量  
  12.     $this->reload = $reload;  
  13.     $sql = $this->get_query_sql($sql, $limit);//拼接sql語句,如:'select * from order_master limit 0,10'  
  14.     return $this->get_cache($sql, 'get_all');//參數1-拼接的sql、參數2-要執行的方法名;將sql語句做爲參數調用get_all()方法  
  15. }  
  16.   
  17. //第三步:從memcache中獲取緩存數據 提示:一、若是緩存數據過時,則從新查詢數據庫並將查詢結果放到memcache緩存中,返回數據. 二、若是緩存數據未過時,則直接獲取緩存數據  
  18. protected function get_cache($sql,$method) {  
  19.     $cache_file = md5($sql.$method);//memcache中緩存數據的鍵名,格式:鍵名=md5(sql語句+方法名) 提示:必定要保證鍵名惟一  
  20.     $res = $this->cache->get($cache_file);//根據緩存數據的鍵名獲取鍵值  
  21.     if(!$res) {//memcache中緩存數據過時的狀況//若是memcache中緩存數據過時,則從新從數據庫中獲取數據,並將結果以鍵值對形式存儲到memcache中  
  22.         $res= $this->$method($sql);//調用 $this->get_all($sql);//直接從數據庫中獲取數據並返回  
  23.         if($res && $this->cache_mark && !$this->reload) {  
  24.             $this->cache->set($cache_file, $res);//將數據庫中查詢到的數據以鍵值對形式set到memcache緩存中  
  25.         }  
  26.     }  
  27.     return $res;//返回數據  
  28. }  
  29.   
  30. //第四步:直接從數據庫中獲取數據並返回  
  31. public function get_all($sql, $limit = null, $fetch_mode = MYSQLI_ASSOC) {  
  32.     $this->query($sql, $limit);  
  33.     $all_rows = array();  
  34.     $this->fetch_mode = $fetch_mode;  
  35.     while($rows = $this->fetch()) {  
  36.         $all_rows[] = $rows;  
  37.     }  
  38.     $this->free();  
  39.     return $all_rows;  
  40. }  
  41. ?>  
 
 
[php]  view plain  copy
 
  1. //第58題:文件緩存的使用案例  
  2. public function &get($key, $cache_time = '') {  
  3.         if(empty ($cache_time)) {  
  4.             $cache_time = $this->cache_time;//緩存時間  
  5.         } else {  
  6.             $cache_time = intval($cache_time);//緩存時間  
  7.         }  
  8.         $cache_encode_key  = $this->get_key($key);//獲取一個惟一的長字符串  
  9.                 //緩存文件的命名和緩存文件的存放位置  
  10.         $filename = $this->cache_dir.'/'.substr($cache_encode_key,0,2).'/'.substr($cache_encode_key,2,2).'/'.$cache_encode_key.".cache.php";  
  11.         if(!is_file($filename) || time() - filemtime($filename) > $cache_time) {//若是緩存文件不存在或者緩存文件過時,則返回false  
  12.             return false;  
  13.         } else {  
  14.             return unserialize(file_get_contents($filename));//若是緩存文件存在且未過時,那麼讀取緩存文件內容並返回  
  15.         }  
  16.     }  
  17.     public function set($key,$data) {  
  18.         $cache_encode_key  = $this->get_key($key);  
  19.         $cache_dir  = $this->cache_dir.'/'.substr($cache_encode_key,0,2).'/'.substr($cache_encode_key,2,2).'/';//緩存文件的緩存目錄  
  20.         $filename   = $cache_dir.$cache_encode_key.".cache.php";//緩存文件名  
  21.         if( $this->mkpath($cache_dir) ) {//遞歸建立緩存目錄  
  22.             $out    = serialize($data);//將要緩存的數據序列化  
  23.             file_put_contents($filename, $out);//將序列化的數據寫入到緩存文件中  
  24.         }  
  25.     }  
  26.     public function add($key, $data) {  
  27.         $cache_encode_key   = $this->get_key($key);  
  28.         $cache_dir  = $this->cache_dir.'/'.substr($cache_encode_key,0,2).'/'.substr($cache_encode_key,2,2).'/';//緩存目錄  
  29.         $filename   = $cache_dir.$cache_encode_key.".cache.php";//緩存文件名  
  30.         if(is_file($filename)) {//若是緩存文件存在,則返回false  
  31.             return false;  
  32.         } else {//若是緩存文件不存在,則生成一個新的緩存文件到緩存目錄  
  33.             $this->set($key, $data);  
  34.         }  
  35.     }  
  36.     public function del($key) {  
  37.         $cache_encode_key   = $this->get_key($key);  
  38.         $cache_dir  = $this->cache_dir.'/'.substr($cache_encode_key,0,2).'/'.substr($cache_encode_key,2,2).'/';//緩存目錄<span id="transmark"></span>  
  39.         $filename   = $cache_dir.$cache_encode_key.".cache.php";//緩存文件名  
  40.         if(is_file($filename)) {//若是緩存文件存在則返回false<span id="transmark"></span>  
  41.             return false;  
  42.         } else {//若是緩存文件不存在,則刪除緩存文件  
  43.             @unlink($filename);  
  44.         }  
  45.     }  
  46.   
  47.         public function get_key($key){  
  48.                 return md5(CACHE_KEY.$key);//md5加密字符串  
  49.         }  
[php]  view plain  copy
 
  1. //第59題:redis使用案例  
  2. //推送活動商品上線  
  3.   
  4.     public function push_activity_goods_online($data) {  
  5.         $key = sprintf($this->config->item('activity_goods_push_key'), $data['goods_id']);  
  6.   
  7.         $this->cache->redis->delete($key);  
  8.         $this->load->driver('cache', array('adapter' => 'redis'));  
  9.         return $this->cache->redis->hmset($key, $data);  
  10.     }  
  11.   
  12.     //拉取上線活動商品  
  13.   
  14.     public function pull_activity_goods_online($key) {  
  15.         $key = sprintf($this->config->item('activity_goods_push_key'), $key);  
  16.         $this->load->driver('cache', array('adapter' => 'redis'));  
  17.   
  18.         return $this->cache->redis->hgetall($key);  
  19.     }  
  20.   
  21.     //刪除上線的活動商品  
  22.   
  23.     public function del_activity_goods_online($key) {  
  24.         $key = sprintf($this->config->item('activity_goods_push_key'), $key);  
  25.         $this->load->driver('cache', array('adapter' => 'redis'));  
  26.         return $this->cache->redis->delete($key);  
  27.     }  
  28.   
  29.     //推送活動上線  
  30.   
  31.     public function push_activity_online($data) {  
  32.   
  33.         $activity_push_key = $this->config->item('activity_push_key');  
  34.         //非通用平臺做用哉活動,活動前綴+平臺做用域  
  35.         if (isset($data['plateform']) && ($data['plateform']) != 'all') {  
  36.             $activity_push_key = $data['plateform'] . ':' . $activity_push_key;  
  37.         }  
  38.   
  39.         //訂單促銷  
  40.         if ($data['activity_range'] == 1) {  
  41.             $key = sprintf($activity_push_key, 'order');  
  42.         } else {  
  43.             $key = sprintf($activity_push_key, $data['activity_id']);  
  44.         }  
  45.   
  46.         $this->cache->redis->delete($key);  
  47.         $this->load->driver('cache', array('adapter' => 'redis'));  
  48.         return $this->cache->redis->hmset($key, $data);  
  49.     }  
  50.   
  51.     //拉取上線活動  
  52.   
  53.     public function pull_activity_online($key) {  
  54.         if ($key == 'order') {  
  55.             $key = sprintf($this->config->item('activity_push_key'), 'order');  
  56.         }if ($key == 'mobile:order') {  
  57.             $key = "mobile:" . sprintf($this->config->item('activity_push_key'), 'order');  
  58.         } else {  
  59.             $key = sprintf($this->config->item('activity_push_key'), $key);  
  60.         }  
  61.   
  62.         $this->load->driver('cache', array('adapter' => 'redis'));  
  63.   
  64.         return $this->cache->redis->hgetall($key);  
  65.     }  
  66.   
  67.     //刪除上線的活動  
  68.   
  69.     public function del_activity_online($key, $activity = array()) {  
  70.         $activity_push_key = $this->config->item('activity_push_key');  
  71.   
  72.         //非通用平臺做用哉活動,活動前綴+平臺做用域  
  73.         if (isset($activity['plateform']) && ($activity['plateform']) != 'all') {  
  74.             $activity_push_key = $activity['plateform'] . ':' . $activity_push_key;  
  75.         }  
  76.         $key = sprintf($activity_push_key, $key);  
  77.         $this->load->driver('cache', array('adapter' => 'redis'));  
  78.         //echo "redis->delete:" . $key . "\r\n<br>";  
  79.         return $this->cache->redis->delete($key);  
  80.     }  
  81.   
  82.     //獲取所有活動  
  83.     public function pull_all_activity_online() {  
  84.         $aids = array();  
  85.         $key = "*" . sprintf($this->config->item('activity_push_key'), "*");  
  86.         $this->load->driver('cache', array('adapter' => 'redis'));  
  87.         $hashname = $this->cache->redis->keys($key);  
  88.         if (is_array($hashname)) {  
  89.             $prefix_key = str_replace("%s", '', $this->config->item('activity_push_key'));  
  90.             foreach ($hashname as $key => $value) {  
  91.                 /* if ($value == ($prefix_key . "order")) { 
  92.                   continue; 
  93.                   } */  
  94.                 $aid = str_replace($prefix_key, "", $value);  
  95.                 $aids[] = $aid;  
  96.             }  
  97.             return $aids;  
  98.         } else {  
  99.             return null;  
  100.         }  
  101.     }  
  102.   
  103.     //獲取全部活動商品  
  104.     public function pull_all_activity_goods_online() {  
  105.         $aids = array();  
  106.         $key = sprintf($this->config->item('activity_goods_push_key'), "*");  
  107.         $this->load->driver('cache', array('adapter' => 'redis'));  
  108.         $hashname = $this->cache->redis->keys($key);  
  109.         if (is_array($hashname)) {  
  110.             $prefix_key = str_replace("%s", '', $this->config->item('activity_goods_push_key'));  
  111.             foreach ($hashname as $key => $value) {  
  112.                 $aid = str_replace($prefix_key, "", $value);  
  113.                 $aids[] = $aid;  
  114.             }  
  115.             return $aids;  
  116.         } else {  
  117.             return null;  
  118.         }  
  119.     }  
  120.   
  121.     //獲取線上活動商品by goods_id  
  122.     public function get_activity_goods_online($product_id) {  
  123.         if (empty($product_id)) {  
  124.             return false;  
  125.         }  
  126.         $activity_goods = $this->pull_activity_goods_online($product_id);  
  127.   
  128.         if (!empty($activity_goods)) {  
  129.             return $activity_goods;  
  130.         }  
  131.   
  132.         return false;  
  133.     }  
[php]  view plain  copy
 
  1. //第60題:php如何讀取php.ini配置文件中的配置選項的值  
  2. echo ini_get('post_max_size');//獲取上傳文件的最大尺寸  
  3. echo get_cfg_var('post_max_size');//獲取上傳文件的最大尺寸  
[php]  view plain  copy
 
  1. //第61題:php中如何動態的調用一個函數  
  2. $name_list = '小強,張三,李四,王五,馬六';  
  3. $funName = 'explode';//函數名看成字符串  
  4. echo "<pre>";print_r($funName(',',$name_list));  
  5. echo "<pre>";print_r(call_user_func_array($funName,array(',',$name_list)));  
  6.   
  7. /** 
  8.  * 結果: 
  9.  *  Array( 
  10.  *      [0] => 小強  
  11.  *      [1] => 張三 
  12.  *      [2] => 李四 
  13.  *      [3] => 王五 
  14.  *      [4] => 馬六 
  15.  *  ) 
  16.  * 
  17.  *  Array( 
  18.  *      [0] => 小強 
  19.  *      [1] => 張三  
  20.  *      [2] => 李四 
  21.  *      [3] => 王五 
  22.  *      [4] => 馬六 
  23.  *  ) 
  24.  */  
[php]  view plain  copy
 
  1. /** 
  2.  *第62題:__call是魔術方法 
  3.  *      __call是魔術方法是指請求的方法不存在的時候採用的哪一種處理方式;若是請求的方法名存在(跟參數列表無關),則不會調用此魔術方法 
  4.  */  
  5. class MethodTest {  
  6.      /** 
  7.       * 再如: 
  8.       *       public function __call($funName, $args){//參數1-要調用的方法名   參數2-傳遞給要調用方法的參數列表 
  9.       *             switch (count($args)) { 
  10.       *                 case 0: 
  11.       *                     return $this->$funName(); 
  12.       *                 case 1: 
  13.       *                     return $this->$funName($args[0]); 
  14.       *                 case 2: 
  15.       *                     return $this->$funName($args[0], $args[1]); 
  16.       *                 case 3: 
  17.       *                     return $this->$funName($args[0], $args[1], $args[2]); 
  18.       *                 case 4: 
  19.       *                     return $this->$funName($args[0], $args[1], $args[2], $args[3]); 
  20.       *                 case 5: 
  21.       *                     return $this->$funName($args[0], $args[1], $args[2], $args[3], $args[4]); 
  22.       *                 default: 
  23.       *                     return call_user_func_array($this->$funName, $args); 
  24.       *             } 
  25.       *     } 
  26.       */  
  27.      public function __call($name,$arguments) {//參數1-調用的方法名 參數2-傳遞給調用方法的參數列表  
  28.         if(method_exists($this,$name)){  
  29.             return $this->$name();  
  30.         }else{    
  31.             echo "調用的方法 $name() 不存在;傳遞給 $name() 方法的參數列表以下:".implode(',',$arguments)."\n";  
  32.         }  
  33.      }  
  34. }  
  35. $obj = new MethodTest();  
  36. //結果:調用的方法 runTest() 不存在;傳遞給 runTest() 方法的參數列表以下:李四,張三   
  37. $obj->runTest('李四','張三');//方法名、參數列表  
[php]  view plain  copy
 
  1. //第63題:php.ini配置文件的解析  
  2.   
  3.     (1)如:配置文件 test.ini  
  4.   
  5.         [names]  
  6.         me = Robert  
  7.         you = Peter  
  8.   
  9.         [urls]  
  10.         first = "http://www.example.com"  
  11.         second = "http://www.w3school.com.cn"  
  12.       
  13.     (2)代碼:<?php   print_r(parse_ini_file("test.ini"));   ?>  
  14.   
  15.        結果:  
  16.             Array(  
  17.                 [me] => Robert  
  18.                 [you] => Peter  
  19.                 [first] => http://www.example.com  
  20.                 [second] => http://www.w3school.com.cn  
  21.             )  
  22.       
  23.     (3)代碼:<?php   print_r(parse_ini_file("test.ini",true));   ?>  
  24.   
  25.        結果:  
  26.             Array(  
  27.                 [names] => Array(  
  28.                     [me] => Robert  
  29.                     [you] => Peter  
  30.                 )  
  31.                 [urls] => Array(  
  32.                     [first] => http://www.example.com  
  33.                     [second] => http://www.w3school.com.cn  
  34.                 )  
  35.             )  
 
 
[php]  view plain  copy
 
  1. <?php  
  2. /**  
  3.  * 第65題:php中的重寫與重載 
  4.  * 首先來了解兩個概念: 
  5.  *      重寫/覆蓋:  指子類重寫了父類的同名方法,但重寫後的同名方法的參數個數及類型沒有限制             <span id="transmark"></span>發生在子類與父類之間  
  6.  *      重載:     指本類中存在多個同名方法,但參數類型/個數不一樣,當傳不一樣的參數時調用不一樣的方法         發生在本類內部  
  7.  * PHP中,不容許存在多個同名方法. 所以,不可以完成java,c++中的這種重載;可是,PHP的靈活,能夠模擬達到相似的效果  
  8. */  
  9.   
  10. class human{  
  11.       public function say($name){  
  12.             echo $name,' 吃了嗎?<br />';  
  13.       }  
  14. }  
  15.   
  16. class stu extends human{  
  17.   
  18.       /* 
  19.        * 報錯:Fatal error: Cannot redeclare stu::say() in D:\wamp\www\php\61.php on line 28,由於在PHP中,不容許存在多個同名方法,沒有重載概念這一說。 
  20.        * public function say($a,$b,$c){ 
  21.        *        echo '哥仨好'; 
  22.        * } 
  23.       */  
  24.       public function say(){  
  25.             echo '切克鬧,卡貓百比<br />';  
  26.       }  
  27.         
  28. }  
  29.   
  30. $li=new stu();  
  31. $li->say();//結果:切克鬧,卡貓百比;  
  32. $li->say('binghui');//結果:切克鬧,卡貓百比;上面這個過程叫重寫  
  33.   
  34.   
  35.   
  36. //在PHP中模擬重載的方法  
  37. class Calc {   
  38.     public function area() {   
  39.         //判斷一個調用area時,獲得的參數個數   
  40.         $args = func_get_args();//獲取參數個數   
  41.         if(count($args) == 1) {   
  42.             return 3.14 * $args[0] * $args[0];   
  43.         } else if(count($args) == 2) {   
  44.             return $args[0] * $args[1];   
  45.         } else {   
  46.             return '未知圖形';   
  47.         }   
  48.     }   
  49. }   
  50. $calc = new Calc();   
  51. //計算圓的頁面   
  52. echo $calc->area(10),'<br />';   
  53. //計算矩形的面積   
  54. echo $calc->area(5,8);  
  55. ?>  

 

[php]  view plain  copy
 
  1. <?php  
  2. /** 
  3.    第66題:static靜態局部變量(不是數組)在函數中的使用特色: 
  4.  
  5.    (1)靜態局部變量不會隨着函數的調用和退出而發生變化; 
  6.  
  7.       不過,儘管該變量還繼續存在,但確不能在函數外部直接使用它(獲取不到值). 
  8.  
  9.       假若再次調用定義它的函數時,它又可繼續使用,並且保存了前次被調用後留下的值. 
  10.  
  11.    (2)靜態局部變量只會初始化一次. 
  12.  
  13.    (3)靜態局部變量只能被初始化爲一個字符值或一個常量,不能使用表達式. 
  14.  
  15.       即便靜態局部變量定義時沒有賦初值,系統會自動賦初值0. 
  16.  
  17.    (4)當屢次調用一個函數且要求在調用之間保留某些變量的值時,可考慮採用靜態局部變量. 
  18.  
  19.    (5)static $var=5;//【變量的賦值操做只會在變量第一次初始化時會被調用,在以後函數的執行過程當中該操做不會被調用】 
  20.  
  21.    (6)靜態變量是隻存在於函數做用域的變量,不過,在函數執行完成後,這種變量的值不會丟失, 
  22.  
  23.       也就是說,在下一次調用這個函數時,變量仍然會記得原來的值. 
  24.  
  25.       要將某個變量定義爲靜態的,只須要在變量前加上static關鍵字便可 
  26.  
  27.  */  
  28. function test(){  
  29.     static $var=5;  //static $var = 1+1;就會報錯,不能使用表達式  
  30.     $var++;  
  31.     echo $var.'<br/>';  
  32. }  
  33.    
  34. test(); //結果:6  
  35. test(); //結果:7  
  36. test(); //結果:8  
  37. echo $var;//Notice:Undefined variable: var 即:不能在函數外部使用靜態局部變量,獲取不到值  
  38.   
  39.   
  40. /** 
  41.     類中的static靜態屬性和方法用什麼做用? 
  42.   
  43.     (1)不管你實例化了多少個對象,static定義的屬性和方法,都只有一個,只佔有一次內存,節省了系統的內存開銷 
  44.      
  45.     (2)訪問static屬性和方法時,只能用::訪問 
  46.  
  47.     (3)靜態成員是一種類變量,能夠把它當作時屬於整個類而不是屬於類的某個實例。 
  48.  
  49.        與通常的實例變量不一樣的是,靜態成員只保留一個變量值,而這個變量值對全部的實例都是有效的 
  50.  
  51.        也就是說,全部的實例共享這個成員 
  52.  
  53.     (4)$this只表示類的當前實例, 
  54.       
  55.        self::表示的是類自己,在類以外的代碼中不能使用這個操做符,並且它不能識別本身在繼承樹層次結構中的位置。 
  56.  
  57.        也就是說,在擴展類中使用self做用域時,self能夠調用基類中聲明的方法,但它調用的老是已經在擴展類中重寫的方法。 
  58.  
  59.        與$this不一樣的是,在使用靜態變量時,必須在做用域限定符後面加上$符號 
  60.  
  61.        如: 
  62.             $this->name;//調用非靜態屬性 
  63.  
  64.             self::$name;//調用靜態屬性 
  65.  
  66.     (5)擴展類中,在基類的方法被重寫的狀況下,使用 parent 做用域調用定義在基類中的方法。 
  67.        
  68.        靜態成員也能夠只屬於父類。若是在子類和父類中同時聲明瞭某個成員,也可使用parant::在子類中訪問父類中的變量。 
  69.         
  70.        在這種狀況下,父類的靜態成員和子類的靜態成員保存的是不一樣的值 
  71.       
  72.     (6)能夠在::操做符的左邊寫上類的名稱來靜態地訪問某個成員,這樣避免建立類的實例. 
  73.      
  74.        不只能夠省略掉實例化類的代碼,並且還會更高效,由於類的每一個實例都會佔用一小部分的系統資源 
  75.      
  76.     (7)案例: 
  77.  
  78.         <?php 
  79.             class visitors{ 
  80.                 private static $visitors = 0; 
  81.                 function __construct() 
  82.                 { 
  83.                      self::$visitors++; 
  84.                 } 
  85.                 static function getVisitors() 
  86.                 { 
  87.                     return self::$visitors; 
  88.                 } 
  89.             } 
  90.             $visits = new visitors(); 
  91.             echo visitors::getVisitors()."<br />";//結果:1 
  92.             $visits2 = new visitors(); 
  93.             echo visitors::getVisitors()."<br />";//結果:2 
  94.         ?> 
  95.  
  96.         由於$visitors字段聲明爲static,因此對其值的任何改變都會反映到全部實例化對象中。 
  97.          
  98.         還要注意,靜態字段和方法應使用self關鍵字和類名來引用,而不是經過this和箭頭操做符。 
  99.          
  100.         這是由於使用「正常」方法引用靜態字段是不可能的,會致使語法錯誤。 
  101.  
  102.         不能在類中使用$this來引用爲static字段 
  103.  
  104.     (8)靜態方法: 
  105.  
  106.         靜態方法和非靜態方法之間有一個重要的區別:在調用靜態方法時,再也不須要擁有類的實例。 
  107.  
  108.         靜態方法和非靜態方法使用原則: 
  109.  
  110.             (1)、是若是某個方法中不包含$this變量,就應該時靜態方法; 
  111.  
  112.             (2)、若是不須要類的實例,可能還應該使用靜態類,這樣能夠免去實例化類的工做。 
  113.              
  114.             (3)、在靜態方法中時不能使用$this變量的,由於靜態方法不屬於某個特定的實例。 
  115.  */  
  116.   
  117. ?>  

第67題:session機制:php

 

[php]  view plain  copy
 
  1. <?php  
  2.   
  3.     /** 
  4.      * 【session.save_handler = files】:默認的session處理機制 
  5.      *      (1)session_start()是session機制的開始,它有必定機率開啓垃圾回收,由於session是存放在文件中,PHP自身的垃圾回收是無效的,SESSION的回收是要刪文件的,這個機率是根據php.ini的配置決定的, 
  6.                可是有的系統是 session.gc_probability = 0,這也就是說機率是0,而是經過cron腳原本實現垃圾回收 
  7.                 session.gc_probability = 1  //垃圾回收機制 
  8.                 session.gc_divisor = 1000   //垃圾回收機制 
  9.                 session.gc_maxlifetime = 1440//過時時間 默認24分鐘 
  10.                 //垃圾回收的概率爲:session.gc_probability/session.gc_divisor,即:1/1000,  
  11.                 //不建議設置太小,由於session的垃圾回收,是須要檢查每一個文件是否過時的。 
  12.                 session.save_path = //好像不一樣的系統默認不同,有一種設置是 "N;/path" 
  13.                 //這是隨機分級存儲,這個樣的話,垃圾回收將不起做用,須要本身寫腳本 
  14.  
  15.      *      (2)session會判斷當前是否有$_COOKIE[session_name()];session_name()返回保存session_id的COOKIE鍵值;這個值能夠從php.ini找到,session.name = PHPSESSID //默認值PHPSESSID 
  16.      *      (3)若是不存在會生成一個session_id,而後把生成的session_id做爲COOKIE的值傳遞到客戶端;至關於執行了下面COOKIE 操做,注意的是,這一步執行了setcookie()操做,COOKIE是在header頭中發送的, 
  17.      *         這以前是不能有輸出的,PHP有另一個函數 session_regenerate_id() 若是使用這個函數,這以前也是不能有輸出的 
  18.                 setcookie( 
  19.                           session_name(),//PHPSESSID,對應php.ini中session.name = PHPSESSID配置選項 
  20.                           session_id(),  //生成的session_id值 
  21.                           session.cookie_lifetime,//默認0 
  22.                           session.cookie_path,//默認'/'當前程序跟目錄下都有效 
  23.                           session.cookie_domain,//默認爲空 
  24.                 ) 
  25.      *      (4)若是存在session_id,那麼session_id = $_COOKIE[session_name];而後去session.save_path指定的文件夾裏去找名字爲'SESS_'. session_id()的文件,讀取文件的內容反序列化,而後放到$_SESSION中 
  26.      *      (5)爲$_SESSION賦值: 
  27.      *         好比新添加一個值$_SESSION['test'] = 'blah';那麼這個$_SESSION只會維護在內存中,當腳本執行結束的時候,會把$_SESSION的值寫入到session_id指定的文件夾中,而後關閉相關資源 
  28.                這個階段有可能執行更改session_id的操做,好比銷燬一箇舊的的session_id,生成一個全新的session_id. 
  29.                if (isset($_COOKIE[session_name()])) {//如:匿名用戶有一個SESSION的,當它登陸後須要換用新的session_id 
  30.                     setcookie(session_name(), '', time() - 42000, '/');//舊session cookie過時 
  31.                } 
  32.                session_regenerate_id();//這一步會生成新的session_id,此時再經過session_id()返回的是新的值 
  33.      *      (6)寫入SESSION:在腳本結束的時候會執行SESSION寫入操做,把$_SESSION中值寫入到session_id命名的文件中,可能已經存在,可能須要建立新的文件 
  34.      *      (7)銷燬SESSION:SESSION發出去的COOKIE通常屬於即時COOKIE,保存在內存中,當瀏覽器關閉後,纔會過時,假如須要人爲強制過時,好比 退出登陸,而不是關閉瀏覽器,那麼就須要在代碼裏銷燬SESSION,方法有不少: 
  35.                setcookie(session_name(), session_id(), time() - 8000000, ..);//退出登陸前執行 
  36.                usset($_SESSION);//這會刪除全部的$_SESSION數據,刷新後,有COOKIE傳過來,可是沒有數據 
  37.                session_destroy();//這個做用更完全,刪除$_SESSION 刪除session文件,和session_id 
  38.      * 
  39.      * 【session.save_handler = user】:用戶自定義session處理機制 
  40.      *      (1)用戶自定義session處理機制:session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc');//【執行此函數將修改session默認的存儲介質;修改是隱式的,因此不會體如今php.ini配置文件中的session.save_handler配置項】 
  41.                session_start(): 
  42.                     執行open($save_path, $session_name)打開session操做句柄,$save_path 在session.save_handler = files的狀況下它就是session.save_path;可是若是用戶自定的話,這個兩個參數都用不上,直接返回TRUE 
  43.                     執行read($id)從中讀取數據.//【這個參數是自動傳遞的就是session_id()】,能夠經過這個值進行操做 
  44.             (2)腳本執行結束:執行write($id, $sess_data) //兩個參數,很簡單 
  45.             (3)假如用戶須要session_destroy(),先執行destroy.在執行第2步 
  46.             (4)案例: 
  47.                 <?php 
  48.                 //SESSION初始化的時候調用 
  49.                 function open($save_path, $session_name){ 
  50.                         global $sess_save_path; 
  51.                         $sess_save_path = $save_path; 
  52.                         return(true); 
  53.                 } 
  54.  
  55.                 //關閉的時候調用 
  56.                 function close(){ 
  57.                         return(true); 
  58.                 } 
  59.  
  60.                 function read($id){//【參數會自動傳遞,就是session_id()】 
  61.                         global $sess_save_path; 
  62.                         $sess_file = "$sess_save_path/sess_$id"; 
  63.                         return (string) @file_get_contents($sess_file); 
  64.                 } 
  65.  
  66.                 //腳本執行結束以前,執行寫入操做 
  67.                 function write($id, $sess_data){//【參數會自動傳遞,就是session_id()】 
  68.                         echo "sdfsf"; 
  69.                         global $sess_save_path; 
  70.  
  71.                         $sess_file = "$sess_save_path/sess_$id"; 
  72.                         if ($fp = @fopen($sess_file, "w")) { 
  73.                           $return = fwrite($fp, $sess_data); 
  74.                           fclose($fp); 
  75.                           return $return; 
  76.                         } else { 
  77.                           return(false); 
  78.                         } 
  79.  
  80.                 } 
  81.  
  82.                 function destroy($id){//【參數會自動傳遞,就是session_id()】 
  83.                         global $sess_save_path; 
  84.  
  85.                         $sess_file = "$sess_save_path/sess_$id"; 
  86.                         return(@unlink($sess_file)); 
  87.                 } 
  88.  
  89.                 function gc($maxlifetime){ 
  90.                         global $sess_save_path; 
  91.  
  92.                         foreach (glob("$sess_save_path/sess_*") as $filename) { 
  93.                           if (filemtime($filename) + $maxlifetime < time()) { 
  94.                             @unlink($filename); 
  95.                           } 
  96.                         } 
  97.                         return true; 
  98.                 } 
  99.                 ?> 
  100.      * 
  101.      */  
  102.   
  103.   
  104.     //【session.save_handler = user】:用戶自定義session處理機制  
  105.     $SESS_DBHOST = "127.0.0.1";    
  106.     $SESS_DBNAME = "cms";     
  107.     $SESS_DBUSER = "root";    
  108.     $SESS_DBPASS = "";     
  109.     
  110.     $SESS_DBH = ""; //數據庫鏈接句柄    
  111.     $SESS_LIFE = get_cfg_var("session.gc_maxlifetime");//默認:8M  
  112.     
  113.     //SESSION初始化的時候調用  
  114.     function sess_open($save_path, $session_name) {     
  115.         global $SESS_DBHOST, $SESS_DBNAME, $SESS_DBUSER, $SESS_DBPASS, $SESS_DBH;     
  116.   
  117.         if (! $SESS_DBH = mysql_pconnect($SESS_DBHOST, $SESS_DBUSER, $SESS_DBPASS)) {     
  118.             echo "<li>Can't connect to $SESS_DBHOST as $SESS_DBUSER";     
  119.             echo "<li>MySQL Error: " . mysql_error();     
  120.             die;     
  121.         }     
  122.   
  123.         if (! mysql_select_db($SESS_DBNAME, $SESS_DBH)) {     
  124.             echo "<li>Unable to select database $SESS_DBNAME";     
  125.             die;     
  126.         }     
  127.   
  128.         return true;     
  129.     }     
  130.   
  131.     //關閉的時候調用  
  132.     function sess_close() {     
  133.         return true;     
  134.     }     
  135.   
  136.     function sess_read($key) {     
  137.         global $SESS_DBH, $SESS_LIFE;     
  138.   
  139.         $qry = "SELECT value FROM session_tbl WHERE sesskey = '$key' AND expiry > " . time();     
  140.         $qid = mysql_query($qry, $SESS_DBH);     
  141.   
  142.         if (list($value) = mysql_fetch_row($qid)) {     
  143.             return $value;     
  144.         }     
  145.   
  146.         return false;     
  147.     }     
  148.   
  149.     //腳本執行結束以前,執行寫入操做  
  150.     function sess_write($key, $val) {   <span id="transmark"></span>  
  151.         global $SESS_DBH, $SESS_LIFE;     
  152.   
  153.         $expiry = time() + $SESS_LIFE; //過時時間     
  154.         $value = addslashes($val);     
  155.   
  156.         $qry = "INSERT INTO session_tbl VALUES ('$key', $expiry, '$value')";     
  157.         $qid = mysql_query($qry, $SESS_DBH);     
  158.   
  159.         if (! $qid) {     
  160.             $qry = "UPDATE session_tbl SET expiry = $expiry, value = '$value' WHERE sesskey = '$key' AND expiry > " . time();     
  161.             $qid = mysql_query($qry, $SESS_DBH);     
  162.         }     
  163.   
  164.         return $qid;     
  165.     }     
  166.   
  167.     function sess_destroy($key) {     
  168.         global $SESS_DBH;     
  169.   
  170.         $qry = "DELETE FROM session_tbl WHERE sesskey = '$key'";     
  171.         $qid = mysql_query($qry, $SESS_DBH);     
  172.   
  173.         return $qid;     
  174.     }     
  175.   
  176.     function sess_gc($maxlifetime) {     
  177.         global $SESS_DBH;     
  178.   
  179.         $qry = "DELETE FROM session_tbl WHERE expiry < " . time();     
  180.         $qid = mysql_query($qry, $SESS_DBH);     
  181.   
  182.         return mysql_affected_rows($SESS_DBH);     
  183.     }     
  184.   
  185.     //【session.save_handler = user】:用戶自定義session處理機制主要是經過session_set_save_handler()來進行協調執行  
  186.     //【執行此函數將修改session默認的存儲介質;修改是隱式的,因此不會體如今php.ini配置文件中的session.save_handler配置項】  
  187.     session_set_save_handler(     
  188.         "sess_open",    //能夠進行重寫  
  189.         "sess_close",   //能夠進行重寫  
  190.         "sess_read",    //能夠進行重寫  
  191.         "sess_write",   //能夠進行重寫  
  192.         "sess_destroy", //能夠進行重寫    
  193.         "sess_gc"       //能夠進行重寫  
  194.     );     
  195.     session_start();    //除了以上被重寫的session函數外,其它的session函數仍是想之前同樣調用  
  196.     ?>  

第68題:PHP 的垃圾回收機制:html

 

[php]  view plain  copy
 
  1. PHP垃圾回收機制是php5以後纔有的這<span id="transmark"></span>個東西,下面我來給你們介紹一下關於PHP垃圾回收機制一些理解,但願對各位同窗有所幫助。  
  2.   
  3. php 5.3以前使用的垃圾回收機制是單純的「引用計數」,也就是每一個內存對象都分配一個計數器,當內存對象被變量引用時,計數器 1;當變量引用撤掉後,計數器-1;當計數器=0時,代表內存對象沒有被使用,該內存對象則進行銷燬,垃圾回收完成。  
  4.   
  5. 「引用計數」存在問題,就是當兩個或多個對象互相引用造成環狀後,內存對象的計數器則不會消減爲0;這時候,這一組內存對象已經沒用了,可是不能回收,從而致使內存泄露;  
  6.   
  7. php5.3開始,使用了新的垃圾回收機制,在引用計數基礎上,實現了一種複雜的算法,來檢測內存對象中引用環的存在,以免內存泄露  

 

第69題:將外網圖片本地化、將外網圖片下載到本地的原理java

 

[php]  view plain  copy
 
  1. <?php  
  2. //將外網圖片本地化、將外網圖片下載到本地的原理  
  3. copy("http://image.v1.cn/vodone/20150723/303862_0x0.jpg",'e:/wamp/www/303862_0x0.jpg');  
  4. ?>  

第70題:PHP緩存技術總結

 

 

[php]  view plain  copy
 
  1. <?php  
  2.   
  3. /** 
  4.  
  5. 一、全頁面靜態化緩存 
  6. 也就是將頁面所有生成html靜態頁面,用戶訪問時直接訪問的靜態頁面,而不會去走php服務器解析的流程。此種方式,在CMS系 
  7. 統中比較常見,好比dedecms; 
  8. 一種比較經常使用的實現方式是用輸出緩存: 
  9. Ob_start() 
  10. ******要運行的代碼******* 
  11. $content = Ob_get_contents(); 
  12. ****將緩存內容寫入html文件***** 
  13. Ob_end_clean(); 
  14.  
  15.  
  16. 二、頁面部分緩存 
  17. 該種方式,是將一個頁面中不常常變的部分進行靜態緩存,而常常變化的塊不緩存,最後組裝在一塊兒顯示;可使用相似於 
  18. ob_get_contents的方式實現,也能夠利用相似ESI之類的頁面片斷緩存策略,使其用來作動態頁面中相對靜態的片斷部分的緩存 
  19. (ESI技術,請baidu,此處不詳講)。該種方式能夠用於如商城中的商品頁; 
  20.  
  21.  
  22. 三、數據緩存 
  23. 顧名思義,就是緩存數據的一種方式;好比,商城中的某個商品信息,當用商品id去請求時,就會得出包括店鋪信息、商品信息 
  24. 等數據,此時就能夠將這些數據緩存到一個php文件中,文件名包含商品id來建一個惟一標示;下一次有人想查看這個商品時,首 
  25. 先就直接調這個文件裏面的信息,而不用再去數據庫查詢;其實緩存文件中緩存的就是一個php數組之類; 
  26. Ecmall商城系統裏面就用了這種方式; 
  27.  
  28.  
  29. 四、查詢緩存 
  30. 其實這跟數據緩存是一個思路,就是根據查詢語句來緩存;將查詢獲得的數據緩存在一個文件中,下次遇到相同的查詢時,就直 
  31. 接先從這個文件裏面調數據,不會再去查數據庫;但此處的緩存文件名可能就須要以查詢語句爲基點來創建惟一標示(用md5($sql)???); 
  32. 按時間變動進行緩存 
  33. 其實,這一條不是真正的緩存方式;上面的二、三、4的緩存技術通常都用到了時間變動判斷;就是對於緩存文件您須要設一個有效 
  34. 時間,在這個有效時間內,相同的訪問纔會先取緩存文件的內容,可是超過設定的緩存時間,就須要從新從數據庫中獲取數據, 
  35. 並生產最新的緩存文件; 
  36. 好比,我將咱們商城的首頁就是設置2個小時更新一次; 
  37.  
  38.  
  39. 五、按內容變動進行緩存 
  40. 這個也並不是獨立的緩存技術,需結合着用;就是當數據庫內容被修改時,即刻更新緩存文件; 
  41. 好比,一我的流量很大的商城,商品不少,商品表必然比較大,這表的壓力也比較重;咱們就能夠對商品顯示頁進行頁面緩存; 
  42. 當商家在後臺修改這個商品的信息時,點擊保存,咱們同時就更新緩存文件;那麼,買家訪問這個商品信息時,實際上訪問的是 
  43. 一個靜態頁面,而不須要再去訪問數據庫; 
  44. 是想,若是對商品頁不緩存,那麼每次訪問一個商品就要去數據庫查一次,若是有10萬人在線瀏覽商品,那服務器壓力就大了; 
  45.  
  46.  
  47. 六、內存式緩存 
  48. 提到這個,可能你們想到的首先就是Memcached;memcached是高性能的分佈式內存緩存服務器。 通常的使用目的是,經過緩存數 
  49. 據庫查詢結果,減小數據庫訪問次數,以提升動態Web應用的速度、 提升可擴展性。 
  50. 它就是將須要緩存的信息,緩存到系統內存中,須要獲取信息時,直接到內存中取;比較經常使用的方式就是 key-->value方式; 
  51.      $memcachehost = '192.168.6.191'; 
  52.      $memcacheport = 11211; 
  53.      $memcachelife = 60; 
  54.      $memcache = new Memcache; 
  55.      $memcache->connect($memcachehost,$memcacheport) or die ("Could not connect"); 
  56.      $memcache->set('key','緩存的內容'); 
  57.      $get = $memcache->get($key);       //獲取信息 
  58.  
  59.  
  60. 七、apache緩存模塊 
  61. apache安裝完之後,是不容許被cache的。若是外接了cache或squid服務器要求進行web加速的話,就須要在htttpd.conf裏進行設 
  62. 置,固然前提是在安裝apache的時候要激活mod_cache的模塊。 
  63. 安裝apache時:./configure --enable-cache --enable-disk-cache --enable-mem-cache 
  64.  
  65.  
  66. 八、php APC緩存擴展 
  67. Php有一個APC緩存擴展,windows下面爲php_apc.dll,須要先加載這個模塊,而後是在php.ini裏面進行配置: 
  68. [apc]  
  69.      extension=php_apc.dll  
  70.      apc.rfc1867 = on  
  71.      upload_max_filesize = 100M  
  72.      post_max_size = 100M  
  73.      apc.max_file_size = 200M  
  74.      upload_max_filesize = 1000M  
  75.      post_max_size = 1000M  
  76.      max_execution_time = 600 ;   每一個PHP頁面運行的最大時間值(秒),默認30秒  
  77.      max_input_time = 600 ;       每一個PHP頁面接收數據所需的最大時間,默認60  
  78.      memory_limit = 128M ;       每一個PHP頁面所吃掉的最大內存,默認8M 
  79.  
  80.  
  81. 九、Opcode緩存 
  82. 咱們知道,php的執行流程能夠用下圖來展現: 
  83. php的執行流程 
  84. 首先php代碼被解析爲Tokens,而後再編譯爲Opcode碼,最後執行Opcode碼,返回結果;因此,對於相同的php文件,第一次運行 
  85. 時能夠緩存其Opcode碼,下次再執行這個頁面時,直接會去找到緩存下的opcode碼,直接執行最後一步,而再也不須要中間的步驟了。 
  86. 比較知名的是XCache、Turck MM Cache、PHP Accelerator等; 
  87.  
  88. **/  
  89.   
  90. ?>  

第71題:xml文檔中的CDATAmysql

 

[php]  view plain  copy
 
  1. <?php  
  2.   
  3. /** 
  4.  *   
  5.  *  xml文檔中的CDATA: 
  6.  * 
  7.  *      一、全部xml文檔中的文本均會被解析器解析,只有CDATA區段(CDATA section)中的文本會被解析器忽略 
  8.  *      二、術語CDATA指的是不該由xml解析器進行解析的文本數據(Unparsed Character Data) 
  9.  *      三、CDATA部分不能包含字符串 "]]>",也不容許嵌套的CDATA部分;標記CDATA 部分結尾的 "]]>" 不能包含空格或折行 
  10.  *      四、CDATA 部分由 "<![CDATA[" 開始,由 "]]>" 結束,CDATA 部分中的全部內容都會被解析器忽略 
  11.  *      五、在 XML 元素中,"<" 和 "&" 是非法的; "<" 會產生錯誤,由於解析器會把該字符解釋爲新元素的開始;"&" 也會產生錯誤,由於解析器會把該字符解釋爲字符實體的開始 
  12.          
  13.         案例: 
  14.         <document> 
  15.             <webName>優酷網</webName> 
  16.             <webSite>www.youku.com</webSite> 
  17.             <item id="1">...</item> 
  18.             <item id="2">...</item> 
  19.             <item id="3"> 
  20.                 <title> 
  21.                     <![CDATA[ 唱說天下:銀幕上「不搭配」的情侶檔 ]]> 
  22.                 </title> 
  23.                 <category> 
  24.                     <![CDATA[ 娛樂 ]]> 
  25.                 </category> 
  26.                 <subcat> 
  27.                     <![CDATA[ 娛樂諮詢 ]]> 
  28.                 </subcat> 
  29.                 <image> 
  30.                     <![CDATA[ 
  31.                     http://p01.youku.com/group2/M00/05/3D/ChQB0FW1udWAWwAHA16bTNZsaI03768-b.jpg 
  32.                     ]]> 
  33.                 </image> 
  34.                 <link> 
  35.                     <![CDATA[ 
  36.                     http://www.youku.com/player/youku/youku_player.swf?autoPlay=true&showAD=true&videoFrom=2345&videoUrl=http://f01.youku.com/group2/M00/05/3D/ChQB0FW1udWZs.flv 
  37.                     ]]> 
  38.                 </link> 
  39.                 <duration> 
  40.                     <![CDATA[ 00:02:27 ]]> 
  41.                 </duration> 
  42.                 <publish> 
  43.                     <![CDATA[ 2015-07-27 12:56:17 ]]> 
  44.                 </publish> 
  45.                 <tag> 
  46.                     <![CDATA[ 銀幕,情侶檔 ]]> 
  47.                 </tag> 
  48.                 <introduction> 
  49.                     <![CDATA[ 唱說天下:銀幕上「不搭配」的情侶檔 ]]> 
  50.                 </introduction> 
  51.                 <count> 
  52.                     <![CDATA[ 0 ]]> 
  53.                 </count> 
  54.             </item> 
  55.         </document> 
  56.  * 
  57.  */  
  58. ?>  

第72題:如何列出目錄下的全部模板文件?遍歷文件夾、遍歷文件、遍歷目錄及子目錄、遍歷文件夾及子文件夾c++

 

[php]  view plain  copy
 
  1. <?php  
  2.   
  3. /** 
  4.  *  Array 
  5.     [0] => E:/wamp/www/phpcms/phpcms/templates/default/content/category.html 
  6.     [1] => E:/wamp/www/phpcms/phpcms/templates/default/content/category_download.html 
  7.     [2] => E:/wamp/www/phpcms/phpcms/templates/default/content/category_picture.html 
  8.     [3] => E:/wamp/www/phpcms/phpcms/templates/default/content/category_video.html 
  9.     [4] => E:/wamp/www/phpcms/phpcms/templates/default/content/download.html 
  10.     [5] => E:/wamp/www/phpcms/phpcms/templates/default/content/footer.html 
  11.     [6] => E:/wamp/www/phpcms/phpcms/templates/default/content/header.html 
  12.     [7] => E:/wamp/www/phpcms/phpcms/templates/default/content/header_min.html 
  13.     [8] => E:/wamp/www/phpcms/phpcms/templates/default/content/header_page.html 
  14.     [9] => E:/wamp/www/phpcms/phpcms/templates/default/content/index.html 
  15.     [10] => E:/wamp/www/phpcms/phpcms/templates/default/content/list.html 
  16.     [11] => E:/wamp/www/phpcms/phpcms/templates/default/content/list_download.html 
  17.     [12] => E:/wamp/www/phpcms/phpcms/templates/default/content/list_picture.html 
  18.     [13] => E:/wamp/www/phpcms/phpcms/templates/default/content/list_video.html 
  19.     [14] => E:/wamp/www/phpcms/phpcms/templates/default/content/message.html 
  20.     [15] => E:/wamp/www/phpcms/phpcms/templates/default/content/page.html 
  21.     [16] => E:/wamp/www/phpcms/phpcms/templates/default/content/play_list.html 
  22.     [17] => E:/wamp/www/phpcms/phpcms/templates/default/content/rss.html 
  23.     [18] => E:/wamp/www/phpcms/phpcms/templates/default/content/search.html 
  24.     [19] => E:/wamp/www/phpcms/phpcms/templates/default/content/show.html 
  25.     [20] => E:/wamp/www/phpcms/phpcms/templates/default/content/show_download.html 
  26.     [21] => E:/wamp/www/phpcms/phpcms/templates/default/content/show_picture.html 
  27.     [22] => E:/wamp/www/phpcms/phpcms/templates/default/content/show_video.html 
  28.     [23] => E:/wamp/www/phpcms/phpcms/templates/default/content/show_videolist.html 
  29.     [24] => E:/wamp/www/phpcms/phpcms/templates/default/content/tag.html 
  30.     [25] => E:/wamp/www/phpcms/phpcms/templates/default/content/tag_list.html 
  31.     [26] => E:/wamp/www/phpcms/phpcms/templates/default/content/video_album.html 
  32.     [27] => E:/wamp/www/phpcms/phpcms/templates/default/content/video_for_ck.html 
  33.  */  
  34. echo "<pre>";  
  35. print_r(glob('E:/wamp/www/phpcms/phpcms/templates/default/content/*.html'));  
  36. //print_r(glob('E:/wamp/www/phpcms/phpcms/templates/default/content/video_*.html'));  
  37.   
  38.   
  39. /**  
  40.  *  Array  
  41. (  
  42.     [0] => category.html  
  43.     [1] => category_download.html  
  44.     [2] => category_picture.html  
  45.     [3] => category_video.html  
  46.     [4] => download.html  
  47.     [5] => footer.html  
  48.     [6] => header.html  
  49.     [7] => header_min.html  
  50.     [8] => header_page.html  
  51.     [9] => index.html  
  52.     [10] => list.html  
  53.     [11] => list_download.html  
  54.     [12] => list_picture.html  
  55.     [13] => list_video.html  
  56.     [14] => message.html  
  57.     [15] => page.html  
  58.     [16] => play_list.html  
  59.     [17] => rss.html  
  60.     [18] => search.html  
  61.     [19] => show.html  
  62.     [20] => show_download.html  
  63.     [21] => show_picture.html  
  64.     [22] => show_video.html  
  65.     [23] => show_videolist.html  
  66.     [24] => tag.html  
  67.     [25] => tag_list.html  
  68.     [26] => video_album.html  
  69.     [27] => video_for_ck.html  
  70. )  
  71.  */  
  72. echo "<pre>";  
  73. print_r(@array_map('basename',glob('E:/wamp/www/phpcms/phpcms/templates/default/content/*.html')));//array_map()回調函數  
  74. //print_r(@array_map('basename',glob('E:/wamp/www/phpcms/phpcms/templates/default/content/video_*.html')));//array_map()回調函數  
  75.   
  76.   
  77. ?>  

第74題:遍歷函數:scandir()與glob()函數的區別web

 

[php]  view plain  copy
 
  1. <?php  
  2.   
  3. /** 
  4.  *  scandir()與glob()函數的區別: 
  5.  * 
  6.  *  遍歷文件夾、遍歷目錄、遍歷子文件夾、遍歷子目錄、遍歷文件 
  7.  *  掃描單層文件夾的狀況 
  8.         一、scandir('E:/wamp/www/phpcms/'); 
  9.  
  10.             案例: 
  11.  
  12.             Array( 
  13.                 [0] => . 
  14.                 [1] => .. 
  15.                 [2] => admin.php 
  16.                 [3] => api 
  17.                 [4] => api.php 
  18.                 [5] => caches 
  19.                 [6] => crossdomain.xml 
  20.                 [7] => favicon.ico 
  21.                 [8] => html 
  22.                 [9] => index.html 
  23.                 [10] => index.php 
  24.                 [11] => js.html 
  25.                 [12] => nbproject 
  26.                 [13] => phpcms 
  27.                 [14] => phpsso_server 
  28.                 [15] => plugin.php 
  29.                 [16] => robots.txt 
  30.                 [17] => statics 
  31.                 [18] => uploadfile 
  32.             ) 
  33.  
  34.         二、glob('E:/wamp/www/phpcms/*'); 
  35.  
  36.             案例: 
  37.  
  38.             Array( 
  39.                 [0] => E:/wamp/www/phpcms/admin.php 
  40.                 [1] => E:/wamp/www/phpcms/api 
  41.                 [2] => E:/wamp/www/phpcms/api.php 
  42.                 [3] => E:/wamp/www/phpcms/caches 
  43.                 [4] => E:/wamp/www/phpcms/crossdomain.xml 
  44.                 [5] => E:/wamp/www/phpcms/favicon.ico 
  45.                 [6] => E:/wamp/www/phpcms/html 
  46.                 [7] => E:/wamp/www/phpcms/index.html 
  47.                 [8] => E:/wamp/www/phpcms/index.php 
  48.                 [9] => E:/wamp/www/phpcms/js.html 
  49.                 [10] => E:/wamp/www/phpcms/nbproject 
  50.                 [11] => E:/wamp/www/phpcms/phpcms 
  51.                 [12] => E:/wamp/www/phpcms/phpsso_server 
  52.                 [13] => E:/wamp/www/phpcms/plugin.php 
  53.                 [14] => E:/wamp/www/phpcms/robots.txt 
  54.                 [15] => E:/wamp/www/phpcms/statics 
  55.                 [16] => E:/wamp/www/phpcms/uploadfile 
  56.             ) 
  57.  */  
  58. echo "<pre>";print_r(scandir('E:/wamp/www/phpcms/'));//跟glob相比多出來兩個元素,分別是: "." 和 ".."  
  59. echo "<pre>";print_r(glob('E:/wamp/www/phpcms/*'));//以數組的形式返回與指定模式相匹配的文件名或目錄  
  60. ?>  

第75題:var_export()函數用法:面試

 

[php]  view plain  copy
 
  1. <?php  
  2.   
  3. /** 
  4. * 將字符串轉換爲數組 
  5. * @param    string  $data   字符串 
  6. * @return   array   返回數組格式,若是,data爲空,則返回空數組 
  7.  
  8.   結果: 
  9.  
  10.     Array( 
  11.         [ishtml] => 1 
  12.         [template_list] => default 
  13.         [page_template] => page 
  14.         [meta_title] =>  
  15.         [meta_keywords] =>  
  16.         [meta_description] =>  
  17.         [category_ruleid] => 1 
  18.         [show_ruleid] =>  
  19.         [repeatchargedays] => 1 
  20.     ) 
  21.  
  22. */  
  23. function string2array($data) {  
  24.     if($data == '') return array();  
  25.     @eval("\$array = $data;");  
  26.     return $array;  
  27. }  
  28.   
  29. $data='array (  
  30.   \'ishtml\' => \'1\',  
  31.   \'template_list\' => \'default\',  
  32.   \'page_template\' => \'page\',  
  33.   \'meta_title\' => \'\',  
  34.   \'meta_keywords\' => \'\',  
  35.   \'meta_description\' => \'\',  
  36.   \'category_ruleid\' => \'1\',  
  37.   \'show_ruleid\' => \'\',  
  38.   \'repeatchargedays\' => \'1\',  
  39. )';  
  40.   
  41. echo "<pre>";print_r(string2array($data));  
  42.   
  43.   
  44.   
  45.   
  46. $arr=array(  
  47.     'username'=>'admin',  
  48.     'password'=>'123'  
  49. );  
  50.   
  51. /** 
  52.  *  var_export()函數:返回字符串 
  53.  */  
  54.   
  55. $str=var_export($arr,true);//返回的是合法的php代碼,是一個字符串,不是數組  
  56.   
  57. /** 
  58.  *  結果:數組格式的字符串 
  59.  
  60.         array ( 
  61.           'username' => 'admin', 
  62.           'password' => '123', 
  63.         ) 
  64.  */  
  65. echo $str;//正確  
  66. //echo $str['username'];//錯誤,由於此時$str是一個數組格式的字符串,不是數組  
  67.   
  68. @eval("\$str = $str;");//將數組格式的字符串轉換爲數組  
  69. print_r($str['username']);//結果:'admin',此時已將數組格式的字符串轉化爲數組  
  70.   
  71. ?>  
目錄: 5一、php中如何統計一維數組中全部值出現的次數?返回一個數組,其元素的鍵名是原數組的值;鍵值是該值在原數組中出現的次數 5二、php中如何統計字符串中每種字符的出現次數並排序? 5三、php中使用str_word_count()函數計算字符串中的單詞數? 5六、php中redis與memcached區別? 5七、php中memcached的使用案例? 5八、php中文件緩存的使用案例? 5九、php中redis使用案例? 60、php如何讀取php.ini配置文件中的配置選項的值? 6一、php中如何動態的調用一個函數? 6二、php中__call魔術方法的使用 6三、php中如何解析php.ini配置文件? 6五、php中的重寫與重載的區別? 6六、php中static靜態局部變量(不是數組)在函數中的使用 6七、php中session的內部機制實現原理 6八、php中的垃圾回收機制 6九、php如何將外網圖片本地化或將外網圖片下載到本地的原理? 70、php中緩存技術總結 7一、php中xml文檔的CDATA理解 7二、php中如何列出目錄下的全部模板文件?遍歷文件夾、遍歷文件、遍歷目錄及子目錄、遍歷文件夾及子文件夾 7四、php中遍歷函數:scandir()與glob()函數的區別? 7五、php中經過var_export()函數返回數組格式的字符串
相關文章
相關標籤/搜索