File: 017.phpt

package info (click to toggle)
php8.4 8.4.16-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 211,276 kB
  • sloc: ansic: 1,176,142; php: 35,419; sh: 11,964; cpp: 7,208; pascal: 4,951; javascript: 3,091; asm: 2,817; yacc: 2,411; makefile: 696; xml: 446; python: 301; awk: 148
file content (141 lines) | stat: -rw-r--r-- 2,220 bytes parent folder | download | duplicates (2)
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
--TEST--
CLI -a and libedit
--EXTENSIONS--
readline
--ENV--
PHP_HISTFILE=
--SKIPIF--
<?php
include "skipif.inc";
if (readline_info('done') !== NULL) {
    die ("skip need readline support using libedit");
}
?>
--FILE--
<?php
function runReplCodes($codes) {
    $php = getenv('TEST_PHP_EXECUTABLE_ESCAPED');
    $ini = getenv('TEST_PHP_EXTRA_ARGS');
    $descriptorspec = [['pipe', 'r'], STDOUT, STDERR];
    foreach ($codes as $key => $code) {
        echo "\n--------------\nSnippet no. $key:\n--------------\n";
        $proc = proc_open("$php $ini -a", $descriptorspec, $pipes);
        fwrite($pipes[0], $code);
        fclose($pipes[0]);
        proc_close($proc);
    }
}

$codes = array();

$codes[1] = <<<EOT
echo 'Hello world';
exit
EOT;

$codes[] = <<<EOT
echo 'multine
single
quote';
exit
EOT;

$codes[] = <<<EOT
echo <<<HEREDOC
Here
comes
the
doc
HEREDOC;
EOT;

$codes[] = <<<EOT
if (0) {
    echo "I'm not there";
}
echo "Done";
EOT;

$codes[] = <<<EOT
function a_function_with_some_name() {
    echo "I was called!";
}
a_function_w	);
EOT;

runReplCodes($codes);
echo "\nDone\n";

$dir = PHP_OS_FAMILY == 'Windows' ? getenv("USERPROFILE") : getenv("HOME");
var_dump(file_exists($dir . '/.php_history'));

$php_history_tmp = sprintf('%s%s%s', sys_get_temp_dir(), DIRECTORY_SEPARATOR, 'php_history');
putenv('PHP_HISTFILE=' . $php_history_tmp);
var_dump(file_exists($php_history_tmp));

$last[6] = <<<EOT
echo 'Hello World';
exit
EOT;
runReplCodes($last);
echo "\nDone\n";

$php_history_path = PHP_OS_FAMILY == 'Windows' ? getenv("USERPROFILE") : $php_history_tmp;
var_dump(file_exists($php_history_path));
@unlink($php_history_tmp);
?>
--EXPECT--
--------------
Snippet no. 1:
--------------
Interactive shell

Hello world

--------------
Snippet no. 2:
--------------
Interactive shell

multine
single
quote

--------------
Snippet no. 3:
--------------
Interactive shell

Here
comes
the
doc

--------------
Snippet no. 4:
--------------
Interactive shell

Done

--------------
Snippet no. 5:
--------------
Interactive shell


Parse error: Unmatched ')' in php shell code on line 1

Done
bool(true)
bool(false)

--------------
Snippet no. 6:
--------------
Interactive shell

Hello World

Done
bool(true)