]> granicus.if.org Git - php/commitdiff
- MFH php --ri <extension>
authorMarcus Boerger <helly@php.net>
Thu, 8 Feb 2007 16:55:34 +0000 (16:55 +0000)
committerMarcus Boerger <helly@php.net>
Thu, 8 Feb 2007 16:55:34 +0000 (16:55 +0000)
NEWS
ext/standard/info.c
ext/standard/info.h
sapi/cli/php.1.in
sapi/cli/php_cli.c

diff --git a/NEWS b/NEWS
index a6b97ccb9231dc50fe00c3f3fb41ccdf63ed23fa..574e1a7450e544f214a5f1c6170d5953ff90d77e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,7 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? 2007, PHP 5.2.2
+- Add --ri switch to CLI which allows to check extension information. (Marcus)
 
 08 Feb 2007, PHP 5.2.1
 - Added read-timeout context option "timeout" for HTTP streams. (Hannes, Ilia). 
index 140c11ee9890e1b756f0a1a0da3f734cb8e95fc4..e89fde5152d5abc83eba71bede9831d272ef2bcf 100644 (file)
@@ -76,13 +76,9 @@ static int php_info_write_wrapper(const char *str, uint str_length)
 }
 
 
-/* {{{ _display_module_info
- */
-static int _display_module_info(zend_module_entry *module, void *arg TSRMLS_DC)
+PHPAPI void php_info_print_module(zend_module_entry *module TSRMLS_DC) /* {{{ */
 {
-       int show_info_func = *((int *) arg);
-
-       if (show_info_func && module->info_func) {
+       if (module->info_func) {
                if (!sapi_module.phpinfo_as_text) {
                        php_printf("<h2><a name=\"module_%s\">%s</a></h2>\n", module->name, module->name);
                } else {
@@ -91,7 +87,7 @@ static int _display_module_info(zend_module_entry *module, void *arg TSRMLS_DC)
                        php_info_print_table_end();
                }
                module->info_func(module TSRMLS_CC);
-       } else if (!show_info_func && !module->info_func) {
+       } else {
                if (!sapi_module.phpinfo_as_text) {
                        php_printf("<tr>");
                        php_printf("<td>");
@@ -102,7 +98,24 @@ static int _display_module_info(zend_module_entry *module, void *arg TSRMLS_DC)
                        php_printf("\n");
                }       
        }
-       return 0;
+}
+/* }}} */
+
+static int _display_module_info_func(zend_module_entry *module TSRMLS_DC) /* {{{ */
+{
+       if (module->info_func) {
+               php_info_print_module(module TSRMLS_CC);
+       }
+       return ZEND_HASH_APPLY_KEEP;
+}
+/* }}} */
+
+static int _display_module_info_def(zend_module_entry *module TSRMLS_DC) /* {{{ */
+{
+       if (!module->info_func) {
+               php_info_print_module(module TSRMLS_CC);
+       }
+       return ZEND_HASH_APPLY_KEEP;
 }
 /* }}} */
 
@@ -662,22 +675,19 @@ PHPAPI void php_print_info(int flag TSRMLS_DC)
        }
 
        if (flag & PHP_INFO_MODULES) {
-               int show_info_func;
                HashTable sorted_registry;
                zend_module_entry tmp;
 
-               zend_hash_init(&sorted_registry, 50, NULL, NULL, 1);
+               zend_hash_init(&sorted_registry, zend_hash_num_elements(&module_registry), NULL, NULL, 1);
                zend_hash_copy(&sorted_registry, &module_registry, NULL, &tmp, sizeof(zend_module_entry));
                zend_hash_sort(&sorted_registry, zend_qsort, module_name_cmp, 0 TSRMLS_CC);
 
-               show_info_func = 1;
-               zend_hash_apply_with_argument(&sorted_registry, (apply_func_arg_t) _display_module_info, &show_info_func TSRMLS_CC);
+               zend_hash_apply(&sorted_registry, (apply_func_t) _display_module_info_func TSRMLS_CC);
 
                SECTION("Additional Modules");
                php_info_print_table_start();
                php_info_print_table_header(1, "Module Name");
-               show_info_func = 0;
-               zend_hash_apply_with_argument(&sorted_registry, (apply_func_arg_t) _display_module_info, &show_info_func TSRMLS_CC);
+               zend_hash_apply(&sorted_registry, (apply_func_t) _display_module_info_def TSRMLS_CC);
                php_info_print_table_end();
 
                zend_hash_destroy(&sorted_registry);
index 2cf3afe6f440e09c66adfb9367b9a95bae6c28ed..71ab2a51cb25b951c2e406df356d53a8e3046710 100644 (file)
@@ -81,6 +81,7 @@ PHPAPI void php_info_print_table_end(void);
 PHPAPI void php_info_print_box_start(int bg);
 PHPAPI void php_info_print_box_end(void);
 PHPAPI void php_info_print_hr(void);
+PHPAPI void php_info_print_module(zend_module_entry *module TSRMLS_DC);
 PHPAPI char *php_logo_guid(void);
 PHPAPI char *php_get_uname(char mode);
 
index 2b1e3dafb41ec5ae4de8d5201affd5a9c008a1da..0a224ea176bfaca4022517a7eea5e9eb9d326f2f 100644 (file)
@@ -294,6 +294,16 @@ Shows information about class
 .IR name
 Shows information about extension
 .B name
+.TP
+.PD 0
+.B \-\-rextinfo
+.IR name
+.TP
+.PD 1
+.B \-\-ri
+.IR name
+Shows configuration for extension
+.B name
 .SH FILES
 .TP 15
 .B php\-cli.ini
index 5b7c185c7bdcb1ba479baf7de1db66d1ef4ed6b6..d48617ae468c3067a666a51034b3a43836340f2e 100644 (file)
 #define PHP_MODE_REFLECTION_FUNCTION    8
 #define PHP_MODE_REFLECTION_CLASS       9
 #define PHP_MODE_REFLECTION_EXTENSION   10
+#define PHP_MODE_REFLECTION_EXT_INFO    11
 
 #define HARDCODED_INI                  \
        "html_errors=0\n"                       \
        "register_argc_argv=1\n"        \
        "implicit_flush=1\n"            \
        "output_buffering=0\n"          \
-       "max_execution_time=0\n"    \
+       "max_execution_time=0\n"        \
        "max_input_time=-1\n"
 
-
 static char *php_optarg = NULL;
 static int php_optind = 1;
 #if (HAVE_LIBREADLINE || HAVE_LIBEDIT) && !defined(COMPILE_DL_READLINE)
@@ -153,6 +153,8 @@ static const opt_struct OPTIONS[] = {
        {11,  1, "rclass"},
        {12,  1, "re"},
        {12,  1, "rextension"},
+       {13,  1, "ri"},
+       {13,  1, "rextinfo"},
 #endif
        {'-', 0, NULL} /* end of args */
 };
@@ -450,6 +452,7 @@ static void php_cli_usage(char *argv0)
                                "  --rf <name>      Show information about function <name>.\n"
                                "  --rc <name>      Show information about class <name>.\n"
                                "  --re <name>      Show information about extension <name>.\n"
+                               "  --ri <name>      Show configuration for extension <name>.\n"
                                "\n"
 #endif
                                , prog, prog, prog, prog, prog, prog);
