#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. Мне трудно отказать Хью кучам наличных 🙂