1
0
mirror of https://github.com/deuill/go-php.git synced 2024-09-21 08:50:45 +00:00
go-php/context/context.c

83 lines
1.6 KiB
C
Raw Normal View History

// Copyright 2015 Alexander Palaistras. All rights reserved.
// Use of this source code is governed by the MIT license that can be found in
// the LICENSE file.
#include <errno.h>
#include <main/php.h>
#include <main/SAPI.h>
#include <main/php_main.h>
#include "context.h"
2015-10-01 23:48:33 +00:00
engine_context *context_new(void *parent) {
engine_context *context;
// Initialize context.
context = (engine_context *) malloc((sizeof(engine_context)));
if (context == NULL) {
2015-10-01 23:48:33 +00:00
errno = 1;
return NULL;
}
2015-10-01 23:48:33 +00:00
#ifdef ZTS
2015-10-02 17:12:42 +00:00
TSRMLS_FETCH();
2015-10-01 23:48:33 +00:00
context->ptsrm_ls = &tsrm_ls;
#endif
2015-10-01 23:48:33 +00:00
context->parent = parent;
SG(server_context) = (void *) context;
// Initialize request lifecycle.
if (php_request_startup(TSRMLS_C) == FAILURE) {
SG(server_context) = NULL;
free(context);
2015-10-01 23:48:33 +00:00
errno = 1;
return NULL;
}
2015-10-01 23:48:33 +00:00
errno = 0;
return context;
}
void context_exec(engine_context *context, char *filename) {
#ifdef ZTS
2015-10-01 23:48:33 +00:00
void ***tsrm_ls = *context->ptsrm_ls;
#endif
// Attempt to execute script file.
zend_first_try {
zend_file_handle script;
script.type = ZEND_HANDLE_FILENAME;
script.filename = filename;
script.opened_path = NULL;
script.free_filename = 0;
php_execute_script(&script TSRMLS_CC);
} zend_end_try();
2015-10-01 23:48:33 +00:00
errno = 0;
return NULL;
}
void context_bind(engine_context *context, char *name, void *zvalptr) {
zval *value = (zval *) zvalptr;
#ifdef ZTS
2015-10-01 23:48:33 +00:00
void ***tsrm_ls = *context->ptsrm_ls;
#endif
ZEND_SET_SYMBOL(EG(active_symbol_table), name, value);
2015-10-01 23:48:33 +00:00
errno = 0;
return NULL;
}
void context_destroy(engine_context *context) {
php_request_shutdown((void *) 0);
SG(server_context) = NULL;
free(context);
}