国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用VLD擴展生成Opcode,解決一個奇葩問題

lyning / 3055人閱讀

摘要:是計算機指令中的一部分,用于指定要執行的操作,指令的格式和規范由處理器的指令規范指定。其實這個擴展可以做到更多,比如糾結性能問題,可以使用這個擴展盡可能的優化你的代碼,或者使用這個擴展排除一些非常隱性的錯誤。

Opcode

Opcode是計算機指令中的一部分,用于指定要執行的操作,指令的格式和規范由處理器的指令規范指定。

簡而言之,Opcode就是運行在Zend VM中的指令(或者成為字節碼 Byte Codes)

Installation
git clone https://github.com/derickr/vld.git vld # 也可以使用其他方式獲取,下面介紹
cd vld
phpize
./configure --with-php-config=/usr/local/php7/bin/php-config --enable-vld # 注意替換自己的路徑
sudo make install
sudo vim /usr/local/php7/etc/php.ini

在 php.ini 增加 extension=vld.so , PHP7自己編譯的需要自己新建php.ini文件
!! 注意 php.ini 中 extension_dir="/usr/local/php7/lib/php/extensions/" 設置的位置

PECL::Package::vld
Download and Installation Instructions

Problem

這是在SF的另一篇博文(面試類型)中出現的,找了一下,沒找到文章。特引用其中一個例子,講解VLD的使用
如果有哪位朋友找到了還請告訴我一聲,我會注上說明,謝謝!

看以下栗子

$apple = 1;

if (-1) {
    $apple = 2;
}

echo $apple;

相信很多人看到的第一反應是輸出1,這不是很簡單么?然而并不是,輸出的是2(PHP 7.0.4 (cli)) CodePad

Why

在安裝好vld擴展之后,我們馬上就可以知道是為什么,首先驗證下vld已經安裝

php -m | grep vld # 看到輸出一行 vld 就對了

我們把這個栗子寫到一個test.php(文件名隨意)文件中

執行以下命令

php -dvld.active=1 test.php # 參數表示激活vld擴展

輸出應該如下所示,

Finding entry points
Branch analysis from position: 0
Jump found. Position 1 = 2, Position 2 = 3
Branch analysis from position: 2
Jump found. Position 1 = -2
Branch analysis from position: 3
filename:       /home/shadowman/test/test.php
function name:  (null)
number of ops:  6
compiled vars:  !0 = $a
line     #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   3     0  E >   ASSIGN                                                   !0, 1
   5     1      > JMPZ                                                     -1, ->3
   6     2    >   ASSIGN                                                   !0, 2
   9     3    >   CONCAT                                           ~3      !0, "%0A"
         4        ECHO                                                     ~3
         5      > RETURN                                                   1

branch: #  0; line:     3-    5; sop:     0; eop:     1; out1:   2; out2:   3
branch: #  2; line:     6-    9; sop:     2; eop:     2; out1:   3
branch: #  3; line:     9-    9; sop:     3; eop:     5; out1:  -2
path #1: 0, 2, 3, 
path #2: 0, 3, 
2

重點內容為

Opcode Descriptions and Examples

number of ops:  6 # 表示有6個操作
compiled vars:  !0 = $a # 編譯之后的變量, ![number] 表示定義的變量,~[number]表示臨時變量
line     #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   3     0  E >   ASSIGN                                                   !0, 1
# 以上表示將1這個字面值賦值給!0,即$a
   5     1      > JMPZ                                                     -1, ->3
# 重點?。∫陨蠈τ?if (-1). opcode解釋為如果-1為0,則跳轉到3(Jump to the address if the value is zero)
   6     2    >   ASSIGN                                                   !0, 2
# 以上表示將2這個字面值賦值給!0,即$a
   9     3    >   CONCAT                                           ~3      !0, "%0A"
# 以上表示拼接 !0($a) 和 "%0A"(
) 賦值給一個臨時變量
         4        ECHO                                                     ~3
# 以上表示輸出 !0($a)
         5      > RETURN                                                   1
# 以上表示返回

可以很簡單的得知,為什么這里會有這個奇葩的"錯誤"。

Conclusion

其實vld這個擴展可以做到更多,比如糾結性能問題,可以使用這個擴展盡可能的優化你的PHP代碼,或者使用這個擴展排除一些非常隱性的錯誤。

如上!謝謝!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31957.html

相關文章

  • Opcodes生成

    查看生成的Opcode,vld擴展下載地址 http://pecl.php.net/package/vld rztar zxvf vld-0.13.0.tgz cd vld-0.13.0/usr/local/webserver/php/bin/phpize ./configure --with-php-config=/usr/local/webserver/php/bin/php-config m...

    Zachary 評論0 收藏0
  • PHP 性能分析與實驗——性能的宏觀分析

    摘要:本文就改變性能分析的角度,并通過實例來分析出的性能方面需要注意和改進的點。如下是作為解釋性語言的執行過程。這里分別啟用和做實驗。 編者按】此前,閱讀過了很多關于 PHP 性能分析的文章,不過寫的都是一條一條的規則,而且,這些規則并沒有上下文,也沒有明確的實驗來體現出這些規則的優勢,同時討論的也側重于一些語法要點。本文就改變 PHP 性能分析的角度,并通過實例來分析出 PHP 的性能方面...

    anquan 評論0 收藏0
  • PHP 性能分析與實驗——性能的宏觀分析

    摘要:本文就改變性能分析的角度,并通過實例來分析出的性能方面需要注意和改進的點。如下是作為解釋性語言的執行過程。這里分別啟用和做實驗。 【編者按】此前,閱讀過了很多關于 PHP 性能分析的文章,不過寫的都是一條一條的規則,而且,這些規則并沒有上下文,也沒有明確的實驗來體現出這些規則的優勢,同時討論的也側重于一些語法要點。本文就改變 PHP 性能分析的角度,并通過實例來分析出 PHP 的性能方...

    yy736044583 評論0 收藏0
  • PHP 性能分析與實驗——性能的宏觀分析

    摘要:本文就改變性能分析的角度,并通過實例來分析出的性能方面需要注意和改進的點。如下是作為解釋性語言的執行過程。這里分別啟用和做實驗。 此前,閱讀過了很多關于 PHP 性能分析的文章,不過寫的都是一條一條的規則,而且,這些規則并沒有上下文,也沒有明確的實驗來體現出這些規則的優勢,同時討論的也側重于一些語法要點。本文就改變PHP 性能分析的角度,并通過實例來分析出 PHP 的性能方面需要注意和...

    ZHAO_ 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<