Вход

Просмотр полной версии : Создание папок с порядковым номером


Sonya
08.06.2017, 11:47
Здравствуйте! Как можно на PHP создавать папки, имя которым автоматически присваивается, как порядковый номер 1, 2, 3 и т.д., в зависимости от номера предыдущей папки (+1).

ksa
08.06.2017, 11:50
Как вариант...
- Выбрать папки типа myfolder*.*
- Найти максимальное число, отсекая myfolder из имени
- Добавить инкремент
- Создать новую папку с именем myfolderN

Sonya
08.06.2017, 11:53
А кодом можно?

laimas
08.06.2017, 12:00
Sonya,
и как же вы потом разбираться будете кому какая папка принадлежит?

Sonya
08.06.2017, 12:38
С ней параллельно будет создаваться запись в текстовом файле.

laimas
08.06.2017, 12:47
Sonya,
вы изобретаете костыль.

Sonya
08.06.2017, 13:00
Я же написала параллельно, а не для того, чтобы связывать папку с записью, у папки и записи разные задачи, но они, таким образом, опосредованно связаны.

laimas
08.06.2017, 13:10
Файловая система не такая и "легкая" как кажется, да если учесть, что таким каталогом еще и управлять надо... Поэтому, уже "создавать папки с последовательной нумерацией" наводит на мысль, что что-то не так. Что же такого содержится в ваших папках?

Sonya
08.06.2017, 13:21
В неё копируется PHP файл, вызов которого происходит из программы (exe) на ПО пользователя. Нашла такой код, но он не работает:
$dir = '1/';
$ff = scandir($dir);
$nums = array();
foreach($ff AS $f)
{
if($ff[0]!='.' && is_numeric($ff))$nums[] = (int)$f;
}
$dirname = $dir.(max($nums)+1);
mkdir($dirname);

laimas
08.06.2017, 13:30
В неё копируется PHP файл, вызов которого происходит из программы (exe) на ПО пользователя

Ну я ваш пользователь, бог с ним, у меня даже есть какое-то ПО. Каким образом это ПО узнает, что надо открыть папку name1023, а не иную?

И что для каждого пользователя/ПО свой индивидуальный РНР скрипт чем-то отличающийся?

Sonya
08.06.2017, 13:45
Файл PHP в каждой папке свой. Программа среагирует на Ваше действие в зависимости от Вами поставленной задачи. Не хочу углубляться в работу самой программы, у меня вопрос по серверной части. Что не так в этом коде:
$dir = '1/';
$ff = scandir($dir);
$nums = array();
foreach($ff AS $f)
{
if($ff[0]!='.' && is_numeric($ff))$nums[] = (int)$f;
}
$dirname = $dir.(max($nums)+1);
mkdir($dirname);

Вроде ищет, прибавляет, создает, почему не работает?

laimas
08.06.2017, 13:52
Вообще то достаточно glob с параметром GLOB_ONLYDIR.

Не создает, значит нет прав на запись у родительского каталога, проверьте.

А вообще, кошмар какой-то.

Sonya
08.06.2017, 13:56
Спасибо.

Sonya
08.06.2017, 15:01
Создает только одну папку, далее выдает ошибку, что папка уже есть.

laimas
08.06.2017, 15:14
Вообще-то, по уму, сценарий должен быть один, результат только может быть различным для каждого случая, то есть задаваться параметром. Другими словами скрипт-диспетчер. Плодить папки для запроса различных скриптов, это нонсенс.

Если ошибка уже создана, то либо скрипт не то выполняет, либо это и есть проблема "костыля вашего, то есть создание папок ...", так как у вас эта задача подпадает под "многопользовательский доступ". И вряд ли это у вас учитывается, если при тесте вы ошибок из-за этого вряд ли получите, то в реальном режиме скорее всего их не избежать.

Sonya
08.06.2017, 15:54
Ошибку нашла, сейчас работает.
"Вообще-то, по уму, сценарий должен быть один, результат только может быть различным для каждого случая, то есть задаваться параметром. Другими словами скрипт-диспетчер." - именно так он реализован в программе. В папках, как раз сохраняются параметры, к файлу PHP, который в нее скопирован, своеобразный config.ini в txt формате, который задается пользователем (авторизированным), который создает эту папку, все остальные только видят результат работы, но не могут менять параметры или файл.

laimas
08.06.2017, 16:23
В папках, как раз сохраняются параметры, к файлу PHP, который в нее скопирован, своеобразный config.ini в txt формате

Используйте для этого базу. Ну вы же должны прекрасно понимать, что в любой момент времени на создание папки могут обратиться N пользователей, а у вас получается, что папки просто банально нумеруются, а значит любой номер может быть потенциально уже занят.

Sonya
08.06.2017, 16:34
Безусловно, БД лучше, хотя здесь, для пользователя, как раз нет фиксированной папки, если папка, например 10 занята, то создается папка 11.

laimas
08.06.2017, 16:38
например 10 занята, то создается папка 11

Это как? А ничего, что для каждого пользователя создает свой РНР процесс?

Впрочем дело хозяйское, поступайте как знаете.