Building and Compiling a Host Application
By itself, a library is just a collection of code with no purpose. In order to "make it go," you'll need something to embed PHP into. To begin, let's put together a very simple wrapper application that starts up the Zend Engine and initializes PHP to handle a request, and then reverses the process to unwind the stack and clean up resources (see Listing 19.1).
Listing 19.1. A Simple embed1.c Application
#include int main(int argc, char *argv[]) { PHP_EMBED_START_BLOCK(argc,argv) PHP_EMBED_END_BLOCK() return 0; } |
Because so many header files are involved, building actually requires a longer command than this simple code snippet would suggest. If you used a different EPREFIX location than the default (/usr/local), be sure to substitute that location in the following example:
$ gcc -o embed1 embed1.c -I/usr/local/include/php/ -I/usr/local/include/php/main -I/usr/local/include/php/Zend -I/usr/local/include/php/TSRM -L/usr/local/lib -lphp5
Because this command will become a hassle to type over and over again, you might prefer to use a simple Makefile instead (see Listing 19.2).
Listing 19.2. Reducing the Work with a Makefile
CC = gcc CFLAGS = -c -I/usr/local/include/php/ -I/usr/local/include/php/main -I/usr/local/include/php/Zend -I/usr/local/include/php/TSRM -Wall -g LDFLAGS = -L/usr/local/lib -lphp5 all: embed1.c $(CC) -o embed1.o embed1.c $(CFLAGS) $(CC) -o embed1 embed1.o $(LDFLAGS) |
Note
This Makefile differs from the earlier command provided in a few important ways. First, it enables compile-time warnings with the -Wall switch, and adds debugging information with -g. It also splits the compilation and linking stages into two separate pieces to make it easier to add more source files later on. Feel free to reorganize this Makefile to suit your personal tastes; just be sure to use tabs for indentation here, not spaces.
Now, as you make changes to your embed1.c source file, you'll be able to rebuild the embed1 executable with just a simple make command.
Re creating CLI by Wrapping Embed
|