1

我正在替换zend_compile_string()代码预处理,然后将其传递给原始zend_compile_string().

有用。

_include/require但我还需要从文件 ( , php <file.php>)中获取代码预处理。Zend 提供了替换的能力zend_compile_file(),但源文本只能在open_file_for_scanning()( zend_stream_fixup(file_handle, &buf, &size TSRMLS_CC)) 中使用,而不能从扩展中访问。

在发送到之前如何更改代码zendparse()


编辑:我找到了解决方案:

zend_op_array* ext_zend_compile_file(zend_file_handle *file_handle, int type TSRMLS_DC)
{
    char *buf;
    size_t size;
    if (zend_stream_fixup(file_handle, &buf, &size TSRMLS_CC) == FAILURE) {
        return NULL;
    }

    char *res;
    size_t res_size;
    // My code that uses file_handle->handle.stream.mmap.buf/len is read-only and filling res/res_size

    file_handle->handle.stream.mmap.buf = res;
    file_handle->handle.stream.mmap.len = res_size;

    return ext_orig_zend_compile_file(file_handle, type TSRMLS_CC);
}
4

0 回答 0