广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >Deliverer1.0.8是否已经支持 PHP5
  • 328
分享到

Deliverer1.0.8是否已经支持 PHP5

2023-06-20 14:06:42 328人浏览 泡泡鱼
摘要

小编给大家分享一下Deliverer1.0.8是否已经支持 PHP5,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Deliverer 1.0.8 支持 PHP5

小编给大家分享一下Deliverer1.0.8是否已经支持 PHP5,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

经历了两周的迭代,Deliverer 目前更新到了 1.0.8 https://GitHub.com/zhoumengka...

因为是为了解决祖传代码的问题,也听到群友的一些声音,还是很有必要支持下 php5 的,所以这段时间一直在着力解决这个版本兼容问题,没想到问题比较我预计的要难很多。

记录下开发中遇到的问题(主要是体力活)也想分享之后,有兴趣的朋友可以fork一份之后,对代码不那么陌生,更期待各位个 PR

在 PHP7 中,函数或者方法在执行的时候都在zend_execute_data结构体中的execute_data->call->fbc中,而 PHP5 中对应的字段拿到的却是调用该函数的函数,二者差距比较大。

后来发现 PHP5 zend_execute_dataopline中查到了当前执行的函数信息,但在 PHP5.4 前后逻辑还有差异,需要区别对待(还好编译器提示报错的字段)

#if PHP_VERSioN_ID < 50400#define OP1_FUNCTION_PTR(n) (&(n)->op1.u.constant)#else#define OP1_FUNCTION_PTR(n) ((n)->op1.zv)#endif

初次调用解决了,发现内嵌的调用,又不在opline里面了,而且版本不一样,取得地方也不一样,并且和上面的 opline 的判断版本号还不一样,这就只能靠体力来测了。

#if PHP_VERSION_ID < 50500    if (execute_data->fbc != NULL)    {        fbc = execute_data->fbc;    }#else    if (execute_data->call != NULL && execute_data->call->fbc != NULL)    {        fbc = execute_data->call->fbc;    }#endif

最终获取函数信息就是多层判断

    zend_function *fbc;#if PHP_VERSION_ID < 70000#if PHP_VERSION_ID < 50500    if (execute_data->fbc != NULL)    {        fbc = execute_data->fbc;    }#else    if (execute_data->call != NULL && execute_data->call->fbc != NULL)    {        fbc = execute_data->call->fbc;    }#endif    if (fbc == NULL)    {        fbc = get_function_from_opline(execute_data->opline);    }#else    if (execute_data->call != NULL && execute_data->call->func != NULL)    {        fbc = execute_data->call->fbc;    }#endif

在从 opline 里查询到的只是函数的名字,需要再去全局函数表里找到对应的函数指针

static zend_function *get_function_from_opline(zend_op *opline){    zend_function *fbc;    zval *function_name = OP1_FUNCTION_PTR(opline);    if (Z_STRVAL_P(function_name) == NULL)    {        return NULL;    }    if (zend_hash_find(EG(function_table), Z_STRVAL_P(function_name), Z_STRLEN_P(function_name) + 1, (void **)&fbc) ==        FaiLURE)    {        return NULL;    }    return fbc;}

整体来说 PHP5 的处理要比 PHP7 复杂很多,这也说明 PHP7 做的更好了,点赞。

这些就是这几天的开发工作,可能还有很多实际的线上环境没有遇到过,如果你有兴趣,可以使用这个工具来解决问题,也可以一起来完善这个小工具。

下周或者下下周我将加上 watch 功能,支持函数和方法的参数打印。主要是类比 Java 的 Arthas ,因为在其中 trace 和 watch 功能是我最常用的,虽然 PHP 可以线上直接修改加日志,但是这样毕竟不规范,走发布流程又太慢,我想这个 watch 功能还是很有必要的,大概是

$ ./bin/deliverer -w foo -n 3

表示监控foo函数3次调用后退出,并且打印出deliverer-request-id和其入参,可以再根据deliverer-request-id查看完整的调用栈。

以上是“Deliverer1.0.8是否已经支持 PHP5”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网PHP编程频道!

--结束END--

本文标题: Deliverer1.0.8是否已经支持 PHP5

