コードの前処理に置き換え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);
}