хранение и добавление массива в файл в php

#php

#php

Вопрос:

У меня есть app_id и текущая дата. на самом деле я хочу обновить свою базу данных, если текущая дата и сохраненная дата больше 4. Я делаю это:

 $app_id = $_GET['ap'];
$current_date=date('d');
$a = array($app_id => $current_date);
$fp = fopen("time.txt",'r');
$last_run = unserialize(file_get_contents("time.txt"))[$app_id];
if(abs($last_run-$current_date) > 2)
{
    $fp = fopen("time.txt", 'w'); 
    fwrite($fp, serialize($a));
}
 

Но проблема в том, что когда я переключаю приложение, оно снова обновляет базу данных, потому что я использую режим записи, который завершается записью текстового файла. Я могу использовать режим добавления. тогда как я могу выполнить поиск в массиве, хранящемся в файле, и получить эту конкретную дату, соответствующую этому app_id, а затем соответствующим образом добавить эту дату.
Заранее спасибо

Комментарии:

1. Этот код, похоже, делает именно это. Вы запускаете это из нескольких мест одновременно? Тогда вам нужны замки ( php.net//manual/en/function . flock.php )

Ответ №1:

Вам нужно прочитать файл и отменить сериализацию всего массива в переменную, затем вы можете протестировать и обновить любую часть массива, а затем записать весь массив обратно в свой файл.

Кроме file_get_contents() того, file_put_contents() вам не нужно открывать дескриптор файла, он делает все это внутренне.

 $app_id       = $_GET['ap'];
$current_date = date('d');

$last_run = unserialize(file_get_contents("time.txt"));

if(abs($last_run[$app_id] - $current_date ) > 2 ) { 
    // change the last run date for this app
    $last_run[$app_id] = $current_date;

    file_put_contents('time.txt', serialize($last_run)); 
}
 

Вам действительно следует провести некоторую проверку и здесь.

  • Этот ‘ap’ передается скрипту в массиве $_GET
  • Что массив $ last_run на самом деле содержит вхождение $app_id

Комментарии:

1. должен ли я открывать файл в режиме добавления или записи?

2. есть ли что-нибудь в этом мире, что я могу для вас сделать. Я был бы рад помочь. спасибо, приятель. он работает потрясающе. это решение, которое я искал. СПАСИБО 🙂

3. Мне трудно отказать Хью кучам наличных 🙂