Does PHP only work with Apache, or can I make it work with my own c ++ server?
For example, can I send a request from my c ++ program to php, so that php runs "file.php" and then returns the result to my c ++ program?
PHP is an interpreted language. Besides using it through Apache mod_php, it supports CGI and FastCGI calls setup. So you can either:
I believe multiple libraries in C++ are there for making either or both CGI and FastCGI calls. For example, darrengarvey/cgi can do both.
If you go for the CGI path, you can even do it without a library. With php-cgi properly installed, you can make a regular CGI call like this:
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
As you can see, a CGI call is a regular system call with some predefined environment variables (a.k.a. Request Meta-Variables). The HTTP request body is supplied to STDIN. The complete HTTP response (headers included) will be sent through STDOUT.
Since every CGI call will be a system call, it take time to load PHP libraries / modules into memory everytime you call. FastCGI specified a way to send/receive STDIN, STDOUT, STDERR over line protocol. php-fpm would load up memory and pool connections to make the call faster. Hence the name FastCGI.