Полюбите код! И он полюбит Вас!

Последние комментарии:

Марат : Рад, что помог! далее

2018-05-01 14:39:38



Serge : Коротко и ясно!!! Молодца!!! я, даже не поленился, зарегился и далее

2018-05-01 12:36:15



Марат : Андрей - там может быть столько нюансов... А вообще, мы далее

2018-03-11 13:23:36



Андрей : Попробовал поставить версию 1.2, но что-то не работает. далее

2018-03-11 13:03:52



Марат : Для этого и делали! Рад, что помог! Приходите ещё! далее

2018-02-16 20:31:51



Это интересно:

Рейтинги страниц.

Вы здесь - Главная - PHP - Движок

Создание папки php

Список папок,добавление папки, сортировка

Сегодня мы разберем создание папок и создание списка папок. В самом начале давайте разберём порядок разбора тем, простите за тавтологию.

Мы поговорим в начале о функциях, которые решат верхние две задачки. А уже потом перейдем к самом интересному – применении в нашем движке на файлах.

1. Как создать папку

2. Получить список папок

3. Элемент движка, создание папки + редактирование списка папок, сортировка папок по алфавиту, условия создания папок.

1.

Как создать папку?

Для создания папки будем использовать функцию «mkdir». По умолчанию функция «mkdir» создает с правами 0777, если вам нужно поставить свои права, то нужно использовать такую конструкцию:

mkdir("путь_до_папки/dir", 0700);

Что нужно занть при работе с данной функцией? ТО, что она возвращает при успешной работе TRUE и иначе FALSE, у функции есть 4 параметра, о которых мы, здесь не будем углубляться – об одном из параметров мы сказали это «mode» - права(0700).

Для нахождения абсолютного пути к папки используйте конструкцию:

