[ 
https://issues.apache.org/jira/browse/LOG4PHP-117?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Maciej Mazur updated LOG4PHP-117:
---------------------------------

    Attachment: error_get_last_patch

I attached patch solving this issue

> 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
>         Attachments: error_get_last_patch
>
>
> 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.

Reply via email to