如何包含/要求来自 c/c++ php 扩展的 php 文件将变量传递到用户空间范围


How to include/require a php file from c/c++ php extension passing variables to userspace scope?

首先,我需要从PHP_FUNCTION()导入一个文件,并将C函数中的一些变量传递给导入的php文件到用户空间。

例:

include_a_file.c

PHP_FUNCTION(include_a_php_file)
{
  zval *var_to_userspace;
  char *str;
  str = "string send to userspace";
  ZVAL_STRING(var_to_userspace, str, 0);
  php_require_once("a_file.php"); // <-- how to?
}

a_file.php

<?php
  print "<pre>";
  vardump($var_to_userspace);
  print "</pre>";
?>

尝试调用zend_compile_string()

zval nop;
ZVAL_STRINGL(&nop, "return ;", 8, 0);
zend_compile_string(&nop, "NOP" TSRMLS_CC);

这将返回指向zend_op_array结构的指针,该结构将保存代码的 Zend 操作码。因此,您只需转储一次这些操作码,然后自己在程序中创建zend_op_array结构。

PHP 7.x

zval nop;
ZVAL_STRINGL(&nop, "return ;", 8, 0);
zend_compile_string(&nop, "NOP");