zend_execute вызывает ошибку(

lamer_hacker

Новичок
Привет всем. Я написал простенький sapi, который получает массив оп-кодов при помощи zend_file_compile() и передаёт его на съедение zend_execute();

Код:
#include <stdio.h>
#include <sapi/embed/php_embed.h>

void main(int argc, char *argv[])
{
    zend_op_array* zoa = NULL;
    zend_op* zo = NULL;
    zend_file_handle zfh;
        zfh.type = ZEND_HANDLE_FILENAME;
    zfh.filename = "file.php";

    PHP_EMBED_START_BLOCK(argc, argv);
        zoa = zend_compile_file(&zfh,ZEND_EVAL TSRMLS_CC);
          zend_execute(zoa TSRMLS_CC);
    PHP_EMBED_END_BLOCK();
}
Но при вызове zend_execute() происходит segmentation fault :(

В чем может быть ошибка?
 

lamer_hacker

Новичок
Нашёл решение! Взял из одного примера.
Перед zend_execute() надо написать:

Код:
        zend_op_array* original_op_array = EG(active_op_array);
        zend_op** original_opline_ptr = EG(opline_ptr);
        zval** original_return_value_ptr_ptr = EG(return_value_ptr_ptr), *local_return_value_ptr_ptr;
        zend_bool o_no_ext = EG(no_extensions);


        EG(return_value_ptr_ptr) = &local_return_value_ptr_ptr;
        EG(active_op_array) = zoa;
        EG(no_extensions) = 1;
Смысл этого кода догнал не полностью, но главное, что работает! :p

Кстати, может кто знает, где взять исходник функции zend_execute? Сам я нашёл тут http://lxr.php.net/xref/PHP_5_5/Zend/zend_execute.h#60 только объявление функции

Код:
ZEND_API void zend_execute(zend_op_array *op_array TSRMLS_DC);
, но исходник не обнаружил.
 
Сверху