安裝與使用vld查看php的opcode代碼

來源:互聯網
上載者:User

標籤:php   vld   opcode   

需要分析PHP代碼的效能,或者說實現同樣功能的代碼到底哪個更好呢?或者說想知道底層的實現可以使用VLD查看opcode

下載與安裝VLD

# wget http://pecl.php.net/get/vld-0.11.2.tgz

# tar zxvf vld-0.11.2.tgz

# cd ./vld-0.11.2

# /usr/local/php/bin/phpize              或者直接phpize

# ./configure --with-php-config=/usr/local/php/bin/php-config --enable-vld

# make && make install


---------------------------------

編輯php.ini檔案啟用vld擴充:

php.ini位置

#cd /usr/local/php/lib

增加

extension=vld.so


重啟Apache:

# /usr/local/apache2/bin/apachectl restart

---------------------------------

查看phpinfo()資訊


650) this.width=650;" src="https://s1.51cto.com/wyfs02/M00/95/06/wKioL1kRHNiCEveAAACmI2KI8Uo302.jpg-wh_500x0-wm_3-wmp_4-s_3597444610.jpg" title="1353158957_8977.jpg" alt="wKioL1kRHNiCEveAAACmI2KI8Uo302.jpg-wh_50" />

--------------------------------

至此,VLD就安裝完了。寫個簡單的test.php

<?php

$a=‘123‘;   

echo $a;  

?>


# php -dvld.active=1 ./test.php

如果沒有設定php環境變數的話

查看結果

650) this.width=650;" src="https://s3.51cto.com/wyfs02/M02/95/06/wKiom1kRHW3Q3Il4AAD5TOehwZI865.jpg-wh_500x0-wm_3-wmp_4-s_356743218.jpg" title="1353159624_5337.jpg" alt="wKiom1kRHW3Q3Il4AAD5TOehwZI865.jpg-wh_50" />

# php -dvld.active=1 ./test.php

如果沒有設定php環境變數的話

查看結果


如上為VLD輸出的PHP代碼產生的中間代碼的資訊,說明如下:

Branch analysis from position 這條資訊多在分析數組時使用。

Return found 是否返回,這個基本上有都有。

filename 分析的檔案名稱

function name 函數名,針對每個函數VLD都會產生一段如上的獨立的資訊,這裡顯示當前函數的名稱

number of ops 產生的運算元

compiled vars 編譯期間的變數,這些變數是在PHP5後添加的,它是一個緩衝最佳化。這樣的變數在PHP源碼中以IS_CV標記。

op list 產生的中間代碼的變數列表

使用-dvld.active參數輸出的是VLD預設設定,如果想看更加詳細的內容。可以使用-dvld.verbosity參數。

 

#php -dvld.active=1 -dvld.verbosity=3 text.php

-dvld.verbosity=3是VLD在目前的版本可以顯示的最詳細的資訊.

如果我們只是想要看輸出的中間代碼,並不想執行這段PHP代碼,可以使用-dvld.execute=0來禁用代碼的執行

#php -dvld.active=1 -dvld.execute=0 text.php


VLD擴充的參數列表:

-dvld.active 是否在執行PHP時啟用VLD掛鈎,預設為0,表示禁用。可以使用-dvld.active=1啟用。

-dvld.skip_prepend 是否跳過php.ini設定檔中auto_prepend_file指定的檔案, 預設為0,即不跳過包含的檔案,顯示這些包含的檔案中的代碼所產生的中間代碼。此參數生效有一個前提條件:-dvld.execute=0

-dvld.skip_append 是否跳過php.ini設定檔中auto_append_file指定的檔案, 預設為0,即不跳過包含的檔案,顯示這些包含的檔案中的代碼所產生的中間代碼。此參數生效有一個前提條件:-dvld.execute=0

-dvld.execute 是否執行這段PHP指令碼,預設值為1,表示執行。可以使用-dvld.execute=0,表示只顯示中間代碼,不執行產生的中間代碼。

-dvld.format 是否以自訂的格式顯示,預設為0,表示否。可以使用-dvld.format=1,表示以自己定義的格式顯示。這裡自訂的格式輸出是以-dvld.col_sep指定的參數間隔

-dvld.col_sep 在-dvld.format參數啟用時此函數才會有效,預設為 “\t”。

-dvld.verbosity 是否顯示更詳細的資訊,預設為1,其值可以為0,1,2,3 其實比0小的也可以,只是效果和0一樣,比如0.1之類,但是負數除外,負數和效果和3的效果一樣 比3大的值也是可以的,只是效果和3一樣。

-dvld.save_dir 指定檔案輸出的路徑,預設路徑為/tmp。

-dvld.save_paths 控制是否輸出檔案,預設為0,表示不輸出檔案

-dvld.dump_paths 控制輸出的內容,現在只有0和1兩種情況,預設為1,輸出內容



使用VLD比較代碼差異

代碼text1.php

[php] view plain copy

$var = 111;  

$str = "AAA " . $var . " BBB";  


代碼text2.php

[php] view plain copy

$var = 111;  

$str = "AAA $var BBB";  

650) this.width=650;" src="https://s5.51cto.com/wyfs02/M02/95/08/wKiom1kRJK_AFYxzAAIeE3-rm3o555.jpg-wh_500x0-wm_3-wmp_4-s_227359013.jpg" title="1353164246_2967.jpg" alt="wKiom1kRJK_AFYxzAAIeE3-rm3o555.jpg-wh_50" />



本文出自 “我是程式我最大” 部落格,請務必保留此出處http://skinglzw.blog.51cto.com/10729606/1923487

安裝與使用vld查看php的opcode代碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.