Hello,

I have just committed initial work on enabling embedding PHP into C/C++ 
applications. It is mostly complete, but there a few pieces missing, namely 
the installation part. The modification of the build system adds another 
target, so in order to test the new functionality you need to configure php 
in the usual manner, and then do "make", "make install" and "make libs". 
Since libs are not installed by "make install" you need to copy libphp.so 
manually to appropriate directory.

The best way to explain how this works is to show you some code examples.

pembed.c
========
#include <php_embed.h>

int main(int argc, char **argv)
{
  char *php_code = "echo \"Hello, World!\\n\";";

  PHP_EMBED_START_BLOCK(argc, argv);
  zend_eval_string(php_code, NULL, "Embedded code" TSRMLS_CC);
  PHP_EMBED_END_BLOCK();

  return 0;
}

Makefile (unix)
===============
LIBS=-lphp $(shell php-config --libs)
INCLUDES=$(shell php-config --includes)
LIBDIRS=-L$(shell php-config --prefix)/lib
PHP_EXE=$(shell php-config --prefix)/bin/php
CC=gcc
CFLAGS=-g -Wall

pembed: pembed.o
        $(CC) $(CFLAGS) $(LIBDIRS) -o pembed $(LIBS) pembed.o

pembed.o: pembed.c
        $(CC) $(CFLAGS) $(INCLUDES) -c pembed.c

clean:
        rm -f *.o pembed

Makefile (win32)
================
# Put your compiled php source here
ROOT=u:\projects\php\php4.sdk
LIBS=php4ts.lib phpembed.lib
INCLUDES=-I "$(ROOT)" -I "$(ROOT)\main" -I "$(ROOT)\Zend" -I "$(ROOT)\TSRM"
LIBDIRS=/libpath:"$(ROOT)\Release_TS"
CC=cl
LD=link
CFLAGS=-MD -D ZTS -D PHP_WIN32 -D ZEND_WIN32

pembed.exe: pembed.obj
        $(LD) $(LIBDIRS) /out:pembed.exe $(LIBS) pembed.obj

pembed.obj: pembed.c
        $(CC) $(CFLAGS) $(INCLUDES) -c pembed.c

clean:
        -del *.obj
        -del pembed.exe


As you can see from the example pembed.c file it is not very difficult to get 
the PHP engine started using php/embed. There are some things that you need 
to notice: you should think of PHP_EMBED_START_BLOCK() and 
PHP_EMBED_END_BLOCK() as {} block, so take care not to intersect with other 
{} blocks. If this is too great a limitiation, functions 

int php_embed_init(int argc, char **argv PTSRMLS_DC);
void php_embed_shutdown(TSRMLS_D);

should be used instead.

I'm looking forward to your feedback and help to get the "make install" part 
working.

Edin


--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to