diff --git a/Dockerfile b/Dockerfile index 424ab08ee..9c10c0eb2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -40,7 +40,7 @@ WORKDIR /src/sqlite RUN emcc -Oz -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_DISABLE_LFS -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_THREADSAFE=0 -DSQLITE_ENABLE_NORMALIZE -c sqlite3.c -o sqlite3.o FROM build_tool as php_src -ARG PHP_BRANCH=PHP-8.2.5 +ARG PHP_BRANCH=PHP-8.2.9 RUN git clone https://github.com/php/php-src.git php-src \ --branch $PHP_BRANCH \ --single-branch \ @@ -99,13 +99,13 @@ RUN emcc $OPTIMIZE \ -I main \ -I TSRM/ \ -c \ - /src/source/pib_eval.c \ - -o /src/pib_eval.o \ + /src/source/phpw.c \ + -o /src/phpw.o \ -s ERROR_ON_UNDEFINED_SYMBOLS=0 RUN mkdir /build && emcc $OPTIMIZE \ -o /build/php-$WASM_ENVIRONMENT.mjs \ --llvm-lto 2 \ - -s EXPORTED_FUNCTIONS='["_phpw", "_phpw_flush", "_phpw_exec", "_phpw_run", "_php_embed_init", "_php_embed_shutdown", "_zend_eval_string"]' \ + -s EXPORTED_FUNCTIONS='["_phpw", "_phpw_flush", "_phpw_exec", "_phpw_run", "_chdir", "_setenv", "_php_embed_init", "_php_embed_shutdown", "_zend_eval_string"]' \ -s EXTRA_EXPORTED_RUNTIME_METHODS='["ccall", "UTF8ToString", "lengthBytesUTF8", "FS"]' \ -s ENVIRONMENT=$WASM_ENVIRONMENT \ -s FORCE_FILESYSTEM=1 \ @@ -121,4 +121,4 @@ RUN mkdir /build && emcc $OPTIMIZE \ -s EXPORT_NAME=createPhpModule \ # -s DECLARE_ASM_MODULE_EXPORTS=0 \ -lidbfs.js \ - /src/pib_eval.o /src/usr/lib/sqlite3.o .libs/libphp.a /src/usr/lib/libxml2.a + /src/phpw.o /src/usr/lib/sqlite3.o .libs/libphp.a /src/usr/lib/libxml2.a diff --git a/source/phpw.c b/source/phpw.c new file mode 100644 index 000000000..2488f02af --- /dev/null +++ b/source/phpw.c @@ -0,0 +1,90 @@ +#include "sapi/embed/php_embed.h" +#include +#include + +#include "zend_globals_macros.h" +#include "zend_exceptions.h" +#include "zend_closures.h" + +int main() { + return 0; +} + +void phpw_flush() +{ + // output buffers are disabled by default so we don't need to flush + // fflush(stdout); + fprintf(stdout, "\n"); + // fflush(stderr); + fprintf(stderr, "\n"); +} + +char *EMSCRIPTEN_KEEPALIVE phpw_exec(char *code) +{ + php_embed_init(0, NULL); + char *retVal = NULL; + + zend_try + { + zval retZv; + + zend_eval_string(code, &retZv, "php-wasm evaluate expression"); + + convert_to_string(&retZv); + + retVal = Z_STRVAL(retZv); + } zend_catch { + } zend_end_try(); + + phpw_flush(); + php_embed_shutdown(); + + return retVal; +} + +void EMSCRIPTEN_KEEPALIVE phpw_run(char *code) +{ + php_embed_init(0, NULL); + zend_try + { + zend_eval_string(code, NULL, "php-wasm run script"); + if(EG(exception)) + { + zend_exception_error(EG(exception), E_ERROR); + } + } zend_catch { + /* int exit_status = EG(exit_status); */ + } zend_end_try(); + + phpw_flush(); + php_embed_shutdown(); +} + +int EMBED_SHUTDOWN = 1; + +void phpw(char *file) +{ + if (EMBED_SHUTDOWN == 0) { + php_embed_shutdown(); + } + + php_embed_init(0, NULL); + EMBED_SHUTDOWN = 0; + zend_first_try { + zend_file_handle file_handle; + zend_stream_init_filename(&file_handle, file); + // file_handle.primary_script = 1; + + if (php_execute_script(&file_handle) == FAILURE) { + php_printf("Failed to execute PHP script.\n"); + } + + zend_destroy_file_handle(&file_handle); + } zend_catch { + /* int exit_status = EG(exit_status); */ + } zend_end_try(); + + phpw_flush(); + php_embed_shutdown(); + EMBED_SHUTDOWN = 1; +} diff --git a/source/pib_eval.c b/source/pib_eval.c deleted file mode 100644 index 5bf1e3a15..000000000 --- a/source/pib_eval.c +++ /dev/null @@ -1,81 +0,0 @@ -#include "sapi/embed/php_embed.h" -#include -#include - -#include "zend_globals_macros.h" -#include "zend_exceptions.h" -#include "zend_closures.h" - -int main() { return 0; } - -void phpw_flush() -{ - fflush(stdout); - fprintf(stdout, "\n"); - - fflush(stderr); - fprintf(stderr, "\n"); -} - -char *EMSCRIPTEN_KEEPALIVE phpw_exec(char *code) -{ - php_embed_init(0, NULL); - char *retVal = NULL; - - zend_try - { - zval retZv; - - zend_eval_string(code, &retZv, "php-wasm evaluate expression"); - - convert_to_string(&retZv); - - retVal = Z_STRVAL(retZv); - } zend_catch { - } zend_end_try(); - - phpw_flush(); - php_embed_shutdown(); - - return retVal; -} - -void EMSCRIPTEN_KEEPALIVE phpw_run(char *code) -{ - php_embed_init(0, NULL); - zend_try - { - zend_eval_string(code, NULL, "php-wasm run script"); - if(EG(exception)) - { - zend_exception_error(EG(exception), E_ERROR); - } - // retVal = 2; - // } - } zend_catch { - /* int exit_status = EG(exit_status); */ - } zend_end_try(); - - phpw_flush(); - php_embed_shutdown(); -} - -void phpw(char *file) -{ - php_embed_init(0, NULL); - - zend_first_try { - zend_file_handle file_handle; - zend_stream_init_filename(&file_handle, file); - - if (php_execute_script(&file_handle) == FAILURE) { - php_printf("Failed to execute PHP script.\n"); - } - zend_destroy_file_handle(&file_handle); - } zend_catch { - /* int exit_status = EG(exit_status); */ - } zend_end_try(); - - phpw_flush(); - php_embed_shutdown(); -}