Файловая система на php с возможностью копирования, перемещения и поиска файлов.

Приветствую всех читателей моего блога, в этой статейке я кратко расскажу, как реализовать простенькую файловую систему.

Файловая система на php для двух папок.

Внимание, стоит сразу сказать, что данная реализация создана в целях ознакомления, без каких-либо особых проверок на безопасность, и без доработок и усложнений – то есть в том виде, в котором она представлена в данной статье, она подойдет только в целях личного использование, где вы будете уверены, что никакого зловредного файла – скрипта, загружено не будет!

Итак, давайте сначала определимся с функционалом и описанием системы, которая будет реализована:

  • В корне сайта имеются 2 папки: folder1 и folder2;
  • Копирование файлов из 1 папки в 2;
  • Копирование файлов из 2 папки в 1;
  • Перемещение файлов из 1 папки в 2;
  • Перемещение файлов из 2 папки в 1;
  • Создание новой папки в корне сайта;
  • Поиск файлов по двум папкам;

Вот так вот выглядит система:

Файловая система на php -копирование и перемещение файлов между папками.

Давайте рассмотрим код::

<?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 вы можете скачать исходные файлы статьи.

На этом все, до новых публикаций, удачи!

Скачать исходники файловой системы

Если вам нужна помощь в создании какого-либо функционала, сайта, сервиса, тестов или калькуляторов, то готов помочь, подробнее на странице услуг.