【PHP】php 源码之宏 PHP_FUNCTION

PHP内核之PHP_FUNCTION宏定义 平常我们查看php源代码的时候,经常会看到有以下代码的存在: 那么,这其中的PHP_FUNCTION到底是什么呢?现在开始,来看看他到底是什么鬼东西。 大写的,猜测一下,应该是宏定义,搜索,果然在源码的php-5.6.22-src\main\php.h文件里面,大概在347行 接着搜索ZEND_FUNCTION这个宏定义,在php-5.6.22-src\Zend\ze 阅读详情

本文所用 php 源码版本为 7.1.33

在 php 源码目录下的 main/php.h 头文件中定义了宏 PHP_FUNCTION,
我们经常使用的 php 函数就是她来定义的,
PHP_FUNCTION
从上图中可以看到该宏定义为 ZEND_FUNCTION,
而 ZEND_FUNCTION 定义在 Zend/zend_api.h 头文件中,
ZEND_FUNCTION
在 C 语言宏定义中的 ## 代表连接在其左右的字符串。
由上图中可以看到该宏的定义最终落在宏 INTERNAL_FUNCTION_PARAMETERS 上,
INTERNAL_FUNCTION_PARAMETERS
其中,zend_execute_data 为结构体 _zend_execute_data 的别名,见下图,
zend_execute_data
结构体 _zend_execute_data 的定义见下图,
_zend_execute_data
以我们常用的 bcmath 扩展中的 bcadd 函数(ext/bcmath/bcmath.c)为例,
在编译阶段 PHP_FUNCTION(bcadd) 会被替换为

void zif_bcadd(zend_execute_data *execute_data, zval *return_value)
2300套PHP项目源码 立即下载

相关推荐

论文精读-ReTransformer ReRAM-based Processing-in-MemoryArchitecture for Transformer Acceleration

Transformer已经成为一种流行的深度神经网络(DNN)模型,用于神经语言处理(NLP)应用,并在神经机器翻译、实体识别等方面表现出优异的性能。然而,其在自回归解码器中的规模化点积注意机制在推理过程中带来了性能瓶颈。Transformer也是计算和内存密集型的,需要硬件加速解决方案。

a284365的博客 1923

php bcadd 累加,PHP bcadd()用法及代码示例

PHP中的bcadd()函数是一个内置函数,用于添加两个任意精度数字。此函数接受两个任意精度的数字作为字符串,并在将结果缩放到指定的精度后返回两个数字的加法。用法:string bcadd ( $num_str1, $num_str2, $scaleVal)参数:此函数接受上述语法中所示的三个参数,并在下面进行说明:$num_str1:此参数为字符串类型,表示左侧操作数或我们要执行加法运算的两个数...

weixin_30647853的博客 3281

【Elasticsearch专栏 16】深入探索:Elasticsearch的Master选举机制及其影响因素分析

Elasticsearch的Master选举机制是其分布式架构的基石,确保集群高可用性和数据一致性。通过多数派协议,节点间交换信息并投票选举Master,以维护集群状态和处理请求。该机制自动处理故障转移,保障服务连续性。

weixin_40736233的博客 1775

bcadd php 不存在,php7 bcmul函数没有

