PHP 只适用于 Apache,还是我可以让它适用于我自己的 C++ 服务器?

Does PHP only work with Apache, or can I make it work with my own c ++ server?

PHP 只能与 Apache 一起使用,还是我可以让它与我自己的 c++ 服务器一起使用?

例如,我可以从我的 c++ 程序向 php 发送请求,以便 php 运行“file.php”,然后 returns 结果到我的 C++ 程序?

PHP 是一种解释型语言。除了通过 Apache mod_php 使用它之外,它还支持 CGI 和 FastCGI 调用设置。所以你可以:

  1. 调用interpreter in CGI mode执行一个PHP脚本文件;或
  2. 运行 php-fpm server 在后台调用它到 运行 使用 FastCGI 协议的任何 PHP 文件。

我相信 C++ 中的多个库可以使其中之一或两者兼顾 CGI and FastCGI calls. For example, darrengarvey/cgi

没有库的 CGI

如果你选择 CGI 路径,你甚至可以在没有库的情况下完成。正确安装 php-cgi 后,您可以像这样进行常规 CGI 调用:

echo "test=1" | \
REQUEST_METHOD=POST \
CONTENT_TYPE=application/x-www-form-urlencoded \
CONTENT_LENGTH=6 \
GATEWAY_INTERFACE=CGI/1.1 \
SCRIPT_FILENAME=/full/path/to/file.php \
REDIRECT_STATUS=true \
REQUEST_URI=/hello/world \
php-cgi

如您所见,CGI 调用是具有一些预定义环境变量 (a.k.a.Request Meta-Variables) 的常规系统调用。 HTTP 请求 body 被提供给 STDIN。完整的 HTTP 响应(包括 headers)将通过 STDOUT 发送。

CGI 和 FastCGI 的区别

由于每次 CGI 调用都是系统调用,因此每次调用时都需要时间将 PHP 库/模块加载到内存中。 FastCGI 指定了通过线路协议 send/receive STDIN、STDOUT、STDERR 的方法。 php-fpm 会加载内存和连接池以加快调用速度。因此名称 FastCGI.