【问题标题】:Is there a tool to convert php built-in functions to c implementation?有没有将php内置函数转换为c实现的工具?
【发布时间】:2011-01-19 04:39:17
【问题描述】:

我很好奇一些内置函数是如何实现的,但是直接在源码中查找非常耗时,有没有工具可以自动完成?

编辑

或者有没有可以调试到实际执行的c代码的工具?

【问题讨论】:

    标签: php c converter


    【解决方案1】:

    可以从 PHP 访问的大多数(全部?)函数都定义在 PHP 源代码的 ext/ 目录下。如果您有递归搜索工具,请搜索 PHP_FUNCTION - 如果您将该搜索的结果保存到文本文件中,这将是一个很好的“索引”,用于确定 PHP 内置函数的定义位置。

    真正的核心内容在 ext/standard 中。

    一些罕见的“函数”在 PHP 编译到的 Zend 虚拟机中直接实现为操作码,因此没有这样定义良好的 C 函数。例如,我认为 strlen 就是这样一个函数。

    【讨论】:

    • 扩展中的函数不是 ext/ 吗?那些不需要任何扩展的函数呢,比如get_class
    • 绝大多数东西都在“扩展”中,即使是那些被认为是核心语言的一部分的东西。我很确定 get_class 是另一个编译成操作码的函数。您可以使用 vld (derickrethans.nl/projects.html#vld) 查看特定 PHP 脚本编译成的操作码。这些操作码背后的实际代码可以在 Zend/zend_vm_def.h 中找到。如果您编辑它,请务必阅读该文件顶部的 cmets,需要一些额外的构建步骤。
    【解决方案2】:

    我相信你应该看看this
    Facebook 开发了一种将 PHP 代码转换为 C++ 的工具。
    所以我想它在某种程度上也可以处理 C。

    【讨论】:

      【解决方案3】:

      关于调试执行的C代码,我想可以使用dbg之类的东西;不过,您首先必须使用 --enable-debug 模式重新编译 PHP。

      更多信息,你可以看看:


      我从未使用它来调试 PHP 本身,但我已经使用这两个页面生成了一些我在使用扩展时遇到的崩溃的回溯,据我记忆,它工作正常。


      作为旁注:使用使用--enable-debug 编译的 PHP,您可能需要重新编译您正在使用的一些扩展并更改它们的加载方式(例如,Xdebug 就是这种情况) ;和其他一些可能根本不再工作。

      【讨论】:

      • 是否有更简单、更安全的方法来深入研究 PHP?
      • 我在这里看不到什么是“不安全的”:如果你想调试/开发,你知道你在做什么,很明显,用--enable-debug 构建 PHP 会让你知道更多关于出了什么问题,什么时候发生。 ;;;关于更容易的部分,不确定;我想说浏览源代码是最好的解决方案,但我不得不承认,这并不“容易”——发现这么大的代码库几乎从来都不是“容易”的......
      • 我的意思是“其他一些可能根本不再工作”不应该发生在“更安全”..
      • 哼,哦,对了,有这个^^ ;;;好吧,如果您重新编译它们,大多数扩展应该可以正常工作;;但有些不一定是开源的,这意味着您将无法重新编译它们;-) ;;;无论如何,在大多数情况下,开发环境应该没问题(你永远不会在生产服务器上使用--enable-debug
      猜你喜欢
      • 1970-01-01
      • 2015-01-17
      • 2011-11-01
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 2013-09-25
      相关资源
      最近更新 更多