Массив в json и обратно с промежуточной записью в файл

dpts

Новичок
Приветствую.
Имеем файл conf.php:
PHP:
<?php

$siteVars = array(
    'siteLang' => '',
    'sitename' => '',
    'siteEmail' => '',   
    'adminEmail' => '',
    'semdMethod' => 0,   
    'smtphost' => '',
    'smtplogin' => '',
    'smtppass' => '',
    'smtpport' => 25,
    'script' => '',       
    'dbHost' => '',
    'dbUser' => '',
    'dbPass' => '',
    'dbName' => '',
    'siteDarkHex' => '',
    'siteDarkRGB' => '',
    'siteLightHex' => '',
    'siteLightRGB' => '',
    'galleryHighlightHex' => '',
    'galleryHighlightRGB' => '',
    'feedbackColorSheme' => '',
    'sliderImgFolder' => '',
    'bcDividerHex' => '',
    'bcDivider' => '',
    'namingMode' => 2,
    'headerParallax' => 0,
    'useCash' => 1,
    'categoryViewMode' => 2,       
    'categoryViewSymbols' => 100,   
    'irc' => '',             
    'irc-secret' => '',       
    'prevSend' => 0,               
    'sendInterval' => 180,           
    'devMode' => 0                   
)
?>
Надо превратить массив $siteVars в JSON и сохранить в файл conf.json с тем чтобы в последствии этот conf.json использовать и "уйти" от conf.php (совсем).
С эти успешно справляемся, однако когда начинаем читать json из созданного файла, json_decode возвращает строку а не массив, при этом, если результат работы json_encode в файл не записывать а сразу декодировать обратно, то все - хорошо, возвращается массив.
Код обработки массива из conf.php:
PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('error_reporting',  E_ALL);
$config = 'conf.php';
$configJSON = 'conf.json';
if ( file_exists($config) ){
    include($config);
    if ( !file_exists($configJSON) ){
        $configContent = json_encode($siteVars);
        if ( file_put_contents($configJSON, json_encode($configContent)) ){
            echo 'Конфигурация сохранена в файле <b>'.$configJSON.'</b><br><hr>';
            echo '<p>';
            var_dump(json_decode(file_get_contents($configJSON),true));
            echo '</p><hr>';
        }else{
            echo 'Ой! Конфигурация <b><u>не</u><b> сохранена в файле <b>'.$configJSON.'</b>';
        }
    } else {
        if ( !is_array(json_decode(file_get_contents($configJSON),true)) ){
            echo 'json_decode <b><u>не</u></b> сработал</u></b> с содержимым файла '.$configJSON.' и вернул не массив.<br>';
            echo '<p>';
            var_dump(json_decode(file_get_contents($configJSON)),true);
            echo '</p><hr>Ошибок перекодировки json: '.json_last_error().'шт.<br><hr><p></p>';
        } else {
            echo 'json_decode <b><u>сработал</u></b> с содержимым файла '.$configJSON.' и вернул массив.<br>';
            echo '<p>';
            var_dump(json_decode(file_get_contents($configJSON)),true);
            echo '</p><hr>Ошибок перекодировки json: '.json_last_error().'шт.<br><hr><p></p>';
        }
        echo '<p>';
        echo 'Прямая перекодировка туда-обратно без записи json в файл.<br>';
        if ( is_array(json_decode(json_encode($siteVars),true)) ){
            echo 'Работает и возвращает массив:<br>';
            var_dump (json_decode(json_encode($siteVars),true));
            echo '<br>';
        } else {
            echo 'Не работает и возвращает не массив:<br>';
            var_dump (json_decode(json_encode($siteVars),true));
            echo '<br>';
        }
        echo '</p><hr>Ошибок перекодировки json: '.json_last_error().'шт.<br><hr><p></p>';
    }
}else{
    echo '<p>Файл <b>'.$config.'</b> не существует</p></hr>';
}
?>
Подскажите, где собака порылась, почему так странно ведет себя json_decode и как заставить ее парсить json из файла в массив?
 

dpts

Новичок
Код ниасилил - очень в глазах рябит, но очевидно, что ты зачем-то кодируешь два раза.
Приведенный код написан для примера не корректной работы обратного кодирования с промежуточной записью в файл, не более.
для того, чтоб очень умные профессионалы не утверждали, что в conf.json находится не json, как это обычно бывает.

Увидел, Спасибо.

Задача простая 1 раз превратить существующий конфиг в JSON и потом пользовать уже conf.json навсегда забыв о conf.php.
 
Последнее редактирование:

ksnk

прохожий
Если хранить конфиги в json, то нужно помнить, что он должен быть вне доступного из web пространства. Либо запрет на получение json снаружи чем нибудь вроде .htaccess.
 

ksnk

прохожий
Это такая специальная пятничная шутка?
Уже, вероятно. не шутка, так как
но очевидно, что ты зачем-то кодируешь два раза.
Увидел, Спасибо.
 
Сверху