php源碼分析

來源:互聯網
上載者:User

標籤:php源碼分析

wget http://pecl.php.net/get/vld-0.11.2.tgz
tar zxf vld-0.11.2.tgz
cd vld-0.11.2
which phpize
  /usr/bin/phpize
find / -name ‘php-config‘
  /usr/bin/php-config
./configure --with-php-config=/usr/bin/php-config --enable-vld
echo $?
make && make install
ll /usr/lib64/php/modules/

vi php.ini
extension=vld.so

/etc/init.d/php-fpm restart
查看phpinfo()
====================案例:
vi demo.php
$a = ‘hello world’;
echo $a;

=====================源碼分析:
[[email protected] yeqing]# php -dvld.active=1 ./demo.php
Finding entry points
Branch analysis from position: 0
Return found
filename:       /home/yeqing/demo.php
function name:  (null)
number of ops:  3
compiled vars:  !0 = $a
line     # *  op                           fetch          ext  return  operands
---------------------------------------------------------------------------------
   2     0  >   ASSIGN                                                   !0, ‘hello+world%21%21‘
   3     1      ECHO                                                     !0
   6     2    > RETURN                                                   1

branch: #  0; line:     2-    6; sop:     0; eop:     2
path #1: 0,
hello world!!
================
行號、opcodes指令編號、指令碼開始標記、結束標記、ZEND VM指令、傳回值、ZEND VM指令對應的參數

opcodes手冊:
http://php.net/manual/en/internals2.opcodes.list.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 demo.php
其中:
 -dvld.verbosity=3是VLD在目前的版本可以顯示的最詳細的資訊

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


讀源碼要學會一種精神: 順藤摸瓜
參考文檔:
  http://www.php-internals.com/book/?p=C-php-vld
  http://www.php-internals.com/book/?p=chapt02/02-03-02-opcode
  http://php.net/manual/zh/internals2.ze1.zendapi.php
  http://www.laruence.com/2011/03/04/1894.html
  http://blog.pureisle.net/archives/2294.html
  http://www.imsiren.com/archives/704
  http://blog.csdn.net/siren0203/article/details/8085813
  http://www.cnblogs.com/miao-zp/p/6374311.html

本文出自 “開發與營運” 部落格,謝絕轉載!

php源碼分析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.