Often it's necessary to print messages to the output stream from your module, just as print() would be used within a script. PHP offers functions for most generic tasks, such as printing warning messages, generating output for phpinfo(), and so on. The following sections provide more details. Examples of these functions can be found on the CD-ROM.
zend_printf() works like the standard printf(), except that it prints to Zend's output stream.
zend_error() can be used to generate error messages.
This function accepts two arguments; the first is the error type (see
zend_errors.h
), and the second is the error message.
zend_error(E_WARNING, "This function has been called with empty arguments");
表 3.16 “Zend's Predefined Error Messages.” shows a list of possible values (see 图 3.5 “Display of warning messages in the browser.”). These
values are also referred to in php.ini
. Depending on
which error type you choose, your messages will be logged.
Error | Description |
E_ERROR | Signals an error and terminates execution of the script immediately . |
E_WARNING | Signals a generic warning. Execution continues. |
E_PARSE | Signals a parser error. Execution continues. |
E_NOTICE |
Signals a notice. Execution continues. Note that by
default the display of this type of error messages is turned off in
php.ini .
|
E_CORE_ERROR | Internal error by the core; shouldn't be used by user-written modules. |
E_COMPILE_ERROR | Internal error by the compiler; shouldn't be used by user-written modules. |
E_COMPILE_WARNING | Internal warning by the compiler; shouldn't be used by user-written modules. |
After creating a real module, you'll want to show information
about the module in phpinfo() (in addition to the
module name, which appears in the module list by default). PHP allows
you to create your own section in the phpinfo() output with the ZEND_MINFO()
function. This function
should be placed in the module descriptor block (discussed earlier) and is
always called whenever a script calls phpinfo().
PHP automatically prints a section
in phpinfo() for you if you specify the ZEND_MINFO
function, including the module name in the heading. Everything else must be
formatted and printed by you.
Typically, you can print an HTML table header using php_info_print_table_start() and then use the standard functions php_info_print_table_header() and php_info_print_table_row(). As arguments, both take the number of columns (as integers) and the column contents (as strings). 例 3.13 “ Source code and screenshot for output in phpinfo. ” shows a source example and its output. To print the table footer, use php_info_print_table_end().
php_info_print_table_start();
php_info_print_table_header(2, "First column", "Second column");
php_info_print_table_row(2, "Entry in first row", "Another entry");
php_info_print_table_row(2, "Just to fill", "another row here");
php_info_print_table_end();
You can also print execution information, such as the current file
being executed. The name of the function currently being executed
can be retrieved using the function
get_active_function_name(). This function
returns a pointer to the function name and doesn't accept any
arguments. To retrieve the name of the file currently being
executed, use zend_get_executed_filename().
This function accesses the executor globals, which are passed to
it using the TSRMLS_C
macro. The executor globals
are automatically available to every function that's called
directly by Zend (they're part of the
INTERNAL_FUNCTION_PARAMETERS
described earlier
in this chapter). If you want to access the executor globals in
another function that doesn't have them available automatically,
call the macro TSRMLS_FETCH()
once in that
function; this will introduce them to your local scope.
Finally, the line number currently being executed can be retrieved using the function zend_get_executed_lineno(). This function also requires the executor globals as arguments. For examples of these functions, see 例 3.14 “Printing execution information.”.
zend_printf("The name of the current function is %s<br>", get_active_function_name(TSRMLS_C));
zend_printf("The file currently executed is %s<br>", zend_get_executed_filename(TSRMLS_C));
zend_printf("The current line being executed is %i<br>", zend_get_executed_lineno(TSRMLS_C));