【问题标题】:What code is this?这是什么代码?
【发布时间】:2011-02-09 13:09:36
【问题描述】:

请考虑以下代码sn-p:

来自 php-5.3.1/ext/session/session.c:

PHPAPI char *php_session_create_id(PS_CREATE_SID_ARGS)
…
gettimeofday(&tv, NULL);
…
/* maximum 15+19+19+10 bytes */
spprintf(&buf, 0, "%.15s%ld%ld%0.8F", remote_addr ? 
remote_addr : "", tv.tv_sec, (long int)tv.tv_usec, 
php_combined_lcg(TSRMLS_C) * 10);
…
return buf;
}

我在网上找到的。但我不明白这是什么代码。我猜这是 C++ 中 php 函数的实现。如果是,请解释一下php如何调用其中的c++函数?

【问题讨论】:

  • PHP 被解释并最终作为 C 代码运行。
  • PHP 被解释并最终作为机器代码运行。解释器是用 C 编写的 :-)
  • 克里斯:你错了请看:stackoverflow.com/questions/2720488/…

标签: php c api


【解决方案1】:

令人震惊的事实是 PHP 是用 C 编写的。您正在查看 PHP 本身的源代码,或者需要进一步解释问题。

【讨论】:

  • php是C写的什么意思? php 的每个函数是否在 C 中以相同的名称实现,并且当您调用 php 函数时,C 函数本身被调用?我可以说 PHP 是用 C 编写的库,而当我写 PHP 时,实际上我是使用 PHP 库来编写 C 的吗?
  • @Narek PHP 解释器是一个用 C 语言编写的程序。您可能想在谷歌上搜索“解释器”以了解它是什么。
  • 没有。当您编写 PHP 时,PHP 解释器正在解释您的代码。这个解释器碰巧是用另一种语言编写的——C——但实际上哪种语言对你来说并不重要。 PHP 解释器甚至可以用 Java 或 Assembler 编写。很多 PHP 函数名称类似于 C 标准库函数名称是巧合。
  • 其实有一个用Java写的PHP实现:caucho.com/resin-3.0/quercus
【解决方案2】:

它不是 C++ 代码,它是纯 C。PHP 库可以调用 C 函数,就像用 C 实现的任何其他库一样。代码 sn-p 生成一个“唯一”会话 ID,由客户端地址、当前时间,以及来自某个线性同余生成器的伪随机数。

【讨论】:

    【解决方案3】:

    我猜你最终通过DEFCON 18: How I Met Your Girlfriend 讲座获得了那段代码?顺便说一句,很棒的谈话。 :-)

    现在关于代码 sn-p,它是 C,它是 PHP 代码的一部分。这个确切的函数处理 PHP 会话 ID 的生成。上面讲到的功能逻辑你都有,万一你没看到呢。

    另一方面,PHP 不调用 C 函数,而是调用 PHP 库函数,因此大多数这些函数都是用 C 编写并通过 PHP 公开的。另一方面,php_session_create_id 没有暴露给 PHP 的等效项,因为当您使用 PHP session api 启动会话时,PHP 在内部使用该等效项。

    【讨论】:

      猜你喜欢
      • 2011-11-03
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多