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;

=====================源码分析:
[root@node2 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


本文转自cloves 51CTO博客,原文链接:http://blog.51cto.com/yeqing/1947654

相关文章
|
2月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
2天前
|
JavaScript PHP 数据安全/隐私保护
乞丐在线要饭系统PHP网站源码
在这个物欲横流、竞争激烈的时代,有时候我们真心觉得钱来得太不容易,甚至连最基本的生存都成了负担。于是,我们想出了一个特别“独特”的点子:用利息砸我,给我点施舍!
17 1
|
10天前
|
前端开发 PHP 数据库
原生PHP网站源码
原生PHP网站通常指的是使用纯PHP代码编写的网站,没有使用框架或者类库来简化开发流程。
19 1
|
22天前
|
前端开发 JavaScript 小程序
前端uni开发后端用PHP的圈子系统该 如何做源码?
圈子系统系统基于TP6+Uni-app框架开发;客户移动端采用uni-app开发,管理后台TH6开发。系统支持微信公众号端、微信小程序端、H5端、PC端多端账号同步,可快速打包生成APP
|
2月前
|
监控 IDE PHP
php xdebug的配置、调试、跟踪、调优、分析
php xdebug的配置、调试、跟踪、调优、分析
|
2月前
|
缓存 监控 算法
分析慢日志文件来优化 PHP 脚本的性能
分析慢日志文件来优化 PHP 脚本的性能
|
28天前
|
前端开发 JavaScript PHP
Thinkphp在线客服系统源码多语言外贸版_PHP客服系统源码Uniapp开发搭建+论文设计
Thinkphp在线客服系统源码多语言外贸版_PHP客服系统源码Uniapp开发搭建+论文设计
|
2月前
|
PHP
PHP全自动采集在线高清壁纸网站源码
PHP全自动采集在线高清壁纸网站源码,PHP全自动采集在线高清壁纸网站源码,一款开源壁纸源码,无需安装。集合360壁纸,百度壁纸,必应壁纸,简单方便。每天自动采集,自动更新,非常不错,php源码 网站源码 免费源码 自动采集。
54 3
|
2月前
|
PHP 数据库
2024表白墙PHP网站源码
2024表白墙PHP网站源码
42 1
|
3月前
|
安全 前端开发 PHP
构建与验证表单:传统PHP与Laravel框架的比较分析——探索Web开发中表单处理的优化策略和最佳实践
【8月更文挑战第31天】在 Web 开发中,表单构建与数据验证至关重要。传统 PHP 方法需手动处理 HTML 表单和数据验证,而 Laravel 框架则提供了一种更现代、高效的解决方案。本文通过对比传统 PHP 和 Laravel 的方法,探讨表单构建与验证的最佳实践。Laravel 通过简洁的语法糖、内置的数据过滤和验证机制,显著提升了代码的安全性和可维护性,适用于大型项目或需要快速开发的场景。然而,在追求灵活性的小型项目中,直接使用 PHP 仍是不错的选择。了解两者的优劣,有助于开发者根据项目需求做出最佳决策。
36 0