Подтвердить что ты не робот

Чтение массива php, сохраненного в файле?

У меня есть некоторые php-массивы, сохраненные в файле .log

Я хочу прочитать их в php-массиве, например

array [0] = 1-й массив в файле .log array 1= второй массив в файле .log

решение здесь не работает для меня

он не дает такой ошибки файла или каталога, но когда я делаю include_once ('file.log), содержимое в файле отображается как результат (я не знаю почему), пожалуйста, помогите

4b9b3361

Ответ 1

Вы можете serialize массива перед тем, как записать его как текст в файл. Затем вы можете прочитать данные обратно из файла, unserialize вернет его обратно в массив.

http://php.net/manual/en/function.serialize.php

EDIT Описание процесса использования serialize/unserialize:

Итак, у вас есть массив:

$arr = array(
  'one'=>array(
      'subdata1',
      'subdata2'
  ),
  'two'='12345'
);

Когда я вызываю serialize в этом массиве, я получаю строку:

$string = serialize($arr);
echo $string;

OUTPUT: a:2:{s:3:"one";a:2:{i:0;s:8:"subdata1";i:1;s:8:"subdata2";}s:3:"two";s:5:"12345";}

Итак, я хочу записать эти данные в файл:

$fn= "serialtest.txt";
$fh = fopen($fn, 'w');
fwrite($fh, $string);
fclose($fh);

Позже я хочу использовать этот массив. Итак, я прочитаю файл, а затем unserialize:

$str = file_get_contents('serialtest.txt');
$arr = unserialize($str);
print_r($arr);

OUTPUT: Array ( [one] => Array ( [0] => subdata1 [1] => subdata2 ) [two] => 12345 ) 

Надеюсь, что это поможет!

РЕДАКТИРОВАТЬ 2 Вложенная демо

Чтобы хранить больше массивов в этот файл с течением времени, вам необходимо создать родительский массив. Этот массив является контейнером для всех данных, поэтому, когда вы хотите добавить другой массив, вам нужно распаковать родительский элемент и добавить к нему новые данные, а затем переупаковать все это.

Сначала создайте свой контейнер:

// Do this the first time, just to create the parent container
$parent = array();
$string = serialize($arr);
$fn= "logdata.log";
$fh = fopen($fn, 'w');
fwrite($fh, $string);
fclose($fh);

Теперь, оттуда вперед, когда вы захотите добавить новый массив, сначала вы должны получить весь пакет и нестиализировать его:

// get out the parent container
$parent = unserialize(file_get_contents('logdata.log'));

// now add your new data
$parent[] = array(
  'this'=>'is',
  'a'=>'new',
  'array'=>'for',
  'the'=>'log'
);

// now pack it up again
$fh = fopen('logdata.log', 'w');
fwrite($fh, serialize($parent));
fclose($fh);

Ответ 2

Это действительно занимает 2 строки кода ($ ar - это массив, а $filename - путь + имя файла, где вы хотите сохранить):

Чтобы сохранить массив:

file_put_contents ($ filename, serialize ($ ar));

чтобы прочитать массив назад:

$ар = десериализации (file_get_contents ($ имя_файла));

Ответ 3

include_once отображает вывод, так что это не неожиданно. Можете ли вы указать формат файла?

Вы можете использовать file_get_contents ('file.log'), чтобы получить содержимое файла, а затем легко поместить его в массив (например, с помощью preg_split).

Ответ 4

вам нужно "вернуть" массив, откройте файл log.log и в верхней части добавить return