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

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

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



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

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

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

    *

    code

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