Re: PHP 4.0 Bug #5263: nested exit causes redeclaration error
| From: | Zeev Suraski | Date: | Wed, 28 Jun 2000 15:29:49 +0000 |
| Subject: | Re: PHP 4.0 Bug #5263: nested exit causes redeclaration error | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-22639@lists.php.net to get a copy of this message | ||
Can you or can you not reproduce it?
Zeev
On 29 Jun 2000 MrVanes@Bigfoot.com wrote:
> From: MrVanes@Bigfoot.com
> Operating system: NT2000
> PHP version: 4.0.0 Release
> PHP Bug Type: Reproduceable crash
> Bug description: nested exit causes redeclaration error
>
> When called inside a function, that was called by another function, exit causes the
> php4isapi.dll to produce strange results...
>
> Fatal error: Cannot redeclare [user_function()] in [path] on line [#]
>
> This behaviour was seen, but not reproduced, inside a 1st level function call.
>
> Exit, inside the 'main' .php file (level 0), exits without problems.
>
> When called as an executable (PHP3 style) this causes the server crashes with an error and
> says:
> CGI error.
> The specified CGI application misbehaved by not returning a complete set of HTTP headers. The
> headers it did return are:
> [nothing]
>
> [PHP]
>
> ;;;;;;;;;;;;;;;;;;;
> ; About this file ;
> ;;;;;;;;;;;;;;;;;;;
> ; This file controls many aspects of PHP's behavior. In order for PHP to
> ; read it, it must be named 'php.ini'. PHP looks for it in the current
> ; working directory, in the path designated by the environment variable
> ; PHPRC, and in the path that was defined in compile time (in that order).
> ; Under Windows, the compile-time path is the Windows directory. The
> ; path in which the php.ini file is looked for can be overriden using
> ; the -c argument in command line mode.
> ;
> ; The syntax of the file is extremely simple. Whitespace and Lines
> ; beginning with a semicolon are silently ignored (as you probably guessed).
> ; Section headers (e.g. [Foo]) are also silently ignored, even though
> ; they might mean something in the future.
> ;
> ; Directives are specified using the following syntax:
> ; directive = value
> ; Directive names are *case sensitive* - foo=bar is different from FOO=bar.
> ;
> ; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one
> ; of the INI constants (On, Off, True, False, Yes, No and None) or an expression
> ; (e.g. E_ALL & ~E_NOTICE), or a quoted string ("foo").
> ;
> ; Expressions in the INI file are limited to bitwise operators and parentheses:
> ; | bitwise OR
> ; & bitwise AND
> ; ~ bitwise NOT
> ;
> ; Boolean flags can be turned on using the values 1, On, True or Yes.
> ; They can be turned off using the values 0, Off, False or No.
> ;
> ; An empty string can be denoted by simply not writing anything after the equal
> ; sign, or by using the None keyword:
> ;
> ; foo = ; sets foo to an empty string
> ; foo = none ; sets foo to an empty string
> ; foo = "none" ; sets foo to the string 'none'
> ;
> ; If you use constants in your value, and these constants belong to a dynamically
> ; loaded extension (either a PHP extension or a Zend extension), you may only
> ; use these constants *after* the line that loads the extension.
> ;
> ; All the values in the php.ini-dist file correspond to the builtin
> ; defaults (that is, if no php.ini is used, or if you delete these lines,
> ; the builtin defaults will be identical).
>
>
> ;;;;;;;;;;;;;;;;;;;;
> ; Language Options ;
> ;;;;;;;;;;;;;;;;;;;;
>
> engine = On ; Enable the PHP scripting language engine under Apache
> short_open_tag = On ; allow the <? tag. otherwise, only <?php and <script> tags
> are recognized.
> asp_tags = Off ; allow ASP-style <% %> tags
> precision = 14 ; number of significant digits displayed in floating point numbers
> y2k_compliance = Off ; whether to be year 2000 compliant (will cause problems with non y2k
> compliant browsers)
> output_buffering= Off ; Output buffering allows you to send header lines (including cookies)
> ; even after you send body content, in the price of slowing PHP's
> ; output layer a bit.
> ; You can enable output buffering by in runtime by calling the output
> ; buffering functions, or enable output buffering for all files
> ; by setting this directive to On.
> implicit_flush = Off ; Implicit flush tells PHP to tell the output layer to flush itself
> ; automatically after every output block. This is equivalent to
> ; calling the PHP function flush() after each and every call to print()
> ; or echo() and each and every HTML block.
> ; Turning this option on has serious performance implications, and
> ; is generally recommended for debugging purposes only.
> allow_call_time_pass_reference = On ; whether to enable the ability to force arguments to be
> ; passed by reference at function-call time. This method
> ; is deprecated, and is likely to be unsupported in future
> ; versions of PHP/Zend. The encouraged method of specifying
> ; which arguments should be passed by reference is in the
> ; function declaration. You're encouraged to try and
> ; turn this option Off, and make sure your scripts work
> ; properly with it, to ensure they will work with future
> ; versions of the language (you will receive a warning
> ; each time you use this feature, and the argument will
> ; be passed by value instead of by reference).
>
> ; Safe Mode
> safe_mode = Off
> safe_mode_exec_dir =
> safe_mode_allowed_env_vars = PHP_ ; Setting certain environment variables
> ; may be a potential security breach.
> ; This directive contains a comma-delimited
> ; list of prefixes. In Safe Mode, the
> ; user may only alter environment
> ; variables whose names begin with the
> ; prefixes supplied here.
> ; By default, users will only be able
> ; to set environment variables that begin
> ; with PHP_ (e.g. PHP_FOO=BAR).
> ; Note: If this directive is empty, PHP
> ; will let the user modify ANY environment
> ; variable!
> safe_mode_protected_env_vars = LD_LIBRARY_PATH ; This directive contains a comma-
> ; delimited list of environment variables,
> ; that the end user won't be able to
> ; change using putenv().
> ; These variables will be protected
> ; even if safe_mode_allowed_env_vars is
> ; set to allow to change them.
>
> ; Colors for Syntax Highlighting mode. Anything that's acceptable in <font
> color=???> would work.
> highlight.string = #DD0000
> highlight.comment = #FF8000
> highlight.keyword = #007700
> highlight.bg = #FFFFFF
> highlight.default = #0000BB
> highlight.html = #000000
>
> ; Misc
> expose_php = On ; Decides whether PHP may expose the fact that it is installed on the
> ; server (e.g., by adding its signature to the Web server header).
> ; It is no security threat in any way, but it makes it possible
> ; to determine whether you use PHP on your server or not.
>
>
>
> ;;;;;;;;;;;;;;;;;;;
> ; Resource Limits ;
> ;;;;;;;;;;;;;;;;;;;
>
> max_execution_time = 30 ; Maximum execution time of each script, in seconds (UNIX only)
> memory_limit = 8388608 ; Maximum amount of memory a script may consume (8MB)
>
>
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> ; Error handling and logging ;
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> ; error_reporting is a bit-field. Or each number up to get desired error reporting level
> ; E_ALL - All errors and warnings
> ; E_ERROR - fatal run-time errors
> ; E_WARNING - run-time warnings (non fatal errors)
> ; E_PARSE - compile-time parse errors
> ; E_NOTICE - run-time notices (these are warnings which often result from a bug in
> ; your code, but it's possible that it was intentional (e.g., using an
> ; uninitialized variable and relying on the fact it's automatically
> ; initialized to an empty string)
> ; E_CORE_ERROR - fatal errors that occur during PHP's initial startup
> ; E_CORE_WARNING - warnings (non fatal errors) that occur during PHP's initial startup
> ; E_COMPILE_ERROR - fatal compile-time errors
> ; E_COMPILE_WARNING - compile-time warnings (non fatal errors)
> ; E_USER_ERROR - user-generated error message
> ; E_USER_WARNING - user-generated warning message
> ; E_USER_NOTICE - user-generated notice message
> ; Examples:
> ; error_reporting = E_ALL & ~E_NOTICE ; show all errors, except for notices
> ; error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR ; show only errors
> error_reporting = E_ALL & ~E_NOTICE ; Show all errors except for notices
> display_errors = On ; Print out errors (as a part of the HTML script)
> log_errors = Off ; Log errors into a log file (server-specific log, stderr, or error_log
> (below))
> track_errors = Off ; Store the last error/warning message in $php_errormsg (boolean)
> ;error_prepend_string = "<font color=ff0000>" ; string to output before an
> error message
> ;error_append_string = "</font>" ; string to output after an
> error message
> error_log = d:\inetpub\php\log\php_err.log ; log errors to specified file
> ;error_log = syslog ; log errors to syslog (Event Log on NT, not valid in Windows 95)
> warn_plus_overloading = Off ; warn if the + operator is used with strings
>
>
> ;;;;;;;;;;;;;;;;;
> ; Data Handling ;
> ;;;;;;;;;;;;;;;;;
> variables_order = "EGPCS" ; This directive describes the order in which PHP
> registers
> ; GET, POST, Cookie, Environment and Built-in variables (G, P,
> ; C, E & S respectively, often referred to as EGPCS or GPC).
> ; Registration is done from left to right, newer values override
> ; older values.
> register_globals = On ; Whether or not to register the EGPCS variables as global
> ; variables. You may want to turn this off if you don't want
> ; to clutter your scripts' global scope with user data. This makes
> ; most sense when coupled with track_vars - in which case you can
> ; access all of the GPC variables through the $HTTP_*_VARS[],
> ; variables.
> register_argc_argv = off ; This directive tells PHP whether to declare the argv&argc
> ; variables (that would contain the GET information). If you
> ; don't use these variables, you should turn it off for
> ; increased performance
> track_vars = On ; enable the $HTTP_*_VARS[] arrays, where * is one of
> ; ENV, POST, GET, COOKIE or SERVER.
> gpc_order = "GPC" ; This directive is deprecated. Use variables_order instead.
>
> ; Magic quotes
> magic_quotes_gpc = On ; magic quotes for incoming GET/POST/Cookie data
> magic_quotes_runtime= Off ; magic quotes for runtime-generated data, e.g. data from SQL, from
> exec(), etc.
> magic_quotes_sybase = Off ; Use Sybase-style magic quotes (escape ' with ''
> instead of \')
>
> ; automatically add files before or after any PHP document
> auto_prepend_file =
> auto_append_file =
>
> ; As of 4.0b4, PHP always outputs a character encoding by default in
> ; the Content-type: header. To disable sending of the charset, simply
> ; set it to be empty.
> ; PHP's built-in default is text/html
> default_mimetype = "text/html"
> ;default_charset = "iso-8859-1"
>
> ;;;;;;;;;;;;;;;;;;;;;;;;;
> ; Paths and Directories ;
> ;;;;;;;;;;;;;;;;;;;;;;;;;
> include_path = ; UNIX: "/path1:/path2" Windows:
> "\path1;\path2"
> doc_root = ; the root of the php pages, used only if nonempty
> user_dir = ; the directory under which php opens the script using /~username, used only if
> nonempty
> ;upload_tmp_dir = ; temporary directory for HTTP uploaded files (will use
> system default if not specified)
> upload_max_filesize = 2097152 ; 2 Meg default limit on file uploads
> extension_dir = ./ ; directory in which the loadable extensions (modules) reside
>
>
> ;;;;;;;;;;;;;;;;;;;;;;
> ; Dynamic Extensions ;
> ;;;;;;;;;;;;;;;;;;;;;;
> ; if you wish to have an extension loaded automaticly, use the
> ; following syntax: extension=modulename.extension
> ; for example, on windows,
> ; extension=msql.dll
> ; or under UNIX,
> ; extension=msql.so
> ; Note that it should be the name of the module only, no directory information
> ; needs to go here. Specify the location of the extension with the extension_dir directive
> above.
>
>
> ;Windows Extensions
> ;extension=php_mysql.dll
> ;extension=php_nsmail.dll
> ;extension=php_calendar.dll
> ;extension=php_dbase.dll
> ;extension=php_filepro.dll
> ;extension=php_gd.dll
> ;extension=php_dbm.dll
> ;extension=php_mssql.dll
> ;extension=php_zlib.dll
> ;extension=php_filepro.dll
> ;extension=php_imap4r2.dll
> ;extension=php_ldap.dll
> ;extension=php_crypt.dll
> ;extension=php_msql2.dll
> ;extension=php_odbc.dll
>
> ;;;;;;;;;;;;;;;;;;;
> ; Module Settings ;
> ;;;;;;;;;;;;;;;;;;;
>
> [Syslog]
> define_syslog_variables = Off ; Whether or not to define the various syslog variables,
> ; e.g. $LOG_PID, $LOG_CRON, etc. Turning it off is a
> ; good idea performance-wise. In runtime, you can define
> ; these variables by calling define_syslog_variables()
>
>
> [mail function]
> SMTP = localhost ;for win32 only
> sendmail_from = me@localhost.com ;for win32 only
> ;sendmail_path = ;for unix only, may supply arguments as well (default is sendmail -t)
>
> [Debugger]
> debugger.host = localhost
> debugger.port = 7869
> debugger.enabled = False
>
> [Logging]
> ; These configuration directives are used by the example logging mechanism.
> ; See examples/README.logging for more explanation.
> ;logging.method = db
> ;logging.directory = /path/to/log/directory
>
> ; Local Variables:
> ; tab-width: 4
> ; End:
>
>
>
>
>
--
Zeev Suraski <zeev@zend.com>
http://www.zend.com/