本文链接: https://www.lsjlt.com/news/297165.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Deliverer1.0.8是否已经支持 PHP5
    小编给大家分享一下Deliverer1.0.8是否已经支持 PHP5,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Deliverer 1.0.8 支持 PHP5 ...
    99+
    2023-06-20
  • vs2010是否支持html5
    本教程操作环境:Windows10系统、VS2010版、DELL G3电脑vs2010是否支持html5?让VS2010支持HTML5的解决方案今天用VS2010写前段代码,用到HTML5的标签属性,但是VS2010提示不支持该属性,于是就...
    99+
    2023-05-14
    vs2010 html5
  • PHP是否支持MySQL
    PHP支持MySQL;MySQL是与PHP搭配使用最多的数据库,它们常被称为“黄金组合”。PHP中提供了完整的操作MySQL数据库的函数,这些函数包括了从连接数据库、执行SQL语句、处理数据结果集到关闭数据库的方方面面;通过这些函数,使基于...
    99+
    2022-06-14
    php mysql
  • thinkphp5是否支持事件
    这篇文章主要介绍了thinkphp5是否支持事件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇thinkphp5是否支持事件文章都会有所收获,下面我们一起来看看吧。首先,我们需要了解什么是事件。事件(Event...
    99+
    2023-07-05
  • vuejs是否能够支持ie678
    这篇文章将为大家详细讲解有关vuejs是否能够支持ie678,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 vuejs不支持ie678,因为V...
    99+
    2022-10-19
  • mysql是否支持分布式
    下文主要给大家带来mysql是否支持分布式,希望这些内容能够带给大家实际用处,这也是我编辑mysql是否支持分布式这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。    &nbs...
    99+
    2022-10-18
  • LeetCode是否支持ASP语言?
    LeetCode是一个面向程序员的在线编程平台,它提供了大量的编程题目,以帮助开发者提高编程技能。但是,很多人不知道LeetCode是否支持ASP语言。在本文中,我们将深入探讨这个问题,并提供一些演示代码。 首先,我们需要了解什么是ASP语...
    99+
    2023-08-16
    windows linux leetcode
  • git是否支持本地仓库
    Git是一个开源的分布式版本控制系统,用于管理项目的代码和版本。它可以支持本地仓库,这意味着您可以在本地计算机上设置Git仓库来管理您的项目代码。本地仓库通常用于在您自己的计算机上开发软件。在这种情况下,您可以使用Git来跟踪您对代码的更改...
    99+
    2023-10-22
  • javascript是否支持面向对象
    本篇内容介绍了“javascript是否支持面向对象”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • linux是否支持动态路由
    这篇文章主要介绍“linux是否支持动态路由”,在日常操作中,相信很多人在linux是否支持动态路由问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux是否支持动态路由”...
    99+
    2023-04-14
    linux
  • 怎么检测mongodb是否已经安装成功
    可以通过以下几种方法来检测MongoDB是否已经安装成功:1. 启动MongoDB服务:首先,使用命令行窗口(或终端)进入Mongo...
    99+
    2023-08-31
    mongodb
  • 亚马逊服务器是否支持支付宝支付?
    1. 支付宝支付在亚马逊服务器上的可行性 亚马逊服务器(AWS)是一家全球领先的云计算服务提供商,为企业和个人提供各种云服务,包括计算、存储、数据库、人工智能等。然而,亚马逊服务器并不直接支持支付宝支付。亚马逊服务器的支付方式主要包括信用...
    99+
    2023-10-27
    亚马逊 支付宝 服务器
  • php traits是否支持构造方法
    这篇文章主要介绍了php traits是否支持构造方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php traits是否支持构造方法文章都会有所收获,下面我们一起来看看吧。在 PHP 中,Trait 是一种...
    99+
    2023-07-05
  • 如何查看linux是否支持ipv6
    这篇文章主要讲解了“如何查看linux是否支持ipv6”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何查看linux是否支持ipv6”吧!两种查看方法:1、执行“ifconfig”命令显示...
    99+
    2023-06-30
  • GitHub是否支持FIDO2安全密钥
    GitHub是否支持FIDO2安全密钥,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。GitHub...
    99+
    2022-10-19
  • Java IDE在Windows中是否支持NumPy?
    NumPy是Python语言的一个重要的科学计算库,它可以方便地进行向量化运算、矩阵运算以及其他科学计算任务。许多Python开发者喜欢使用NumPy来进行科学计算,但是对于Java开发者来说,他们也可能需要使用NumPy来进行一些科学计...
    99+
    2023-09-06
    ide windows numpy
  • Android判断SD卡是否已经挂载的方法
    本文实例讲述了Android判断SD卡是否已经挂载的方法。分享给大家供大家参考。具体如下: 提供一个监听方法BroadcastReceiver 设置IntentFilter为:...
    99+
    2022-06-06
    方法 sd sd卡 Android
  • 如何排查Linux机器是否已经被入侵
    小编给大家分享一下如何排查Linux机器是否已经被入侵,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. 入侵者可能会删除机器的日志信息可以查看日志信息是否还存在或者是否被清空,相关命令示例:[root@hlmcen69n...
    99+
    2023-06-16
  • 怎样排查Linux机器是否已经被入侵
    本篇文章为大家展示了怎样排查Linux机器是否已经被入侵,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。随着开源产品的越来越盛行,作为一个Linux运维工程师,能够清晰地鉴别异常机器是否已经被入侵了显...
    99+
    2023-06-28
  • 什么是混编?golang是否支持混编?
    随着互联网应用的快速发展,开发人员需要使用一种高效、并发性能好、易于部署的编程语言来实现他们的项目。在这个背景下,Google开发的Go成为了一门备受推崇的编程语言。Go语言在很多方面都非常出色,如并发性能、内存管理等等,但很多人对于它的混...
    99+
    2023-05-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作