1

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

0 に答える 0