$home = $_SERVER['DOCUMENT_ROOT"]."/";

Что означает – корневцю папку. Соотвественно «путь_до_папки» - это путь от корневой папки.

Итого у вас должно получиться

$put = $home . "путь_до_папки/название_создаваемой_папки"; //путь до папки

mkdir($put, 0700);

Для того, чтобы не создавать множество папок с одинаковыми названиями проверяйте есть ли папка с таким названием

if (file_exists($put))

{

echo "Папка уже существует";

}

else

{

тут конструкция создания папки

}

2.

Получить список папок?

Мы уже касались темы получения списка папок, поэтому вам нужно почитать здесь. Там касается вопроса получения файлов, но она применима и для получения списка папок. Для того чтобы функция выбирала папки, в ней нужно поставить условие и фильтры, чтобы отбрасывала файлы, а оставляла только папки.

3.

Создание папки + редактирование списка папок

Мы плавно подходим к созданию собственного движка на файлах – это моя идея «фикс», вот хочется и хоть ты тресни! И мы уже множество функция описали для реализации собственно движка. Например регистрация , авторизация, вход в админ панель .

Конечно, некоторые скрипты ещё немного недоработаны и сырые, но ведь я вообще первый раз все это делаю, поэтому - скидка 99%.

Вернемся к нашим баранам, вернее к созданию и редактированию папок.

3.а

Для чего вообще нужен данный скрипт. Например, у вас есть панель администрирования, и вы хотите создать страницу, и хотите её сделать в новой папке. Для того, чтобы каждый раз не открывать проводник, создавать новую папку, кидать её на сервер, потом её вносить в какой-то список, который будет показывать существующие папки. В общем для того, чтобы облегчить нашу жизнь… Вы, наверное, не совсем понимаете, о чем идет речь и кстати будем использовать не только php, но и javascript. Давайте я вам сделаю скриншот, чтобы было понятно:

Мы совместим два скрина:

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

Создание папки php

Погнали! Дорога будет длинною!

Начнем с алгоритма!

Мы можем взять функцию, о которой шла речь ранее, имеется ввиду пункт №2. Но дело в том, что там придется много отфильтровывать, потому, что в список попадут не только файлы, но и все названия папок, которые вообще существуют – это нам не подходит!

Мы будем создавать список папок на txt файле и для создания папки будем использовать функцию «mkdir»

Папки будет записываться в файл по принципу:

1.Для папки в корневой

Новая_папка:: ::

2.И вложенная папка, двойные двоеточия нужны для сортировки, далее будет понятно.

Новая_папка::Название_вложенной_папки::

И вообще давайте полностью напишем алгоритм.

Проверим на длину названия папки (посчитаем количество символов в слове) и сделаем условие не меньше 5 и не больше 15.

Здесь обращаю ваше внимание на то, что функция str_split не работает с кириллицей, поэтому переменная $new_folder(название новой папки ) уже перегнали в латиницу.

Ну и здесь совсем просто думаю, что вы и так поняли, перегнали нашу папку в массив и посчитали количество ячеек – это первая строка, ну и далее сделаем соответствующие условия.

$new_folder_count = count(str_split($new_folder));

if ($new_folder_count < 5)

{

echo 'Папка не может быть меньше 5 букв';

}

else

{

if ($new_folder_count > 15)

{

echo 'Папка не может быть больше 15 букв';

}

else

{

3.б

Далее сделаем двойную проверку, сперва проверим есть совпадения папки и массива (списка папок), а потом новую папку на совпадение в этом же массиве.

Для чего нужна двойная проверка!? Двух названий папок не может быть! И малая часть папки не может быть частью большой папки иначе скрипт не будет работать.

Получим данные в переменную

$file_line = @file_get_contents('folders.txt');

Все буквы сделаем строчными

$file_line_strtolower = strtolower($file_line);

Далее из нашего списка нужно сделать одну строку, заменим все двойные двоеточия(::) и переносы сроки(\n), на запятую, и потом разобьём данную строку(explode) по запятой на массив.

И далее будем перебирать совпадение(strops) новой папки к массиву. Если совпадение найдено, то создаем переменную $true. И выводим сообщение если такая переменная существует.

$zamena = preg_replace("/::/", ',', $file_line_strtolower);

$zamena = preg_replace("/\n/", ',', $zamena);

$new_expl = explode(',', $zamena);

for ($i=0; $i < count($new_expl); $i++)

{

if (@strpos($new_folder, $new_expl[$i]) !== false) 

{

$true = '1';

}

}

if (isset($true)) 

{

echo 'Такая папка существует<br> или вы используете часть папки для создания новой папки.';

}

Далее проверяем в обратную сторону

if (strpos($file_line_strtolower, $new_folder) == false)

{

С проверкой в файле наличия новаой нашей папки проверили, теперь нужно проверить, а есть ли такая папке в реальности, мало ли что. Может, как в моем случае вы собираетесь использовать данный скрипт для использования уже на сайте, где есть уже множество папок.

Возьмем абсолютный путь до папки и проверим есть ли она..(file_exists)

$home = $_SERVER['DOCUMENT_ROOT']."/";

if (empty($poisk)) 

{

$put =$home.$new_folder; // echo $put;

}

else

{

$put =$home.$poisk.'/'.$new_folder; // echo $put;

}

if (file_exists($put))

{

echo "Папка уже существует";

else 

{

Далее создаем папку с правами 0777

if (@mkdir($put, 0777, true)) 

{

echo "Папка  сделана";

4.

Далее будет еще больше кода и я не буду на всем подробно останавливаться, а пробегусь лишь быстренько. (ну насколько это получится, конечно)

Получим данные из файла в массив

$file = @file('folders.txt');

Запись о новой папке .

Далее будем создавать собственно запись о новой папке в наш файл.

У нас будет три варианта создания записи о новой папке…

1.Это создание папки в корневой папке вида :

Новая папка:: ::

Если $poisk пуста, имеется ввиду в выборе папок на верхнем скриншоте мы выбрали в первом столбце пустоту. Добавим к основному массиву($file) запись ($new_folder.":: ::\n");)

Далее отсортируем все в нашем массиве(sort) и поставили флаги, для того, чтобы не обращать внимание на регистр. Далее превратим наш массив в строку(implode) и собственно записшем в наш файл(file_put_contents)

if(empty($poisk))//ЕСЛИ НУЖНО СДЕЛАТЬ ЗАПИСЬ О НОВОЙ ПАПКЕ ПЕРВОГО УРОВНЯ

{

array_push($file, $new_folder.":: ::\n");//СОРТИРУЕМ ВНЕ ЗАВИСИМОСТИ ОТ РЕГИСТРА.

sort($file, SORT_NATURAL | SORT_FLAG_CASE);//print_r($file);//echo '
';

$end = implode("", $file);//echo $end;

file_put_contents('folders.txt', $end);

}

2.Для папок второго уровня.

И здесь будет два алгоритма, которые чуть-чуть будут отличаться..

2.а.Когда папка в корневой папке пустая и вид папки будет такой:

Папка_уже_существует:: ::

Вначале для двух вариантов проверим выбрана ли в первом столбце папка(вернее мы это уже сделали чуть выше(if(empty($poisk))) и перед продолжением ставим "else").

Будем создавать папку второго уровня и впишем её между двумя двоеточиями.

$poisk - это искомая папка в списке, разложим массив(список) на строки и в каждой строке будем искать нашу папку, чтобы сделать эту новую запись о новой папке.

for ($i=0; $i < count($file); $i++) { //ДЛЯ ПАПОК ВТОРОГО УРОВНЯ

$line = $file[$i];

if (@strpos($line, $poisk) !== false) 

{

Разобьем найденную строку в массив по разделителю двойных двоеточий(::)

$new_line = explode('::', $line);//ЕСЛИ НЕТ ПАПКИ  В ПАПКЕ Т.Е.$new_line[1]  -ПУСТА

$peace = trim($new_line[1]);

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

if(empty($peace))

Далее соберем новую строку, у нас в $new_line[0] лежит название существующей папки прибавим к ней новую папку, после чего заменим(preg_replace) старую строку на новую и запишем в наш файл. Поскольку мы не нарушали порядок папок, то и сортировать здесь не будем!

$line_new = $new_line[0].'::'.$new_folder."::\n";

$end = preg_replace("/$line/", $line_new, $file_line);

$array = explode("\n", $end);

file_put_contents('folders.txt', $end);

2.б.Корневая папка существует, и папка( либо папки уже) внутри есть.(папки второго уровня записываем через запятую(это будет нашим вторым разделителем.))

Папка_уже_существует::Папка_втрого_уровня,_существует::

Чем вариант 2.a. отличается от 2.б.!? Лишь тем, что если папка(папки второго уровня) уже существует, к переменной добавляем нашу новую папку $new_folder, далее разобьёмся её в массив(explode), далее отсортируем(sort). Ну и далее тоже самое, что и в варианте 2.a…

$new_line[1] = $new_line[1].','.$new_folder;//ЕСЛИ ЕСТЬ ПАПКА  В ПАПКЕ Т.Е.$new_line[1]  - НЕ ПУСТА

$array = explode(',', $new_line[1]);

sort($array, SORT_NATURAL | SORT_FLAG_CASE);//print_r($array);

$text = implode(',', $array);//echo $text;

$line_new = $new_line[0].'::'.$text."::\n";

$end = preg_replace("/$line/", $line_new, $file_line);

file_put_contents('folders.txt', $end);

5.

Да и собственно забыл самый верх нашего скрипта, функцию транслита + javascript, друзья, думаю, что далее вам придется разбираться самостоятельно, а то, что-то я реально притомился все это писать…

$home = $_SERVER['DOCUMENT_ROOT']."/";

$file = @file('folders.txt');

$file_line = @file_get_contents('folders.txt');

$poisk =  $_POST['street'];  

$poisk = trim($poisk); 

$new_folder = trim($_POST['new_folder_post']);//$new_folder = 'Новая папка';

function translit($str)

{

$tr = array(

"А"=>"A","Б"=>"B","В"=>"V","Г"=>"G",

"Д"=>"D","Е"=>"E","Ж"=>"J","З"=>"Z","И"=>"I",

"Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",

"О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",

"У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",

"Ш"=>"SH","Щ"=>"SCH","Ъ"=>"","Ы"=>"YI","Ь"=>"",

"Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b",

"в"=>"v","г"=>"g","д"=>"d","е"=>"e","ё"=>"e","ж"=>"j",

"з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",

"м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",

"с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",

"ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",

"ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",

"."=>"_","   "=>"_","  "=>"_"," "=>"_","?"=>"_","/"=>"_","\"=>"_",

"*"=>"_",":"=>"_","\""=>"_","<"=>"_",

">"=>"_","|"=>"_","!"=>"","@"=>"_",";"=>"_","%"=>"_",":"=>"_",

"("=>"_",")"=>"_","-"=>"_","+"=>"_","="=>"_",","=>"_",'&'=>"_"

);

return strtr($str,$tr);

}

Далее javascript…

<script type="text/javascript">

var aHouseValues = new Array(

"",

<?

$folders = file_get_contents('folders.txt');

$part_folders = explode('::',$folders);

for ($i = 0; $i < count($part_folders); $i++) {

$i = $i +1;

echo  '",'.$part_folders[$i] .'",';

?>

""

);

// ф-ция, возвращающая массив 

function getHouseValuesByStreet(index){

var sHouseValues = aHouseValues[index];

return sHouseValues.split(","); // преобразуем строку в массив 

}

// ф-ция, выводящая динамически список 

function MkHouseValues(index){

var aCurrHouseValues = getHouseValuesByStreet(index);

var nCurrHouseValuesCnt = aCurrHouseValues.length;

var oHouseList = document.forms["address"].elements["house"];

var oHouseListOptionsCnt = oHouseList.options.length;

oHouseList.length = 0; // удаляем все элементы из списка папок

for (i = 0; i < nCurrHouseValuesCnt; i++){

// далее мы добавляем необходимые папки в список

if (document.createElement){

var newHouseListOption = document.createElement("OPTION");

newHouseListOption.text = aCurrHouseValues[i];

newHouseListOption.value = aCurrHouseValues[i];

// тут мы используем для добавления элемента либо метод IE, либо DOM

(oHouseList.options.add) ? oHouseList.options.add(newHouseListOption) : oHouseList.add(newHouseListOption, null);

}else{

// для NN3.x-4.x

oHouseList.options[i] = new Option(aCurrHouseValues[i], aCurrHouseValues[i], false, false);

}

}

}

// инициируем изменение элементов в списке городов, в зависимости от текущей страны

MkHouseValues(document.forms["address"].elements["street"].selectedIndex);

//-->

</script>

И далее форма…

<form method="post"  name="address" action="" class="form" enctype="multipart/form-data" accept-charset="1251">

<table width="1280" >

<tbody> 

<tr>

    <td class="table">имя папки:</td>

    <td class="table_2">

        <select name="street" onChange="MkHouseValues(this.selectedIndex)">

        <option></option>

<?

$folders = file_get_contents('folders.txt');

$part_folders = explode('::',$folders);

for ($i = 0; $i < count($part_folders); $i++) {

    echo "<option>" . $part_folders[$i]. "</option>" . "<br />\n";

    $i = $i +1;     

?>

        </select>

        &nbsp; имя папки 1:

        <select name="house">

        <option></option>

        </select></td>

</tr>  

<tr>

    <td class="table">Папка</td>

    <td class="table_2"><input type="text" name="new_folder_post" placeholder="Введите текст"></td>  

</tr>

<tr>

    <td class="table"> </td>

    <td class="table_2"><button type="submit" name="submit">ОТПРАВИТЬ</button></td>  

</tr>

</tbody>

 

</table>

</form> 

Пример работы скрипта : здесь

Всего кода стало многовато и мы весь код, собранный здесь повторять не будем, а вы его скопировать можете на отдельной странице…

Скопировать коды здесь.

Понравилась статья!? Не стесняйся – поделись ссылкой!

И!

Пожалуйста! Если вам не трудно - прокомментируйте то, что вы прочитали! Вам понравилось, или не понравилось! Напишите, какие мысли возникли у вас, и это бесплатно для вас, но очень ценно для нас!!! Всё, что вы здесь видите - это написано для вас! Никаким другим образом мы не можем понять вашу реакцию. Может, что-то стоит добавить или наоборот убрать. Либо, что-то стоило изменить...

P.S.

25 октября 2017

Мы запустили подписку на новости по емайлу, как только выходит новая статья, то будет отправлено сообщение на почту, что вышла новая статья!

Почему стоит подписаться на наши новости!?

Расскажу историю, вчера искал ответ на один из вопросов (конечно, я могу и сам написать, но чаще всего, вначале, ищу в интернете, может есть готовое решение…) и было множество вариантов, которые были описаны, но ни одного, с примерами! И мало того, что они предлагают решения, которые непонятно как реализовывать, особенно новичкам, у которых больше вопросов, чем ответов. Так они еще и не работают!

У нас же, на сайте – только рабочие проверенные скрипты! Полностью с описанием и с примерами! И реализовать может человек с нулевыми знаниями!

Мы есть здесь:

Проголосовать за статью!
  С 24 сентября мы запускаем новый скрипт в тестовом режиме (только свои скрипты)
  Вы можете проголосовать за понравившуюся статью.

  Средняя оценка 5 проголосовало 1
    


Просмотров 1256

Друзья!

Для того, чтобы вы получили бесплатную информацию, мы потратили и время и деньги!

Мы существуем от кликов по рекламе!

Если вы не нашли подходящего блока объявлений, то вы еще можете помочь проекту!

Не стесняйтесь!

Даже самая маленькая сумма будет употреблена на продвижение и улучшение проекта!

Заранее благодарим Вас!

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

Для отображения аватара после отправки сообщения, необходимо быть зарегистрированным в Граватаре.



Комментарии

Комментариев пока нет.

* Обязательные поля
(Не публикуется)
 
Жирный Курсив Подчеркнутый Перечеркнутый Степень Индекс Код PHP Код Кавычки Вставить линию Вставить маркированный список Вставить нумерованный список Вставить ссылку Вставить e-mail Вставить изображение Вставить видео
 
Улыбка Печаль Удивление Смех Злость Язык Возмущение Ухмылка Подмигнуть Испуг Круто Скука Смущение Несерьёзно Шокирован
 
5000
Напишите слово грот наоборот.
 
(введите ответ)
 
Уведомлять о новых коментариях по почте.
 

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

Все дела сделаны!

Теперь можно и поиграть!

Понравилась игра!? Растфнуть на весь экран

Улучши поведенческий фактор на своём сайте.

Забери код здесь

Пишем полную инструкцию о пользовании ruweb.net + DirectAdmin

RuWeb.net - гибкий хостинг
Индекс цитирования