Я начал небольшой проект, пытаясь сделать текстовый текстовый редактор, он прошел хорошо, пока система не начала перезаписывать файлы и не добавляла лишние места. У меня есть один файл с именем editor.php, где все файлы загружаются, сохраняются и редактируются.
Итак, это открытие/закрытие файлов:
<?php
if(isset($_POST['new'])){
$filer = substr(md5(microtime()),rand(0,26),6);
$file_create = $filer.".txt";
$handle = fopen("files/".$file_create,"w");
fclose($handle);
header("Location: editor.php?e=".$filer);
}
$file = $_GET['e'];
$file = basename($file);
$filename = "files/".$file.".txt";
$file_get = file_get_contents($filename);
if(isset($_POST['save'])){
file_put_contents($filename, $_POST['text']);
}
?>
далее вниз по странице У меня это в <textarea>
:
<?php
echo $file_content;
?>
Это использует строку из file_get_contents();
Но когда я сохраняю, ничего не происходит, на самом деле он удаляет файл, когда я загружаю файл, есть восемь пробелов, но ничего больше.
Я знаю, что есть еще один способ сделать это с помощью fopen()
и если кто-то может дать мне способ использовать это, это будет очень признательно.
Посмотрите режимы файлов PHP: http://php.net/manual/en/function.fopen.php
Если вы открываете все свои файлы с помощью функции fopen()
в режиме w
ваши файлы усекаются по мере их открытия. Так работает режим w
. Попробуйте использовать a+
или c+
с помощью функции fopen()
.
РЕДАКТИРОВАТЬ
Кроме того, file_put_contents()
также перезапишет содержимое файла, если вы не установите флаг FILE_APPEND
, например file_put_contents($file, $data, FILE_APPEND)
.
Вы должны проверить, действительно ли в $ _POST ['text'] есть контент.
if(isset($_GET['e'])){
$file = $_GET['e'];
$file = basename($file);
$filename = $_SERVER['DOCUMENT_ROOT']."/files/".$file.".txt";
$file_get = file_get_contents($filename);
if(isset($_POST['save'])){
if(!empty($_POST['text']) && isset($_POST['text']))
{
$length = strlen($_POST['text']);
if($length > 0)
file_put_contents($filename, trim($_POST['text']));
else
die("No content");
}
}
}
Также проверьте, существует ли файл и его записывается. Вы можете использовать функции chmod, mkdir и file_exists.
$file
. В противном случае удаленный злоумышленник может открыть и, возможно, даже отредактировать случайные файлы на вашем сервере ... Что если я открою сам скрипт PHP и вставлю в него вредоносный код?