Задать вопрос
@MikeNelson1111

Скрипт для передачи данных, в поисках простого решения. кто может помочь?

Всем привет есть вопрос, нужно сделать передачу данных из формы на сайте напрямую в TXT файл
и чтобы то что передалось с сайта в txt файл через к примеру час автоматически удалилось
Может уже существуют готовые решение такого ? Очень ищу
  • Вопрос задан
  • 253 просмотра
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 4
ThunderCat
@ThunderCat Куратор тега Веб-разработка
{PHP, MySql, HTML, JS, CSS} developer
нужно сделать передачу данных из формы на сайте напрямую в TXT файл
Понадобится все же какой-то серверный код, который что-то будет делать на стороне сервера с пришедшими данными. Можно тот же жаваскрипт, если сервер поддерживает ноду.

и чтобы то что передалось с сайта в txt файл через к примеру час автоматически удалилось
Автоматически это как? Любая "автоматически" работающая программа имеет какой-то код, определяющий что и когда делать. Вариантов что вы там задумали миллиард, как определитесь с конкретным стеком/алгоритмом - перейдете к этому вопросу.

Может уже существуют готовые решение такого ? Очень ищу
Наверняка, чего только юные падаваны не пишут в порыве творческого припадка, просто большинство стесняется выкладывать такой откровенный бред, а кто не стесняется видимо еще не знает как выкладывать в общий доступ скрипты в 4 строчки. Так что пишите, выкладывайте, первым будете )
Ответ написан
Комментировать
@rPman
ТЗ дано, в целях - простое, про авторизацию не заикнулись...

Реализация будет состоять из 3 частей:
1. интерфейс - frontend
2. серверная часть backend
3. из-за особенности реализации backend большинством инструментов и веб серверов, регулярные операции делают сторонним скриптом, обычно его запускают средствами ОС (его шедулером), в linux это cron

Итак, интерфейс из одного окна - окно запроса текста с кнопкой отправки с сообщением о результате, на основе html forms:
spoiler
<!DOCTYPE html>
<html>
<head>
    <title>Текстовая форма</title>
</head>
<body>
    <form action="script.php" method="post">
        <textarea name="text" rows="10" cols="50"></textarea>
        <br>
        <input type="submit" value="Отправить">
    </form>
</body>
</html>

Бакэнд на php это эта же самая страница, но в местах где нужно менять содержимое по логике (где нужно вывести сообщение о результате) ставится <?php ... код ... ?>. Вот пример сохранения введенного сообщения пользователем в файл, имя которого будет содержать номер сессии пользователя и время (timestamp, это сделано намеренно что бы показать проблему именования файла в данной задаче при многопользовательском доступе, если использовать просто timestamp, т.е. время в секундах, то несколько одновременно посланных сообщений заменят друг друга и останется только последнее, в приведенном примере эта проблема сохранится только для одного 'пользователя' т.е. сессии браузера - открытой страницы что даже локально сложно добиться, естественно правильно делать индекс со списком файлов но зачем, задача то простая):
spoiler
<?php
define("STOREPATH","/my_cool_file_database");

session_start();

if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["text"])) {
    // Получаем текст из POST запроса
    $text = $_POST["text"];
    
    // Создаем имя файла: session_id + _ + timestamp
    $filename = STOREPATH . "/" . session_id() . "_" . time() . ".txt";
    
    try {
        // Пытаемся записать файл
        if (file_put_contents($filename, $text) !== false) {
            echo "Успешно";
        } else {
            throw new Exception("Ошибка при записи файла");
        }
    } catch (Exception $e) {
        echo "Ошибка: " . $e->getMessage();
    }
} else {
    echo "Ошибка: Неверный запрос или отсутствуют данные";
}
?>


И соответственно скрипт удаления старых сообщений
spoiler
<?php
define("STOREPATH","/my_cool_file_database");
define("REMOVE_INTERVAL",3600); // интервал в секундах для старых сообщений

// Получаем все txt файлы из директории
foreach (glob(STOREPATH . "/*.txt") as $file) {
    // Извлекаем timestamp из имени файла
    if (preg_match('/_([0-9]+(?:\.[0-9]+)?)\.txt$/', $file, $matches)) {
        $fileTimestamp = (int)$matches[1];
        
        // Если файл старше часа - удаляем
        if (time() - $fileTimestamp > REMOVE_INTERVAL) {
            unlink($file);
        }
    }
}
?>

Само собой права доступа на каталог должны быть выставлены корректно, никаких ошибок не логируется.

Никаких лимитов, никакой авторизации и защиты от ддос... в данном примере любой пользователь может забить содержимое диска на сервере, отсылая бессмысленно гиганские запросы с пустым текстом (пробелы например, они буду эффективно сжаты браузером)
Ответ написан
Afranius
@Afranius
Из говорящих дольше живут те, что говорят меньше.
Это даже не просто, а очень просто. Вопрос только в правах доступа.
Передаёте содержимое формы переменной и на PHP (например) сохраняете её в файл.

И тут возникает сразу несколько вопросов:
1. Получается, php скрипт должен иметь права доступа к файловой системе на запись.
2. Злоумышленник сможет переполнить файловую систему банальным Lorem Ipsum - может имеет смысл ограничить количество таких файлов и их объём? В конце концов отправлять данные через GET/POST не обязательно именно из Вашей формы...
3. Таску на удаление файла можно оставлять в БД, а удаление будет производить другой скрипт - хотя бы и из cron - просто надо в таску записывать дату-время создания файла, а второй скрипт будет проверять, прошёл час или нет.
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Если вы используете хранилище типа S3 то там есть опция - при сохранении файла (объекта в терминологии
S3), можно задать атрибут Time-To-Live

Вся прочая автоматизация - поверх обычных файловых систем требует чтоб был отдельный процесс
который по плану (раз в минуту например) удаляет все файлы по дате создания. Это cron, про который
выше уже сказали или это какой-нибудь quartz в парадигме Spring-Java-разработок например.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы