Skip to content

Commit f58b95e

Browse files
ini_get_all(): Add builtin_default_value column (#22134)
Closes GH-22133. Co-authored-by: Tim Düsterhus <tim@bastelstu.be>
1 parent 27d7b79 commit f58b95e

6 files changed

Lines changed: 89 additions & 3 deletions

File tree

NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,8 @@ PHP NEWS
224224
null bytes. (Weilin Du)
225225
. proc_open() now raises a ValueError when the $cwd argument contains
226226
null bytes. (Weilin Du)
227+
. ini_get_all() now includes the built-in default value in the details.
228+
(sebastian)
227229

228230
- Streams:
229231
. Added so_keepalive, tcp_keepidle, tcp_keepintvl and tcp_keepcnt stream

UPGRADING

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,12 @@ PHP 8.6 UPGRADE NOTES
270270
when not null, and on failure, gives the error code (one of the EAI_*
271271
constants).
272272

273+
- Standard:
274+
. ini_get_all() now includes a "builtin_default_value" element for each
275+
directive when $details is true. It holds the built-in default value of
276+
the directive (or null if it has none), independent of values set in
277+
php.ini, on the command line, or at runtime.
278+
273279
========================================
274280
6. New Functions
275281
========================================

ext/standard/basic_functions.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1955,6 +1955,12 @@ PHP_FUNCTION(ini_get_all)
19551955
add_assoc_null(&option, "local_value");
19561956
}
19571957

1958+
if (ini_entry->def->value) {
1959+
add_assoc_stringl(&option, "builtin_default_value", ini_entry->def->value, ini_entry->def->value_length);
1960+
} else {
1961+
add_assoc_null(&option, "builtin_default_value");
1962+
}
1963+
19581964
add_assoc_long(&option, "access", ini_entry->modifiable);
19591965

19601966
zend_symtable_update(Z_ARRVAL_P(return_value), ini_entry->name, &option);

ext/standard/tests/general_functions/ini_get_all.phpt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,29 +33,35 @@ array(0) {
3333
}
3434
array(3) {
3535
["pcre.backtrack_limit"]=>
36-
array(3) {
36+
array(4) {
3737
["global_value"]=>
3838
string(7) "1000000"
3939
["local_value"]=>
4040
string(7) "1000000"
41+
["builtin_default_value"]=>
42+
string(7) "1000000"
4143
["access"]=>
4244
int(7)
4345
}
4446
["pcre.jit"]=>
45-
array(3) {
47+
array(4) {
4648
["global_value"]=>
4749
string(1) "1"
4850
["local_value"]=>
4951
string(1) "1"
52+
["builtin_default_value"]=>
53+
string(1) "1"
5054
["access"]=>
5155
int(7)
5256
}
5357
["pcre.recursion_limit"]=>
54-
array(3) {
58+
array(4) {
5559
["global_value"]=>
5660
string(6) "100000"
5761
["local_value"]=>
5862
string(6) "100000"
63+
["builtin_default_value"]=>
64+
string(6) "100000"
5965
["access"]=>
6066
int(7)
6167
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
--TEST--
2+
ini_get_all() exposes the built-in default value independent of configuration and runtime changes
3+
--INI--
4+
precision=8
5+
--FILE--
6+
<?php
7+
8+
// precision is configured to 8 above, but its compiled-in default is 14.
9+
$all = ini_get_all(null, true);
10+
11+
var_dump($all["precision"]["global_value"]);
12+
var_dump($all["precision"]["local_value"]);
13+
var_dump($all["precision"]["builtin_default_value"]);
14+
15+
// A runtime change must not affect builtin_default_value.
16+
ini_set("precision", "3");
17+
18+
$all = ini_get_all(null, true);
19+
20+
var_dump($all["precision"]["global_value"]);
21+
var_dump($all["precision"]["local_value"]);
22+
var_dump($all["precision"]["builtin_default_value"]);
23+
24+
echo "Done\n";
25+
?>
26+
--EXPECT--
27+
string(1) "8"
28+
string(1) "8"
29+
string(2) "14"
30+
string(1) "8"
31+
string(1) "3"
32+
string(2) "14"
33+
Done
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
--TEST--
2+
ini_get_all() reports a null built-in default value for a directive that has no compiled-in default
3+
--INI--
4+
error_append_string=FOO
5+
--FILE--
6+
<?php
7+
8+
// error_append_string is configured above, but it has no compiled-in default,
9+
// so builtin_default_value must be null regardless of configuration or runtime changes.
10+
$all = ini_get_all(null, true);
11+
12+
var_dump($all["error_append_string"]["global_value"]);
13+
var_dump($all["error_append_string"]["local_value"]);
14+
var_dump($all["error_append_string"]["builtin_default_value"]);
15+
16+
ini_set("error_append_string", "BAR");
17+
18+
$all = ini_get_all(null, true);
19+
20+
var_dump($all["error_append_string"]["global_value"]);
21+
var_dump($all["error_append_string"]["local_value"]);
22+
var_dump($all["error_append_string"]["builtin_default_value"]);
23+
24+
echo "Done\n";
25+
?>
26+
--EXPECT--
27+
string(3) "FOO"
28+
string(3) "FOO"
29+
NULL
30+
string(3) "FOO"
31+
string(3) "BAR"
32+
NULL
33+
Done

0 commit comments

Comments
 (0)