LoggerConfiguratorIni::configure() and unexptected results from error_get_last()
--------------------------------------------------------------------------------
Key: LOG4PHP-117
URL: https://issues.apache.org/jira/browse/LOG4PHP-117
Project: Log4php
Issue Type: Bug
Components: Code
Affects Versions: 2.0
Reporter: Maciej Mazur
If you invoke LoggerConfiguratorIni::configure() after there was any notice or
warning in your PHP script, then LoggerConfiguratorIni will throw an exception
even if there is no need (propably terminating execution)
284 public function configure(LoggerHierarchy $hierarchy, $url =
'') {
285 $properties = @parse_ini_file($url);
286 if ($properties === false || count($properties) == 0) {
287 $error = error_get_last();
288 throw new LoggerException("LoggerConfiguratorIni:
".$error['message']);
289 }
290 return $this->doConfigureProperties($properties,
$hierarchy);
291 }
In line 287 it is checked if there was any error triggered by function
parse_ini_file. Unfortunately function error_get_last() doesn't return an error
triggered by execution of the last function. It returnes an error that ist most
recent in global, even if it was already catched and taken care of. This is
because there is no way to reset the state of the last error. It returns always
the last triggered error.
(http://www.php.net/manual/en/function.error-get-last.php#83608)
I attached the patch that "solves" this by triggering an empty error before
parse_ini_file(), and the it is checked if the error has an empty message:
public function configure(LoggerHierarchy $hierarchy, $url = '') {
@trigger_error('');
$properties = @parse_ini_file($url);
if ($properties === false || count($properties) == 0) {
$error = error_get_last();
if ($error['message'] != '') {
throw new
LoggerException("LoggerConfiguratorIni: ".$error['message']);
}
}
return $this->doConfigureProperties($properties, $hierarchy);
}
This not very pretty but it works
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.