edink Sat Sep 28 22:45:25 2002 EDT Added files: /php4/main php_embed.c php_embed.h /php4/win32 phpembed.dsp
Modified files: /php4 Makefile.global configure.in Log: Added php/embed toolkit for embedding PHP engine into C/C++ applications. See my post to php-dev on the subject.
Index: php4/Makefile.global diff -u php4/Makefile.global:1.24 php4/Makefile.global:1.25 --- php4/Makefile.global:1.24 Thu Aug 15 20:36:05 2002 +++ php4/Makefile.global Sat Sep 28 22:45:24 2002 @@ -22,8 +22,15 @@ sapi/cli/php: $(PHP_GLOBAL_OBJS) $(PHP_CLI_OBJS) $(BUILD_CLI) -install: $(install_targets) +libphp.la: $(PHP_LIB_OBJS) + $(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) +$(EXTRA_LDFLAGS) $(LDFLAGS) $(PHP_RPATHS) $(PHP_LIB_OBJS) $(EXTRA_LIBS) +$(ZEND_EXTRA_LIBS) -o $@ + +libphp.so: $(PHP_LIB_OBJS) + $(LIBTOOL) --mode=link $(CC) -shared -export-dynamic $(COMMON_FLAGS) +$(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(EXTRA_LDFLAGS) $(LDFLAGS) $(PHP_RPATHS) +$(PHP_LIB_OBJS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $@ && cp $@ .libs +libs: libphp.la libphp.so + +install: $(install_targets) install-cli: sapi/cli/php @echo "Installing PHP CLI binary: $(INSTALL_ROOT)$(bindir)/" @@ -62,7 +69,7 @@ $(top_builddir)/sapi/cli/php -c php.ini-dist $(top_srcdir)/run-tests.php $(TESTS) clean: - find . -name \*.lo -o -name \*.o -o -name \*.la -o -name \*.a| xargs rm -f + find . -name \*.lo -o -name \*.o -o -name \*.la -o -name \*.a -o -name \*.so| +xargs rm -f find . -name .libs -a -type d|xargs rm -rf rm -f libphp4.la php sapi/cli/php modules/* libs/* Index: php4/configure.in diff -u php4/configure.in:1.372 php4/configure.in:1.373 --- php4/configure.in:1.372 Fri Sep 6 13:18:16 2002 +++ php4/configure.in Sat Sep 28 22:45:24 2002 @@ -1,4 +1,4 @@ -dnl ## $Id: configure.in,v 1.372 2002/09/06 17:18:16 sniper Exp $ -*- sh -*- +dnl ## $Id: configure.in,v 1.373 2002/09/29 02:45:24 edink Exp $ -*- sh -*- dnl ## Process this file with autoconf to produce a configure script. divert(1) @@ -1077,6 +1077,12 @@ fi PHP_ADD_SOURCES_X(Zend, zend_execute.c,,PHP_GLOBAL_OBJS,,$flag) + + +PHP_ADD_SOURCES_X(main, php_embed.c,, PHP_LIB_OBJS) +PHP_LIB_OBJS="$PHP_GLOBAL_OBJS $PHP_LIB_OBJS main/internal_functions_cli.lo" +PHP_SUBST(PHP_LIB_OBJS) + PHP_ADD_BUILD_DIR(main) PHP_ADD_BUILD_DIR(regex) Index: php4/main/php_embed.c +++ php4/main/php_embed.c /* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | [EMAIL PROTECTED] so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Edin Kadrinasic <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ /* $Id: php_embed.c,v 1.1 2002/09/29 02:45:25 edink Exp $ */ #include "php_embed.h" #ifdef PHP_WIN32 #include <io.h> #include <fcntl.h> #endif static char* php_embed_read_cookies(TSRMLS_D) { return NULL; } static int php_embed_deactivate(TSRMLS_D) { fflush(stdout); return SUCCESS; } static inline size_t php_embed_single_write(const char *str, uint str_length) { #ifdef PHP_WRITE_STDOUT long ret; ret = write(STDOUT_FILENO, str, str_length); if (ret <= 0) return 0; return ret; #else size_t ret; ret = fwrite(str, 1, MIN(str_length, 16384), stdout); return ret; #endif } static int php_embed_ub_write(const char *str, uint str_length TSRMLS_DC) { const char *ptr = str; uint remaining = str_length; size_t ret; while (remaining > 0) { ret = php_embed_single_write(ptr, remaining); if (!ret) { php_handle_aborted_connection(); } ptr += ret; remaining -= ret; } return str_length; } static void php_embed_flush(void *server_context) { if (fflush(stdout)==EOF) { php_handle_aborted_connection(); } } static void php_embed_send_header(sapi_header_struct *sapi_header, void *server_context TSRMLS_DC) { } static void php_embed_log_message(char *message) { fprintf (stderr, "%s\n", message); } static void php_embed_register_variables(zval *track_vars_array TSRMLS_DC) { php_import_environment_variables(track_vars_array TSRMLS_CC); } static int php_embed_startup(sapi_module_struct *sapi_module) { if (php_module_startup(sapi_module, NULL, 0)==FAILURE) { return FAILURE; } return SUCCESS; } static sapi_module_struct php_embed_module = { "embedded", /* name */ "PHP Embedded Library", /* pretty name */ php_embed_startup, /* startup */ php_module_shutdown_wrapper, /* shutdown */ NULL, /* activate */ php_embed_deactivate, /* deactivate */ php_embed_ub_write, /* unbuffered write */ php_embed_flush, /* flush */ NULL, /* get uid */ NULL, /* getenv */ php_error, /* error handler */ NULL, /* header handler */ NULL, /* send headers handler */ php_embed_send_header, /* send header handler */ NULL, /* read POST data */ php_embed_read_cookies, /* read Cookies */ php_embed_register_variables, /* register server variables */ php_embed_log_message, /* Log message */ NULL, /* Block interruptions */ NULL, /* Unblock interruptions */ STANDARD_SAPI_MODULE_PROPERTIES }; /* }}} */ int php_embed_init(int argc, char **argv PTSRMLS_DC) { zend_llist global_vars; #ifdef ZTS zend_compiler_globals *compiler_globals; zend_executor_globals *executor_globals; php_core_globals *core_globals; sapi_globals_struct *sapi_globals; void ***tsrm_ls; #endif #ifdef HAVE_SIGNAL_H #if defined(SIGPIPE) && defined(SIG_IGN) signal(SIGPIPE, SIG_IGN); /* ignore SIGPIPE in standalone mode so that sockets created via fsockopen() don't kill PHP if the remote site closes it. in apache|apxs mode apache does that for us! [EMAIL PROTECTED] 20000419 */ #endif #endif #ifdef PHP_WIN32 _fmode = _O_BINARY; /*sets default for file streams to binary */ setmode(_fileno(stdin), O_BINARY); /* make the stdio mode be binary */ setmode(_fileno(stdout), O_BINARY); /* make the stdio mode be binary */ setmode(_fileno(stderr), O_BINARY); /* make the stdio mode be binary */ #endif #ifdef ZTS tsrm_startup(1, 1, 0, NULL); #endif #ifdef ZTS compiler_globals = ts_resource(compiler_globals_id); executor_globals = ts_resource(executor_globals_id); core_globals = ts_resource(core_globals_id); sapi_globals = ts_resource(sapi_globals_id); tsrm_ls = ts_resource(0); *ptsrm_ls = tsrm_ls; #endif sapi_startup(&php_embed_module); if (php_module_startup(&php_embed_module, NULL, 0)==FAILURE) { return FAILURE; } if (argv) { php_embed_module.executable_location = argv[0]; } zend_llist_init(&global_vars, sizeof(char *), NULL, 0); /* Set some Embedded PHP defaults */ SG(options) |= SAPI_OPTION_NO_CHDIR; zend_alter_ini_entry("register_argc_argv", 19, "1", 1, PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE); zend_alter_ini_entry("html_errors", 12, "0", 1, PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE); zend_alter_ini_entry("implicit_flush", 15, "1", 1, PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE); zend_alter_ini_entry("max_execution_time", 19, "0", 1, PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE); SG(request_info).argc=argc; SG(request_info).argv=argv; if (php_request_startup(TSRMLS_C)==FAILURE) { php_module_shutdown(TSRMLS_C); return FAILURE; } SG(headers_sent) = 1; SG(request_info).no_headers = 1; php_register_variable("PHP_SELF", "-", NULL TSRMLS_CC); return SUCCESS; } void php_embed_shutdown(TSRMLS_D) { php_request_shutdown((void *) 0); php_module_shutdown(TSRMLS_C); #ifdef ZTS tsrm_shutdown(); #endif } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ Index: php4/main/php_embed.h +++ php4/main/php_embed.h /* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | [EMAIL PROTECTED] so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Edin Kadrinasic <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ /* $Id: php_embed.h,v 1.1 2002/09/29 02:45:25 edink Exp $ */ #ifndef _PHP_EMBED_H_ #define _PHP_EMBED_H_ #include <main/php.h> #include <main/SAPI.h> #include <main/php_main.h> #include <main/php_variables.h> #include <main/php_ini.h> #include <zend_ini.h> #ifdef ZTS #define PTSRMLS_D void ****ptsrm_ls #define PTSRMLS_DC , PTSRMLS_D #define PTSRMLS_C &tsrm_ls #define PTSRMLS_CC , PTSRMLS_C #else #define PTSRMLS_D #define PTSRMLS_DC #define PTSRMLS_C #define PTSRMLS_CC #endif #define PHP_EMBED_START_BLOCK(x,y) { \ void ***tsrm_ls; \ php_embed_init(x, y PTSRMLS_CC); \ zend_first_try { #define PHP_EMBED_END_BLOCK() \ } zend_catch { \ /* int exit_status = EG(exit_status); */ \ } zend_end_try(); \ php_embed_shutdown(TSRMLS_C); \ } BEGIN_EXTERN_C() int php_embed_init(int argc, char **argv PTSRMLS_DC); void php_embed_shutdown(TSRMLS_D); END_EXTERN_C() #endif /* _PHP_EMBED_H_ */ Index: php4/win32/phpembed.dsp +++ php4/win32/phpembed.dsp # Microsoft Developer Studio Project File - Name="phpembed" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Static Library" 0x0104 CFG=phpembed - Win32 Debug_TS !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "phpembed.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "phpembed.mak" CFG="phpembed - Win32 Debug_TS" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "phpembed - Win32 Debug_TS" (based on "Win32 (x86) Static Library") !MESSAGE "phpembed - Win32 Release_TS" (based on "Win32 (x86) Static Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "phpembed - Win32 Debug_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug_TS" # PROP BASE Intermediate_Dir "Debug_TS" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug_TS" # PROP Intermediate_Dir "Debug_TS" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I ".." /I "..\main" /I "..\Zend" /I "..\TSRM" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=1 /YX /FD /GZ /c # ADD BASE RSC /l 0x406 /d "_DEBUG" # ADD RSC /l 0x406 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\Debug_TS\phpembed.lib" !ELSEIF "$(CFG)" == "phpembed - Win32 Release_TS" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release_TS" # PROP BASE Intermediate_Dir "Release_TS" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_TS" # PROP Intermediate_Dir "Release_TS" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I ".." /I "..\main" /I "..\Zend" /I "..\TSRM" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=0 /YX /FD /c # ADD BASE RSC /l 0x406 /d "NDEBUG" # ADD RSC /l 0x406 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\Release_TS\phpembed.lib" !ENDIF # Begin Target # Name "phpembed - Win32 Debug_TS" # Name "phpembed - Win32 Release_TS" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=..\main\php_embed.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=..\main\php_embed.h # End Source File # End Group # End Target # End Project
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php