Сохранить данные JSON во временном файле и удалить через 24 часа?

1

Как я могу временно хранить данные JSON на моем сервере Apache. В JSON есть некоторая информация о пользователях. Было бы здорово, если бы файлы удалялись каждые 24 часа.

$json_array = array(); 
 while($row = mysqli_fetch_assoc($result)) 
 { 
 $json_array[] = $row; 
 } 

 $final_array = json_encode($json_array);

Таким образом, я создаю файл JSON и могу также сохранить его в файле .json, но как я могу создать временные файлы с этими данными в нем. И этот файл должен быть доступен только для чтения с сервера.

  • 0
    Вы пробовали что-нибудь? Если вы можете поделиться кодом, который вы пробовали, сообщество может помочь.
  • 2
    Для записи в файл вы можете использовать fwrite. Для удаления вы можете использовать cron-tab для очистки содержимого файла каждые 24 часа.
Показать ещё 5 комментариев
Теги:

2 ответа

0
Лучший ответ

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

 $json_array = array(); 
 while($row = mysqli_fetch_assoc($result)) 
 { 
 $json_array[] = $row; 
 } 

 $final_array = json_encode($json_array);
 $generatedName = 'userIDprefix_userData' .  '.json'; //replace userIDprefix with user ID, this way we can use prefix to store different files per user, and retrieve file for user
 //use file put contents to store data 
 file_put_contents('path/to/json/data/' . $generatedName , $final_array);

Используйте file_get_contents() чтобы получить данные файла:

 $generatedName = 'userIDprefix_userData' .  '.json'; //replace userIDprefix with user ID, this way we can use prefix to store different files per user, and retrieve file for user
 //use file put contents to store data 
 $userJSONData = file_get_contents('path/to/json/data/' . $generatedName );

А затем настройте cron на запуск, скажем, каждые 5 минут, используя glob и filemtime чтобы просмотреть filemtime в котором вы храните данные, и filemtime чтобы получить метку времени файла, сравнить с текущей датой и удалить, если он старше 24 часов.

$past24hours = strtotime('-24 hours');
foreach (glob("path/to/json/data/*.json") as $filename) {
   if( filemtime($filename) < $past24hours ){
     unlink($filename);
    }
}

Настройте cron для запуска файла, в котором должен запускаться скрипт удаления файлов json, скажем, каждые 10 минут:

*/10 * * * * /usr/bin/php /path/to/script/to/delete-json.php

Замечания:

Не устанавливайте для этой папки разрешения 777, по крайней мере, 775 или даже 755. Кроме того, чтобы предотвратить прямой доступ к файлам .json, поместите в эту папку как минимум пустые index.php и .htaccess с содержимым:

#forbid access to folders and to files  
 RewriteEngine on 
 RewriteRule \.(json|txt)$ - [F] 
 deny from all
  • 0
    Большое спасибо. Правильно ли, что я должен изменить права доступа к папке для данных на 777?
  • 0
    @ User9123, если только вы не хотите, чтобы они были общедоступными, и они хранятся в общедоступном пути. В противном случае папка должна быть установлена как минимум на 775 или даже на 755, чтобы только у владельца и / или группы были все разрешения, а у других (мира) были только чтение и выполнение.
Показать ещё 5 комментариев
0

Почему ты так много думаешь? почему бы не попробовать php сессию или cookie в течение 24 часов или браузер js localStorage?

если нужен временный файл, создайте файл на сервере Apache, используя php-Apache, методы создания и записи файлов через 24 часа удалите этот файл, используя Cron Job.

  • 0
    Спасибо за ваш ответ.
  • 0
    Добро пожаловать ... пожалуйста, проголосуйте, если это полезно

Ещё вопросы

Сообщество Overcoder
Наверх
Меню