Я пытаюсь написать расширение, которое вызывает функцию PHP после выполнения каких-либо действий.Чтобы проверить выполнимость, я пошел по этой статье: https://devzone.zend.com/303/extension-writing-part-i-introduction-to-php-and-zend/
Базовое расширение работало нормально.Затем я добавил код для вызова функции PHP следующим образом:
PHP_FUNCTION(hello_world)
{
zval p1;
INIT_ZVAL(p1);
ZVAL_STRING(&p1, "From extension", 1);
zval *params = { &p1 };
zend_uint param_count = 1;
zval *retval_ptr = NULL;
zval function_name;
INIT_ZVAL(function_name);
ZVAL_STRING(&function_name, "from_ext", 1);
if (call_user_function(
CG(function_table), NULL /* no object */, &function_name,
retval_ptr, param_count, ¶ms TSRMLS_CC
) == SUCCESS
) {
printf("Success returning from PHP");
if (retval_ptr)
zval_ptr_dtor(&retval_ptr);
}
/* don't forget to free the zvals */
zval_dtor(&function_name);
zval_dtor(&p1);
RETURN_STRING("Hello World", 1);
}
и вызывающий PHP:
<?
function from_ext($arg) {
echo "In PHP:", $arg;
return "hello";
}
echo hello_world();
?>
Он вызывает функцию PHP и может видеть значение, но выдает Segошибка после этого:
php -dextension=modules/hello.so test.php
In PHP:From extensionSegmentation fault: 11
Я пытаюсь на MacOS 10.12.6 с PHP, который поставляется с ним (5.6.30).
Есть идеи, как преодолеть ошибку Seg?