究其本質(zhì)而言, 庫只是?個(gè)沒有目的的代碼集合. 為了讓它工作, 你需要用以嵌入php 的應(yīng)用. 首先, 我們來封裝?個(gè)非常簡單的應(yīng)用, 它啟動Zend引擎并初始化PHP處理?個(gè)請求, 接著就回頭進(jìn)行資源的清理.
#include <sapi/embed/php_embed.h>
int main(int argc, char *argv[])
{
PHP_EMBED_START_BLOCK(argc,argv)
PHP_EMBED_END_BLOCK()
return 0;
}
由于這涉及到了很多頭文件, 構(gòu)建實(shí)際上需要的時(shí)間要長于這么小的代碼片段通常需 要的時(shí)間. 如果你使用了不同于默認(rèn)路徑(/usr/local)的PREFIX, 請確認(rèn)以下面的方式指定 路徑:
gcc -I /usr/local/php-dev/include/php/ \
-I /usr/local/php-dev/include/php/main/ \
-I /usr/local/php-dev/include/php/Zend/ \
-I /usr/local/php-dev/include/php/TSRM/ \
-lphp5 \
-o embed1
embed1.c
由于這個(gè)命令每次輸入都很麻煩, 你可能更原意用一個(gè)簡單的Makefile替代:
CC = gcc
CFLAGS = -c \
-I /usr/local/php-dev/include/php/ \
-I /usr/local/php-dev/include/php/main/ \
-I /usr/local/php-dev/include/php/Zend/ \
-I /usr/local/php-dev/include/php/TSRM/ \
-Wall -g
LDFLAGS = -lphp5
all: embed1.c
$(CC) -o embed1.o embed1.c $(CFLAGS)
$(CC) -o embed1 embed1.o $(LDFLAGS)
這個(gè)Makefile和前面提供的命令有?些重要的區(qū)別. 首先, 它用-Wall開關(guān)打開了編譯期的警 告, 并且用-g打開了調(diào)試信息. 此外它將編譯和鏈接兩個(gè)階段分為了兩個(gè)獨(dú)立的階段, 這樣在后期 增加更多源文件的時(shí)候就相對容易. 請自己重新組著這個(gè)Makefile, 不過這里用于對齊的是Tab(水 平制表符)而不是空格.
現(xiàn)在, 你對embed1.c源文件做修改后, 只需要執(zhí)行?一個(gè)make命令就可以構(gòu)建出新的 embed1可執(zhí)行程序了.