Выбор файла для редактирования
У меня есть приложение, которое используется для редактирования файлов .txt. приложение состоит из 3 частей
Отображает содержимое папки с файлами, подлежащими редактированию (каждый файл является ссылкой, при нажатии на которую он открывается в режиме редактирования).
Запись в файл.
Сохранение в файл.
Части 2 и 3 я завершил с помощью функций fopen и fwrite, что было не слишком сложно. часть, в которой мне нужна помощь, - это часть первая, в настоящее время я открываю файл с помощью ввод его местоположения и имени файла, например, в файле php, где у меня есть функция отображения и функция сохранения:
$relPath = 'file_to_edit.txt';
$fileHandle = fopen($relPath, 'r') or die("Failed to open file $relPath ! ");
Но я хочу, чтобы файл открывался в режиме редактирования при нажатии, а не каждый раз вводил имя файла.
$directory = 'folder_name';
if ($handle = opendir($directory. '/')){
echo 'Lookong inside \''.$directory.'\'<br><br>';
while ($file = readdir($handle)) {
if($file !='.' && $file!='..'){
echo '<a href="'.$directory.'/'.$file.'">'.$file.'<a><br>';
}
}
}
Это код, который ti использует для отображения списка файлов, находящихся в указанной папке. Кто-нибудь может дать мне несколько советов, как я могу этого добиться? любая помощь будет очень признательна.
1 answers
- Для получения содержимого файла используйте file_get_contents();
- Чтобы поместить содержимое файла, используйте file_put_contents(); с флагом FILE_APPEND для редактирования.
- Для получения списка файлов в каталоге вы можете использовать DirectoryIterator
Пример:
foreach (new DirectoryIterator('PATH/') as $fileInfo) {
if($fileInfo->isDot()) continue;
echo $fileInfo->getFilename() . "<br>\n";
}
Если вы не хотите указывать имена файлов, вы можете поместить прочитанные файлы после того, как они будут помещены в базу данных, назначить им идентификаторы и использовать ссылки с параметром id. Другое решение - хранить файлы в массиве сеансов и назначать ключи для них. Когда вы хотите получить файл, вам просто нужно указать ключ вместо полного имени файла и пути.
Пример с $_SESSION
$file_arr = array();
foreach (new DirectoryIterator('PATH/') as $fileInfo) {
if($fileInfo->isDot()) continue;
$file_arr[] = array("path" => $fileInfo->getPathname(), 'name' => $fileInfo->getFilename());
}
$_SESSION['files'] = $file_arr;
Затем в представлении вы можете использовать
foreach($_SESSION['files'] as $k=>$file)
{
echo "<a href='edit.php?f=".$k."'>'.$file['name'].'</a>";
}
И edit.php
$file = (int)$_GET['f'];
if(array_key_exits($file, $_SESSION['files'])
{
$fileInfo = $_SESSION[$file'];
//in file info you have now $fileInfo['path'] $fileInfo['name']
}