]> granicus.if.org Git - php/commitdiff
calling getenv() without arguments should return the environment variables as an...
authorFerenc Kovacs <tyrael@php.net>
Mon, 12 Oct 2015 19:24:19 +0000 (21:24 +0200)
committerFerenc Kovacs <tyrael@php.net>
Mon, 12 Oct 2015 19:27:07 +0000 (21:27 +0200)
ext/standard/basic_functions.c
ext/standard/tests/general_functions/getenv.phpt [new file with mode: 0644]

index a81212429663ddc794526c807e70d7a3116e0c8f..7d0e1bfbf0d55f89e65c1a5c9c703172d25930fe 100644 (file)
@@ -23,6 +23,7 @@
 #include "php_streams.h"
 #include "php_main.h"
 #include "php_globals.h"
+#include "php_variables.h"
 #include "php_ini.h"
 #include "php_standard.h"
 #include "php_math.h"
@@ -631,7 +632,7 @@ ZEND_BEGIN_ARG_INFO(arginfo_long2ip, 0)
        ZEND_ARG_INFO(0, proper_address)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO(arginfo_getenv, 0)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_getenv, 0, 0, 0)
        ZEND_ARG_INFO(0, varname)
 ZEND_END_ARG_INFO()
 
@@ -4008,17 +4009,24 @@ PHP_FUNCTION(long2ip)
  * System Functions *
  ********************/
 
-/* {{{ proto string getenv(string varname)
-   Get the value of an environment variable */
+/* {{{ proto string getenv([string varname])
+   Get the value of an environment variable or every available environment variable 
+   if no varname is present  */
 PHP_FUNCTION(getenv)
 {
        char *ptr, *str;
        size_t str_len;
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &str, &str_len) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS(), "|s", &str, &str_len) == FAILURE) {
                RETURN_FALSE;
        }
 
+       if (!str) {
+               array_init(return_value);
+               php_import_environment_variables(return_value);
+               return;
+       }
+
        /* SAPI method returns an emalloc()'d string */
        ptr = sapi_getenv(str, str_len);
        if (ptr) {
diff --git a/ext/standard/tests/general_functions/getenv.phpt b/ext/standard/tests/general_functions/getenv.phpt
new file mode 100644 (file)
index 0000000..006378a
--- /dev/null
@@ -0,0 +1,16 @@
+--TEST--
+getenv() basic tests
+--ENV--
+FOO=bar
+--FILE--
+<?php
+
+var_dump(getenv("FOO"));
+var_dump(getenv()["FOO"]);
+
+echo "Done\n";
+?>
+--EXPECTF--
+string(3) "bar"
+string(3) "bar"
+Done