За последние 24 часа нас посетили 21445 программистов и 1694 робота. Сейчас ищут 1840 программистов ...

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

Тема в разделе "PHP для новичков", создана пользователем dpts, 16 авг 2018.

  1. dpts

    dpts Новичок

    С нами с:
    13 ноя 2017
    Сообщения:
    4
    Симпатии:
    0
    Приветствую.
    Имеем файл conf.php:
    PHP:
    1. <?php
    2. $siteVars = array(
    3.     'siteLang' => '',
    4.     'sitename' => '',
    5.     'siteEmail' => '',  
    6.     'adminEmail' => '',
    7.     'semdMethod' => 0,  
    8.     'smtphost' => '',
    9.     'smtplogin' => '',
    10.     'smtppass' => '',
    11.     'smtpport' => 25,
    12.     'script' => '',      
    13.     'dbHost' => '',
    14.     'dbUser' => '',
    15.     'dbPass' => '',
    16.     'dbName' => '',
    17.     'siteDarkHex' => '',
    18.     'siteDarkRGB' => '',
    19.     'siteLightHex' => '',
    20.     'siteLightRGB' => '',
    21.     'galleryHighlightHex' => '',
    22.     'galleryHighlightRGB' => '',
    23.     'feedbackColorSheme' => '',
    24.     'sliderImgFolder' => '',
    25.     'bcDividerHex' => '',
    26.     'bcDivider' => '',
    27.     'namingMode' => 2,
    28.     'headerParallax' => 0,
    29.     'useCash' => 1,
    30.     'categoryViewMode' => 2,      
    31.     'categoryViewSymbols' => 100,  
    32.     'irc' => '',            
    33.     'irc-secret' => '',      
    34.     'prevSend' => 0,              
    35.     'sendInterval' => 180,          
    36.     'devMode' => 0                  
    37. )
    38. ?>
    Надо превратить его в JSON и сохранить в файл conf.json с тем чтобы в последствии этот conf.json использовать потом и уйти от conf.php (совсем).
    С эти успешно справляемся, однако когда начинаем читать json из созданного файла json_decode возвращает строку а не массив, при этом, если результат работы json_encode в файл не записывать а сразу декодировать обратно, то все - хорошо, возвращается массив.
    Код обработки массива из conf.php:
    PHP:
    1. ini_set('error_reporting',  E_ALL);
    2. $config = 'conf.php';
    3. $configJSON = 'conf.json';
    4. include($config);
    5. if ( file_exists($config) ){
    6.     if ( !file_exists($configJSON) ){
    7.         $configContent = json_encode($siteVars);
    8.         if ( file_put_contents($configJSON, json_encode($configContent)) ){
    9.             echo 'Конфигурация сохранена в файле <b>'.$configJSON.'</b><br><hr>';
    10.             echo '<p>';
    11.             var_dump(json_decode(file_get_contents($configJSON)),true);
    12.             echo '</p><hr>';
    13.         }else{
    14.             echo 'Ой! Конфигурация <b><u>не</u><b> сохранена в файле <b>'.$configJSON.'</b>';
    15.         }
    16.     } else {
    17.         if ( !is_array(json_decode(file_get_contents($configJSON),true)) ){
    18.             echo 'json_decode <b><u>не</u></b> сработал</u></b> с содержимым файла '.$configJSON.' и вернул не массив.<br>';
    19.             echo '<p>';
    20.             var_dump(json_decode(file_get_contents($configJSON)),true);
    21.             echo '</p><hr>Ошибок перекодировки json: '.json_last_error().'шт.<br><hr><p></p>';
    22.         } else {
    23.             echo 'json_decode <b><u>сработал</u></b> с содержимым файла '.$configJSON.' и вернул массив.<br>';
    24.             echo '<p>';
    25.             var_dump(json_decode(file_get_contents($configJSON)),true);
    26.             echo '</p><hr>Ошибок перекодировки json: '.json_last_error().'шт.<br><hr><p></p>';
    27.         }
    28.         echo '<p>';
    29.         echo 'Прямая перекодировка туда-обратно без записи json в файл.<br>';
    30.         if ( is_array(json_decode(json_encode($siteVars),true)) ){
    31.             echo 'Работает и возвращает массив:<br>';
    32.             var_dump (json_decode(json_encode($siteVars,true)); // Возвращает строку
    33.             echo '<br>';
    34.         } else {
    35.             echo 'Не работает и возвращает не массив:<br>';
    36.             var_dump (json_decode(json_encode($siteVars),true));
    37.             echo '<br>';
    38.         }
    39.         echo '</p><hr>Ошибок перекодировки json: '.json_last_error().'шт.<br><hr><p></p>';
    40.     }
    41. }else{
    42.     echo '<p>Файл <b>'.$config.'</b> не существует</p></hr>';
    43. }
    44. ?>
    Подскажите, где собака порылась, почему так странно ведет себя json_decode и как заставить ее парсить json из файла в массив?
     
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @dpts, дважды кодируете.
     
  3. dpts

    dpts Новичок

    С нами с:
    13 ноя 2017
    Сообщения:
    4
    Симпатии:
    0
    Действительно. Благодарю.