我在浏览PHP 5.3.1源代码树时,决定查看main.c。我很好奇PHP运行时幕后发生了什么。
我的印象是任何C或C ++程序都在名为main的函数中开始执行,但我在main.c中看不到具有该名称的函数。
PHP代码实际上从哪里开始执行(命令行与MOD_PHP与CGI的不同?),以及我缺少w / r / t main.c文件中的主要功能可以让我回答这个问题我自己下次?
答案 0 :(得分:3)
main()
函数不必位于名为main.c的文件中。对于php命令行界面main()
位于php_cli.c(第642行)。
答案 1 :(得分:2)
我认为我从来没有在互联网上看到任何关于这类问题的明确答案,但您可能会对本书Extending and Embedding PHP的某些段落感兴趣,这可能是它的参考书。来写PHP扩展,以及PHP引擎的内部。
引用第1章“PHP生命周期”的一对有趣的句子是:
在常见的网络服务器环境中, 你永远不会明确启动PHP 口译员;你会启动Apache或 一些其他将加载的Web服务器 根据需要使用PHP和流程脚本......
而且,就在之后:
... CLI二进制文件实际上表现不错 同样的方式。一个php命令, 在系统提示符处输入,启动 起作用的“命令行API” 作为一个迷你网络服务器设计 服务一个请求。
如果您想尝试阅读更多内容,您可能会在Google books上找到一些网页...
答案 2 :(得分:2)
“main”通常是C / C ++中的入口点,标准对此特别对待它,但它不是唯一的可能性(它是标准所要求的唯一可能性)。它的实际处理方式是特定于实现的,因为运行时库需要在应用程序获得控制权之前进行设置。查看最终答案的链接器设置。
php_module_startup
看起来可能是你想要的,它可能是最终从真正的切入点调用的。