Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как создать текстовый файл через форму, поместить в него информацию и поместить содержимое файла на страницу?

Артем Р Профи (603), на голосовании 3 года назад
Добрый день.
Помогите, если можете. Нужно вывести содержимое текстового файла на страницу. Самому опыта не хватает.
Важный момент! Файл должен создаваться исключительно через форму, в него должен помещаться заготовленный текст (содержимое переменной $str) и в конце выводиться на страницу при нажатии на "input".
Возможно ли это вообще?
```
<?php
error_reporting(-1);

if(!empty($_POST['new_file'])) {
header("Location: {$_SERVER['PHP_SELF']}");

$str = 'Привет, я новый файл!';

file_put_contents($_POST['new_file'].'.txt', $str);

}

?>
```

file_get_contents() - работает только в том случае, если я указываю конкретное имя файла.
Голосование за лучший ответ
dim565 Искусственный Интеллект (424764) 3 года назад
Здравствуйте. Вы правильно сделали создание файла, но если хотите выводить содержимое не сразу после создания, а после нажатия на кнопку, значит нужно как-то найти этот файл.

Можно выводить самый новый (по дате создания) или сохранять имя файла в cookie или сессию, вот пример:
< html>
< form method="POST">
< input name="new_file">
< input type="submit">
< /form>
< form method="POST">
< input type="submit" value="Вывести содержимое файла" name="read_file">
< /form>
< /html>

<?php
if(!empty($_POST['new_file'])) {
$str = 'Привет, я новый файл!';
file_put_contents($_POST['new_file'].'.txt', $str);
setcookie("filename", $_POST['new_file']);
}

else if(!empty($_POST['read_file'])) {
$filename = $_COOKIE['filename'] . '.txt'; // берем имя файла из cookie
echo file_get_contents($filename); // выводим содержимое
}

?>
Артем РПрофи (603) 3 года назад
Большое, Вам, спасибо за отклик и помощь всё работает. Я уже несколько дней не могу с этим разобраться ) Скажите, а можно сделать так чтобы переменная не перезаписывалась (извините не знаю как правильно сформулировать). В идеале мне нужно чтобы каждый новый файл добавлялся на страницу при этом старые файлы тоже оставались.

Я изменил значение переменной $str, теперь $str = $_POST['new_file'].

Хочу чтобы на странице было так, если ввожу арбуз - выводит арбуз, если ввожу яблоко - выводит яблоко, при этом арбуз тоже остаётся ). И так далее.
dim565 Искусственный Интеллект (424764) Вы хотите каждый раз создавать новый файл или добавлять новые данные в один файл?
Артем РПрофи (603) 3 года назад
Я хочу каждый раз создавать новый файл который не будет зависеть от других чтобы его можно было удалить в будущем и чтобы удаление одного или нескольких файлов не влияло на другие файлы.
В будущем это будет блок с товаром который нужно будет при необходимости удалить.
dim565 Искусственный Интеллект (424764) Может тогда сохранять файлы в отдельную папку, а для вывода получать список файлов через scandir(), в цикле проверять расширение, если оно txt показывать содержимое через file_get_contents()? P.S Если вы собираетесь делать что-нибудь похожее на интернет-магазин или файлов будет много, то правильней будет перейти на базу данных
Артем РПрофи (603) 3 года назад
По поводу базы данных я думал, но там совсем не разбираюсь хотя планирую освоить.

А вы не могли бы мне помочь с написанием функционала про отдельную папку, список, цикл?
dim565 Искусственный Интеллект (424764) Для записи в папку просто укажите ее имя перед файлом: file_put_contents('text_files' . '/' . $_POST['new_file'] . '.txt', $str); Здесь папка и скрипт php должны находиться в одной родительской папке Для вывода: $dir = 'text_files'; // имя папки для поиска txt $files = scandir($dir); // получаем список всех файлов (первые два элемента будут папки, но они не помешают т. к дальше проверяем по расширению) foreach ($files as $file) { // цикл по массиву $files, каждый новый элемент попадает в переменную $file if (strpos($file, '.txt') !== false) { // если имя содержит .txt echo file_get_contents($dir . '/' . $file) . ' '; // выводим содержимое } }
Артем РПрофи (603) 3 года назад
Класс! Большое спасибо, очень выручили.
dim565 Искусственный Интеллект (424764) пожалуйста
Артем РПрофи (603) 3 года назад
Можно ещё вас помучать?
Столкнулся со следующей проблемой. Если Закрыть страницу и открыть её, то всё что было ранее выведено на страницу исчезает. Появляется только когда нажимаю на < input name="read_file">.
Можно сделать так чтобы всё сохранялось и при включении страницы всё было на своих местах?
Артем РПрофи (603) 3 года назад
Я вроде бы разобрался.
Изменил условия, стало так - if(!empty($_POST['read_file']) || empty($_POST['read_file'])). Пока что работает)
Похожие вопросы