Приветствую всех читателей моего блога, в этой статейке я кратко расскажу, как реализовать простенькую файловую систему.
Внимание, стоит сразу сказать, что данная реализация создана в целях ознакомления, без каких-либо особых проверок на безопасность, и без доработок и усложнений – то есть в том виде, в котором она представлена в данной статье, она подойдет только в целях личного использование, где вы будете уверены, что никакого зловредного файла – скрипта, загружено не будет!
Итак, давайте сначала определимся с функционалом и описанием системы, которая будет реализована:
- В корне сайта имеются 2 папки: folder1 и folder2;
- Копирование файлов из 1 папки в 2;
- Копирование файлов из 2 папки в 1;
- Перемещение файлов из 1 папки в 2;
- Перемещение файлов из 2 папки в 1;
- Создание новой папки в корне сайта;
- Поиск файлов по двум папкам;
Вот так вот выглядит система:
Давайте рассмотрим код::
<?php session_start(); if(isset($_POST['create_folder'])){ $rand_name = 'folder_'.rand(0,99); mkdir($rand_name, 0700); header('Location: /'); exit; } //copy if(isset($_POST['copy1']) OR isset($_POST['copy2'])){ $file = $_POST['file']; $_SESSION['result'] = '<center>'.$file.' успешно скопирован!</center>'; if(isset($_POST['copy1'])){ copy("folder1/".$file,"folder2/".$file); }else copy("folder2/".$file,"folder1/".$file); header('Location: /'); exit; } //move if(isset($_POST['move1']) OR isset($_POST['move2'])){ $file = $_POST['file']; $_SESSION['result'] = '<center>'.$file.' успешно перемещен!</center>'; if(isset($_POST['move1'])){ rename("folder1/".$file,"folder2/".$file); }else rename("folder2/".$file,"folder1/".$file); header('Location: http://laba1.ru'); exit; } echo '<div id="wrap"><div id="one"><form name="form_1" method="POST" action="/">'; // Выводим файлы из 1 папки if ($handle = opendir('folder1')){ echo "<br><p class='folder'>Файлы в папке 1:</p>"; while (false !== ($file = readdir($handle))) { if($file != '.' AND $file != '..'){ echo '<label><input type="radio" name="file" value="'.$file.'">'.$file.'</label><br>'; } }closedir($handle); } echo '<br><input name="move1" type="submit" value="Переместить"><input name="copy1" type="submit" value="Скопировать"><br></form></div>'; echo '<div id="two"><form name="form_2" method="POST" action="">'; // Выводим файлы из 2 папки if ($handle = opendir('folder2')){ echo "<br><p class='folder'>Файлы в папке 2:</p>"; while (false !== ($file = readdir($handle))) { if($file != '.' AND $file != '..'){ echo '<label><input type="radio" name="file" value="'.$file.'">'.$file.'</label><br>'; } }closedir($handle); } echo '<br><input name="move2" type="submit" value="Переместить"><input name="copy2" type="submit" value="Скопировать"><br></form></div></div>'; ?> <!DOCTYPE html> <html> <head> <meta http-equiv='Content-Type' content='text/html; charset=utf8'> </head> <body> <div id="result"> <form method="POST" action="/"> <input type="submit" name="create_folder" value="Создать папку"> <input type="text" name="search_string" placeholder="Поиск.."> <input type="submit" name="search" value="Поиск"> </form> <?php if(isset($_POST['search'])){ $search_string = $_POST['search_string']; $s_r = 0; if ($handle = opendir('folder1')){ while (false !== ($file = readdir($handle))) { if($file == $search_string){ echo $file.' - в папке 1<br>'; $s_r++; } }closedir($handle); } if ($handle = opendir('folder2')){ while (false !== ($file = readdir($handle))) { if($file == $search_string){ echo $file.' - в папке 2<br>'; $s_r++; } }closedir($handle); } if($s_r == 0) $_SESSION['result'] = 'Ничего не найдено!'; else echo '<br>Всего результатов поиска: '.$s_r; } if(isset($_SESSION['result'])){echo $_SESSION['result']; unset($_SESSION['result']);} ?> </div> </body> </html>
Самые главные функции, которые здесь используются
mkdir – функция, которая создает каталок, принимает 2 значения – название каталога и права доступа на него.
copy – копирует файл, первый параметр – это путь к файлу, который нужно скопировать, второй параметр – путь, куда скопировать.
rename – используется для перемещения файла, но на самом деле происходит переименовывание файла. Принимает два параметра – текущее имя (путь к файлу), новое имя (путь, куда нужно переместить).
Как работает копирование и перемещение
Имеются 4 кнопки, у которых имеются следующие имена:
move1 – перемещает из первой папки;
copy1 – копирует из первой папки;
move2 – перемещает из второй папки;
copy2 – копирует из второй папки;
Когда мы нажимает, например, скопировать, то проверяется, если нажата кнопка с именем copy1, то файл, взятый из input с именем file, копируется во вторую папку, иначе в первую.
<input type="radio" name="file" value="'.$file.'">'.$file.'</label>
Также, при выводе файлов из каталога имеется такое условие:
if($file != '.' AND $file != '..')
Оно необходимо для того, чтобы не выводить символы ‘точку” и “две точки” – это ссылки на текущий каталок и на каталок верхнего уровня соответственно.
Как работает поиск
Поиск производится по двум описанным выше папкам, исходя их введенного названия файла.
Если такой файл (группа файлов) имеется, то выводится его название, иначе в сессионную переменную – “$_SESSION[‘result’]” записывается сообщение о том, что ничего не найдено.
P.S. В эту же переменную (result) записываются и все остальные сообщения – подсказки.
$s_r – это переменная счетчик (она тоже выводится), она отвечает за количество найденных элементов и увеличивается на единицу при каждом найденном файле.
Если после прохода всех двух папок не будет найдено соответствующего поисковому запросу файла, то переменная соответственно будет равно 0 и выведется сообщение о том, что запрашиваемых файлов нет.
Вот, в принципе, и все что я хотел вам сегодня рассказать. Как и в уроках по javascript вы можете скачать исходные файлы статьи.
На этом все, до новых публикаций, удачи!
Скачать исходники файловой системы
Если вам нужна помощь в создании какого-либо функционала, сайта, сервиса, тестов или калькуляторов, то готов помочь, подробнее на странице услуг.