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
zend_printf() works like the
standard printf(), except that it prints to Zend's
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");
shows a list of possible values (see Figure 46-3
values are also referred to in php.ini
. Depending on
which error type you choose, your messages will be logged.
Table 46-16. Zend's Predefined Error Messages.
Signals an error and terminates execution of the script
Signals a generic warning. Execution continues.
Signals a parser error. Execution continues.
Signals a notice. Execution continues. Note that by
default the display of this type of error messages is turned off in
Internal error by the core; shouldn't be used by
Internal error by the compiler; shouldn't be used by
Internal warning by the compiler; shouldn't be used by
Figure 46-3. Display of warning messages in the browser.
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
and php_info_print_table_row(). As arguments, both take the number of
columns (as integers) and the column contents (as strings). Example 46-13 shows a source example and its output. To print the table footer, use php_info_print_table_end().
Source code and screenshot for output in phpinfo().
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");
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 Example 46-14.
Example 46-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));