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