国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

騰訊php部分面試題答案

2024-05-04 23:06:35
字體:
來源:轉載
供稿:網友

1,請說明在php.ini中safe_mode開啟之后對于PHP系統函數的影響

safe_mode是提供一個基本安全的共享環境,在一個多用戶共享的phpweb服務器上,當這臺服務器開啟了safe_mode模式,有以下函數將會受到影響,首先,一下嘗試訪問文件系統的函數將會被限制,運行服務器的用戶id,如果想要嘗試操作某個文件,必須要用戶該文件的讀取或者寫入的訪問權限.

因此,在safe_mode打開的情況下,下列函數將會收到限制:

ckdir,move_uploaded_file,chgrp,parse_ini_file,chown,rmdir,copy,rename,fopen,require,highlight_file,show_source,include,symlink,link,touch,mkdir,unlink

以上都是跟操作文件系統有關的函數,除此之外,一些php擴展的函數也會受到限制,不能在程序里面直接加載擴展,只能到php.ini里加載,而且php如果需要執行操作系統的程序時,必須在safe_mode_exec_dir中指定程序的路徑,否則執行將失敗。此外還有exec,shell_exec,pasathru,system,popen等函數會收到限制

2,PHP5中魔術方法函數有哪幾個,請舉例說明各自的用法

魔術方法:__construct() :實例化對象時被調用;__destuct():當刪除一個對象或者對象操作終止是被執行;__call():調用對象不存在方法時被調用;__get():調用對象不存在的屬性時被調用;__set():設置對象不存在的屬性時被調用;__toString():打印一個對象時被調用,比如echo $obj,print($obj);__clone():克隆對象時被調用,比如$t = new Test();$tt = clone $t;__sleep():serialize之前被調用,若對象比較大,想做一些刪除在序列化,可以考慮使用該方法;__wakeup():unserialize之前被調用,做些對象的初始化;__isset():檢測對象是否存在屬性的時候被調用,如 isset($c->name);__unset():unset一個對象屬性時被調用,如:unset($c->name);__set_state():調用var_export時被調用,用__set_state的返回值作為 var_export的返回值;,__autoload():實例化一個對象時,如果對應的類不存在,在該方法被調用。

魔術常量:__LINE__:返回當前行號;__FILE__:返回文件的完整路徑和文件名,如果用在包含文件里面,則返回包含文件名,自 php4.0.2開始,__FILE__總是包含一個絕對路徑,而在此前的版本有時候會包含一個相對路徑__FUNCTION__:返回函數名稱(自 php4.3.0新加的)。

自php5起本常量返回該函數被定義時的名稱,區分大小寫,在php4中該值總是小寫;__CLASS__:返回類的名稱,自 php4.3.0新加的,自php5起本常量返回該類被定義時的名稱,區分大小寫,在php4中該值總是小寫的;__METHOD__:返回類的方法名。 php5新加的

3,如何在命令行下運行PHP腳本(寫出兩種方式)同時向PHP腳本傳遞參數?

window下,假設php安裝目錄為c:/program files/php5/,那么使用命令窗口進入到該路徑下,敲入php hello.php回車,則會執行當前路徑下的hello.php文件,

如果要指向其他路徑下php文件,可以在php 路徑/hello.php ,這種形式稱為CLI模式,我們平時通過瀏覽器看到的那種成為CGI模式,至于傳遞參數,php文件在cli模式下,直接通過在文件名稱后面接參數,多個參數中間用空格隔開,在php文件里面是通過兩個變量來獲取參數的,一個是$argv,一個是$argc,前者是傳遞參數的數組,默認第一個為php文件的名稱;后者為$argv的數組個數。

linux下,一般程序安裝都會安裝在/usr/bin/php下面,可以通過man php查看一下,如果有信息說明可以使用,使用方法類似于window下。如果前面這步成立,那么你可以直接 php php文件 來運行php文件,如果man php沒有信息,則說明當前php執行文件沒有在環境路徑里面,可以修改環境路徑包含php路徑,也可以類似于window進入php路徑,在執行 php php文件。其他類似于window下。

4,使對象可以像數組一樣進行foreach循環,要求屬性必須是私有

php5里面已經有了iterator接口,只要實現該接口,即可以實現對象私有屬性被foreach遍歷:

  1. <?php 
  2. class Sample implements iterator{ 
  3. private $var = array(1,2,3,4,5); 
  4. public function __construct(){} 
  5. public function rewind(){ reset($this->var);} 
  6. public function current(){return current($this->var);} 
  7. public function key(){return key($this->var);} 
  8. public function next(){return next($this->var);} 
  9. public function valid(){return ($this->current()!==false);} 
  10. }//開源軟件:Vevb.com 
  11. $s = new Sample(); 
  12. foreach($s as $k=>$v){ echo $k.'='.$v.'<br/>';} 
  13. ?> 

5.簡單說明PHP的垃圾收集機制是怎樣的?

對變量有個引用計數,計數到0時變量被銷毀.

6.使對象可以像數組一樣進行foreach循環,要求屬性必須是私有.

Iterator模式的PHP5實現,寫一類實現Iterator接口.

我記得好像對象也可以foreach,或者用反射的方式,如果真要迭代模式實現的話,去看設計模式或者java的寫法了.

7.請寫一段PHP代碼,確保多個進程同時寫入同一個文件成功,代碼:

  1. function writeData($path$mode$data){ $fp = fopen($path$mode); $retries = 0; $max_retries = 100; do { if ($retries > 0) { usleep(rand(1, 10000)); } $retries += 1; }while (!flock($fp, LOCK_EX) and $retries <= $max_retries); if ($retries == $max_retries) { return false; } fwrite($fp"$data/n"); flock($fp, LOCK_UN); fclose($fp); return true; } 

8.你用什么方法檢查PHP腳本的執行效率,通常是腳本執行時間,和數據庫SQL的效率,通常是數據庫Query時間,并定位和分析腳本執行和數據庫查詢的瓶頸所在?

PHP腳本的執行效率

1, 代碼腳本里計時。

2, xdebug統計函數執行次數和具體時間進行分析,最好使用工具winCacheGrind分析

3, 在線系統用strace跟蹤相關進程的具體系統調用.

數據庫SQL的效率

sql的explain(mysql),啟用slow query log記錄慢查詢.

通常還要看數據庫設計是否合理,需求是否合理等.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桃园县| 京山县| 化德县| 全椒县| 富裕县| 灵石县| 兴和县| 资兴市| 遂宁市| 西贡区| 科技| 石柱| 双城市| 望江县| 晋宁县| 中牟县| 阳原县| 葵青区| 东台市| 汕头市| 上犹县| 太原市| 诏安县| 承德市| 新和县| 中卫市| 延川县| 新绛县| 寻乌县| 三都| 浏阳市| 黔西| 桦川县| 法库县| 和平区| 兰西县| 永兴县| 铜山县| 忻州市| 中宁县| 成安县|