这是什么代码?

时间:2011-02-09 13:09:37

标签: php c api

请考虑以下代码段:

来自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 ++函数?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

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

答案 2 :(得分:1)

我猜你通过DEFCON 18: How I Met Your Girlfriend讲座结束了那段代码?很棒的话。顺便说一下。 : - )

现在关于代码片段,它是C,它是PHP代码的一部分。这个确切的函数处理PHP会话ID的生成。如果你没有看到它,你可以在我上面提到的讲座中解释整个功能逻辑。

另一方面,PHP不调用C函数,而是调用PHP库函数,因此大多数函数都是用C语言编写的,并通过PHP公开。另一方面,php_session_create_id没有公开给PHP的等价物,因为当你使用PHP session api开始会话时,PHP会在内部使用它。