bcmul没有,是php70w-bcmul这个没有装。yum install php70w-bcmath 就ok了。顺便来个uuid的生成函数吧。function uuid(){list($usec, $sec) = explode(" ", microtime(false));$usec = (string)($usec * 10000000);$timestamp = bcadd(bcadd(...

weixin_39820173的博客 636

Fortran基础编程(3)——格式化输出

本篇推文将进一步讲解Fortran基础语法中格式化输出与声明部分,让我们的代码更加美观起来吧~

qq_45715554的博客 3827

提示工程ROI计算模板:架构师私藏Excel表(含自动计算)

花3个人力优化提示词,到底能带来多少实际收益?“这个提示工程项目值得做吗?投入10万成本,多久能回本?“不同LLM应用的提示词优化优先级怎么排?全凭经验拍脑袋?当前90%的企业在提示工程投入上缺乏标准化的量化评估方法,导致资源浪费(盲目投入无回报项目)或错失机会(低估高价值优化点)。ROI = (总收益 - 总成本) / 总成本 × 100%对于提示工程,总成本=显性成本+隐性成本,总收益=直接收益+间接收益(后文会详细拆解)。提示工程的价值不是“玄学”,而是可以用数据量化的投资行为。本文分享的。

AI开发架构师 1076

善用php自带函数bcadd()

第一次看到bcadd()这个函数时,我还一脸懵逼,啥?官方竟然有这样名字的自带函数.瞬间就引起了我极大兴趣. 通过查询官方文档,我总算了解了它的作用以及用法. 作用:两个任意精度数字的加法计算.总结来说就是:精确求和呗 众所周知,php在进行浮点数计算时结果并不一定是精确到了最后一位,例如 <?php $a =0.1; $b = 0.7; var_dump(($a + $b) == 0.8); //打印的结果竟然是boolean false 然后我们再看使用bcadd()函数后的结果:.

Livenus_csdn的博客 6250

Weka学习笔记01:初探Weka世界

下载、安装和启动Weka、Weka数据格式

howard2005的专栏 1472

分享124个PHP源码,总有一款适合您

php

zdh13370188237的博客 4640

【开源电机驱动】位置环控制

这是三闭环里的最后一个:位置闭环控制。如果你认真的阅读并推导了前章节,那么这一节将会很好理解。一如既往,我会使用简练的语言来描述复杂的问题。本章节主要涉及位置环的一些概念,以及控制框图。文章不会涉及具体的代码。

BadBoyHolly的博客 6097

从DDPM到DDIM:深入解读《Denoising Diffusion Implicit Models》

DDIM发表在ICRL2021上,是DDPM重要的改进之一,能显著提高DDPM的样本质量、减少采样时间,并且能显式控制插值,已经被广泛应用到现在的Diffusion Models上。这篇博客和大家一起详细解读一下DDIM,认识这一伟大的模型。.........

沉迷单车的追风少年 1万+

分享121个PHP源码,总有一款适合您

php

zy0412326的专栏 5788

23、电生理与CSD分析:探索大脑活动的前沿技术

本文介绍了电生理与电流源密度(CSD)分析在探索大脑活动中的前沿应用。从电生理技术的发展现状,到局部场电位(LFPs)的起源与解释,重点阐述了CSD分析的原理、实验方法及其在绘制皮层兴奋流、解析突触输入和研究自发振荡中的广泛应用。文章还总结了该领域的优势与挑战,并展望了技术改进、多模态融合、数据分析创新及临床拓展的未来方向,展示了这些技术在揭示大脑功能机制中的关键作用。

Apple的专栏 122

php 如何宏定义,[PHP] PHP源码常用代码中的宏定义

PHP源码常用代码宏定义:#define 宏名 字符串#表示这是一条预处理命令,所有的预处理命令都以#开头。define是预处理命令。宏名是标识符的一种,命名规则和标识符相同。字符串可以是常数、表达式等。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。1.#define PHP_FUNCTION ZEND_FUNCTI...

weixin_36330888的博客 399

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

PHP7源码分析之CG和EG

在阅读PHP源码的时候,会遇到很多宏。如果不了解这些宏的含义,对代码理解会带来很多困扰。现在我们就一起来看看CG和EG两个宏的含义。 CG 含义 CG的含义是 compiler_globals。Zend编译器相关的全局变量。 作用 大家都知道PHP代码最终是转化为Opcode去执行的。在PHP转换为Opcode过程中需要保存一些信息。这些信息就保存在CG全局变量中。 如果想了解Zend是如何把PHP代码转换为Opcode,使用GC全局变量保存了那些信息,可以查看Zend/zend_langua.

u013756836的专栏 673

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

[PHP] PHP源码常用代码中的宏定义

PHP源码常用代码宏定义:#define 宏名 字符串#表示这是一条预处理命令,所有的预处理命令都以#开头。define是预处理命令。宏名是标识符的一种,命名规则和标识符相同。字符串可以是常数、表达式等。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。 1.#define PHP_FUNCTION ZEND_FUNC...

weixin_34255793的博客 536

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

从php内核角度分析php弱类型

前言 在CTF比赛中PHP弱类型的特性常常被用上,但我们往往知其然不知其所以然,究竟为什么PHP是弱类型呢?很少人深究。在这次源码分析的过程中我收获很大,第一次学会了如何深入理解一个问题,虽然花费了我很多时间,但这可以说是一段非常值得的经历。 正文 首先引入一个问题,为什么以下结果是恒为真的呢? var_dump([]>1); var_dump([]>0); var_dump...

mysteryflower的专栏 200

php定义宏,php 内核探秘之 PHP_FUNCTION 宏

本人也只是个初入门的菜鸟,因对技术有着向往,故在“无趣”的工作之余,尽自己所能提升自己。由于我的 C 语言功底也有限,故本文的深度也有限,如有幸得大牛阅读,还望指导一二,小弟感激不尽。PHP 的函数作为 PHPer,我们几乎每天都在写函数,我们一定会好奇,那些 PHP 内置的函数,是长什么样子的。如果写过 PHP 扩展的话,一定知道这个宏:PHP_FUNCTION。在定义一个函数的时候,这样来使用...

weixin_29807507的博客 315

PHP扩展开发系列02 - 老司机起步之函数

上一篇扩展开发引导文章中。创建了编写扩展的三个基本文件。或许你会有个疑问PHP没有类似的自动生成项目框架的工具吗? 当然有。这篇文章就开始介绍使用 "php-ext-cli" 工具来生成扩展项目文件注意这里的 "php-ext-cli" 本身没有这玩意,是我给 PHP 自带的起的别名这个工具就是 php-src/ext/ext_skel ...

weixin_34360651的博客 94

php 内核探秘之 PHP_FUNCTION 宏

本人也只是个初入门的菜鸟,因对技术有着向往,故在“无趣”的工作之余,尽自己所能提升自己。由于我的 C 语言功底也有限,故本文的深度也有限,如有幸得大牛阅读,还望指导一二,小弟感激不尽。 PHP 的函数 作为 PHPer,我们几乎每天都在写函数,我们一定会好奇,那些 PHP 内置的函数,是长什么样子的。如果写过 PHP 扩展的话,一定知道这...

weixin_34208283的博客 108

php官网源码编译、以及php扩展开发

然后运行./configure --with-php-config=/Users/linsonggao/workspace/php8215/bin/php-config(实际为php-config所在路径)在linsonggao文件夹下,运行/Users/linsonggao/workspace/php8215/bin/phpize(实际为phpize所在路径)mac的brew安装的版本应该有问题不是最新的,也有可能是我镜像的问题下载不到最新的扩展、我试过重新下载php源码包或者brew指定版本都没用。

linsonggao的博客 1144

php扩展的用到的一些宏

宏 说明 AC_MSG_CHECKING(message) 在执行 configure 命令时输出“checking ”等信息。 AC_MSG_RESULT(value) 取得 AC_MSG_CHECKING 的执行结果,一般情况下 value 应为 yes 或 no。 AC_MSG_ERROR(message) 在执行 configure 命令时输出一条错误

jinlong0326的专栏 655

PHP绕过disable_function限制

前言 之前对php中的这个disable_function没什么了解,不过通过国赛决赛中的一道题引起了注意,因为在对基本上所有的shell命令禁用之后必须想办法突破disable_function才行,这里学习几种突破disable_function的方法。 LD_PRELOAD环境变量突破 LD_PRELOAD是Linux系统的下一个有趣的环境变量:“它允许你定义在程序运行前优先加载的动态链接库...

BerL1n 5391

CTFHub Web进阶-PHP:Bypass_disable_function通关4之PHP-FPM

摘要:本文详细讲解了CTFHub中Web进阶disable-functions关卡的PHP-FPM绕过技术。通过分析PHP-FPM绕过原理(利用FastCGI协议直接通信),展示如何使用蚁剑工具连接Webshell并加载Bypass插件,最终成功执行系统命令获取flag。实战部分包括靶场环境搭建、源码分析、蚁剑连接、虚拟终端操作等全流程,重点演示了通过生成代理脚本绕过disable_function限制的技术方案。

mooyuan的网络安全博客 1284
上一篇: 【C】标准库 stdarg.h va_start
下一篇: 【Git】创建和删除远程分支
November's  chopin
博客等级 码龄10年 10粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值