在解析之前调用zend_compile_file()时如何更改源代码?

时间:2013-05-23 14:05:27

标签: php c

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

有效。

但我还需要从文件(_include/requirephp <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);
}

0 个答案:

没有答案