| Did you know ... | Search Documentation: |
| http_cgi.pl -- Run CGI scripts from the SWI-Prolog web-server |
The Prolog HTTP server is primarily designed to be able to handle HTTP requests from a running Prolog process, which avoids the Prolog startup time and, at least as interesting, allows you to keep state in the Prolog database. It is not designed to run as a generic web server. There are tools that are much better for that job. Nevertheless, it is useful to host a complete server in one process, mainly to simplify deployment. For this reason, the SWI-Prolog HTTP server provides libraries to serve static files (http_reply_file/3, http_reply_from_files/3) and this library, which allows executing CGI scripts.
A sensible alternative setup for a mixed server is to use a normal server such as Apache as main server, serving files, CGI scripts, modules, etc., and use Apache's proxy facilities to host a subdirectory of the server using a Prolog server. That approach is most likely more efficient for production environments, but harder to setup for development purposes.
This module provides two interfaces:
myscript.php from the location =/myscript/=.
Note that this requires the commandline version of PHP to be
installed as php in the current PATH.
:- http_handler(root(myscript),
http_run_cgi(path(php), [argv('myscript.php')]),
[]).
cgi_bin for absolute_file_name/3. If this path is
present, calls to /cgi-bin/... are translated into calling the script.
For example, if programs in the directory cgi-bin must be accessible
as CGI services, add a rule
:- multifile user:file_search_path/2. user:file_search_path(cgi_bin, 'cgi-bin').
http_cgi_handler(+Alias, +Request)path_info in Request and execute the script using
http_run_cgi/3. This library installs one handler using:
:- http_handler(root('cgi-bin'), http_run_cgi(cgi_bin, []),
[prefix, spawn([])]).
http_run_cgi(+Script, +Options, +Request) is detTransfer-encoding headertransfer_encoding(chunked).