我正在替换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);
}