PHP是否仅适用于Apache,还是可以使其适用于我自己的c ++服务器? 没有库的CGI CGI与FastCGI之间的区别

问题描述

PHP仅适用于Apache,还是可以使其适用于我自己的c ++服务器?

例如,我可以从我的c ++程序向PHP发送一个请求,以便PHP运行“ file.PHP”,然后将结果返回到我的c ++程序吗?

解决方法

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

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

我相信可以使用C ++中的多个库来进行CGIFastCGI调用之一或两者。例如,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调用是带有一些预定义环境变量(也称为Request Meta-Variables)的常规系统调用。 HTTP请求主体提供给STDIN。完整的HTTP响应(包括标头)将通过STDOUT发送。

CGI与FastCGI之间的区别

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