简体   繁体   中英

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

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:

  1. call it's interpreter in CGI mode to execute a PHP script file; or
  2. run php-fpm server in the background then call it to run any PHP file with the FastCGI protocol.

I believe multiple libraries in C++ are there for making either or both CGI and FastCGI calls. For example, darrengarvey/cgi can do both.

CGI Without a Library

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 (aka Request Meta-Variables ). The HTTP request body is supplied to STDIN. The complete HTTP response (headers included) will be sent through STDOUT.

Difference between CGI and FastCGI

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 Fast CGI.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM