Файловая система на 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>
    <style>
    
    #wrap{
    width: 800px;
    margin: 0 auto;
    }
    
    #one,#two{
    width: 400px;
    float: left;
    }
    
    .folder{
    font-size: 22px;
    font-weight: bold;
    color: #FFF;
    background: #2794FF;
    width: 200px;
    padding: 10px;
    border-radius: 18px;
    text-align: center;
    }
    
    #result{
    clear: both;
    margin: 300px 0 0 400px;
    position: absolute;
    }
    
    </style>
    
    <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 вы можете скачать исходные файлы статьи.

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

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


    Хостинг, которым я пользуюсь: Good-Host


    Похожие статьи

    Оставить комментарий

    Ваш email не будет опубликован. Обязательные поля отмечены *

    *

    code

    Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>