     1: <?php
     2: /**
     3:  * Licensed to the Apache Software Foundation (ASF) under one or more
     4:  * contributor license agreements. See the NOTICE file distributed with
     5:  * this work for additional information regarding copyright ownership.
     6:  * The ASF licenses this file to You under the Apache License, Version 2.0
     7:  * (the "License"); you may not use this file except in compliance with
     8:  * the License. You may obtain a copy of the License at
     9:  *
    10:  *     http://www.apache.org/licenses/LICENSE-2.0
    11:  *
    12:  * Unless required by applicable law or agreed to in writing, software
    13:  * distributed under the License is distributed on an "AS IS" BASIS,
    14:  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    15:  * See the License for the specific language governing permissions and
    16:  * limitations under the License.
    17:  *
    18:  * @package log4php
    19:  */
    20:
    21: /**
    22:  * Converts PHP configuration files to a PHP array.
    23:  *
    24:  * The file should only hold the PHP config array preceded by "return".
    25:  *
    26:  * Example PHP config file:
    27:  * <code>
    28:  * <?php
    29:  * return array(
    30:  *   'rootLogger' => array(
    31:  *     'level' => 'info',
    32:  *     'appenders' => array('default')
    33:  *   ),
    34:  *   'appenders' => array(
    35:  *     'default' => array(
    36:  *       'class' => 'LoggerAppenderEcho',
    37:  *       'layout' => array(
    38:  *          'class' => 'LoggerLayoutSimple'
    39:  *        )
    40:  *     )
    41:  *   )
    42:  * )
    43:  * ?>
    44:  * </code>
    45:  *
    46:  * @package log4php
    47:  * @subpackage configurators
    48:  * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
    49:  * @version $Revision: 1343601 $
    50:  * @since 2.2
    51:  */
    52: class LoggerConfigurationAdapterPHP implements LoggerConfigurationAdapter
    53: {
    54:     public function convert($url) {
    55:         if (!file_exists($url)) {
    56:             throw new LoggerException("File [$url] does not exist.");
    57:         }
    58:
    59:         // Load the config file
    60:         $data = @file_get_contents($url);
    61:         if ($data === false) {
    62:             $error = error_get_last();
    63:             throw new LoggerException("Error loading config file: {$error['message']}");
    64:         }
    65:
    66:         $config = @eval('?>' . $data);
    67:
    68:         if ($config === false) {
    69:             $error = error_get_last();
    70:             throw new LoggerException("Error parsing configuration: " . $error['message']);
    71:         }
    72:
    73:         if (empty($config)) {
    74:             throw new LoggerException("Invalid configuration: empty configuration array.");
    75:         }
    76:
    77:         if (!is_array($config)) {
    78:             throw new LoggerException("Invalid configuration: not an array.");
    79:         }
    80:
    81:         return $config;
    82:     }
    83: }
    84:
    85: