200.phpt 897 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. --TEST--
  2. FFI 200: PHP callbacks
  3. --EXTENSIONS--
  4. ffi
  5. --SKIPIF--
  6. <?php require_once('utils.inc'); ?>
  7. <?php
  8. try {
  9. FFI::cdef("void* zend_write;", ffi_get_php_dll_name());
  10. } catch (Throwable $e) {
  11. die('skip PHP symbols not available');
  12. }
  13. ?>
  14. --INI--
  15. ffi.enable=1
  16. opcache.jit=0
  17. --FILE--
  18. <?php
  19. require_once('utils.inc');
  20. $zend = FFI::cdef("
  21. typedef size_t (*zend_write_func_t)(const char *str, size_t str_length);
  22. extern zend_write_func_t zend_write;
  23. ", ffi_get_php_dll_name());
  24. echo "Hello World!\n";
  25. $orig_zend_write = clone $zend->zend_write;
  26. $zend->zend_write = function($str, $len) {
  27. global $orig_zend_write;
  28. $orig_zend_write("{\n\t", 3);
  29. $ret = $orig_zend_write($str, $len);
  30. $orig_zend_write("}\n", 2);
  31. return $ret;
  32. };
  33. echo "Hello World!\n";
  34. $zend->zend_write = $orig_zend_write;
  35. echo "Hello World!\n";
  36. ?>
  37. --EXPECT--
  38. Hello World!
  39. {
  40. Hello World!
  41. }
  42. Hello World!