@@ -623,8 +626,8 @@ int main(int argc, char *argv[])
        tsrm_startup(1, 1, 0, NULL);
 #endif
 
-       cli_sapi_module.php_ini_path_override = NULL;
        cli_sapi_module.ini_defaults = sapi_cli_ini_defaults;
+       cli_sapi_module.php_ini_path_override = NULL;
        cli_sapi_module.phpinfo_as_text = 1;
        sapi_startup(&cli_sapi_module);
 
@@ -642,13 +645,13 @@ int main(int argc, char *argv[])
 
        while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0))!=-1) {
                switch (c) {
-               case 'c':
-                       cli_sapi_module.php_ini_path_override = strdup(php_optarg);
-                       break;
-               case 'n':
-                       cli_sapi_module.php_ini_ignore = 1;
-                       break;
-               case 'd': {
+                       case 'c':
+                               cli_sapi_module.php_ini_path_override = strdup(php_optarg);
+                               break;
+                       case 'n':
+                               cli_sapi_module.php_ini_ignore = 1;
+                               break;
+                       case 'd': {
                                /* define ini entries on command line */
                                int len = strlen(php_optarg);
                                char *val;
@@ -947,6 +950,10 @@ int main(int argc, char *argv[])
                                behavior=PHP_MODE_REFLECTION_EXTENSION;
                                reflection_what = php_optarg;
                                break;
+                       case 13:
+                               behavior=PHP_MODE_REFLECTION_EXT_INFO;
+                               reflection_what = php_optarg;
+                               break;
 #endif
                        default:
                                break;
@@ -1252,6 +1259,22 @@ int main(int argc, char *argv[])
                                        zval_ptr_dtor(&ref);
                                        zval_ptr_dtor(&arg);
 
+                                       break;
+                               }
+                       case PHP_MODE_REFLECTION_EXT_INFO:
+                               {
+                                       int len = strlen(reflection_what);
+                                       char *lcname = zend_str_tolower_dup(reflection_what, len);
+                                       zend_module_entry *module;
+
+                                       if (zend_hash_find(&module_registry, lcname, len+1, (void**)&module) == FAILURE) {
+                                               zend_printf("Extension '%s' not present.\n", reflection_what);
+                                               exit_status = 1;
+                                       } else {
+                                               php_info_print_module(module TSRMLS_CC);
+                                       }
+                                       
+                                       efree(lcname);
                                        break;
                                }
 #endif /* reflection */