Просмотр полной версии : Создание папок с порядковым номером
Здравствуйте! Как можно на PHP создавать папки, имя которым автоматически присваивается, как порядковый номер 1, 2, 3 и т.д., в зависимости от номера предыдущей папки (+1).
Как вариант...
- Выбрать папки типа myfolder*.*
- Найти максимальное число, отсекая myfolder из имени
- Добавить инкремент
- Создать новую папку с именем myfolderN
Sonya,
и как же вы потом разбираться будете кому какая папка принадлежит?
С ней параллельно будет создаваться запись в текстовом файле.
Sonya,
вы изобретаете костыль.
Я же написала параллельно, а не для того, чтобы связывать папку с записью, у папки и записи разные задачи, но они, таким образом, опосредованно связаны.
Файловая система не такая и "легкая" как кажется, да если учесть, что таким каталогом еще и управлять надо... Поэтому, уже "создавать папки с последовательной нумерацией" наводит на мысль, что что-то не так. Что же такого содержится в ваших папках?
В неё копируется 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);
В неё копируется PHP файл, вызов которого происходит из программы (exe) на ПО пользователя
Ну я ваш пользователь, бог с ним, у меня даже есть какое-то ПО. Каким образом это ПО узнает, что надо открыть папку name1023, а не иную?
И что для каждого пользователя/ПО свой индивидуальный РНР скрипт чем-то отличающийся?
Файл 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);
Вроде ищет, прибавляет, создает, почему не работает?
Вообще то достаточно glob с параметром GLOB_ONLYDIR.
Не создает, значит нет прав на запись у родительского каталога, проверьте.
А вообще, кошмар какой-то.
Создает только одну папку, далее выдает ошибку, что папка уже есть.
Вообще-то, по уму, сценарий должен быть один, результат только может быть различным для каждого случая, то есть задаваться параметром. Другими словами скрипт-диспетчер. Плодить папки для запроса различных скриптов, это нонсенс.
Если ошибка уже создана, то либо скрипт не то выполняет, либо это и есть проблема "костыля вашего, то есть создание папок ...", так как у вас эта задача подпадает под "многопользовательский доступ". И вряд ли это у вас учитывается, если при тесте вы ошибок из-за этого вряд ли получите, то в реальном режиме скорее всего их не избежать.
Ошибку нашла, сейчас работает.
"Вообще-то, по уму, сценарий должен быть один, результат только может быть различным для каждого случая, то есть задаваться параметром. Другими словами скрипт-диспетчер." - именно так он реализован в программе. В папках, как раз сохраняются параметры, к файлу PHP, который в нее скопирован, своеобразный config.ini в txt формате, который задается пользователем (авторизированным), который создает эту папку, все остальные только видят результат работы, но не могут менять параметры или файл.
В папках, как раз сохраняются параметры, к файлу PHP, который в нее скопирован, своеобразный config.ini в txt формате
Используйте для этого базу. Ну вы же должны прекрасно понимать, что в любой момент времени на создание папки могут обратиться N пользователей, а у вас получается, что папки просто банально нумеруются, а значит любой номер может быть потенциально уже занят.
Безусловно, БД лучше, хотя здесь, для пользователя, как раз нет фиксированной папки, если папка, например 10 занята, то создается папка 11.
например 10 занята, то создается папка 11
Это как? А ничего, что для каждого пользователя создает свой РНР процесс?
Впрочем дело хозяйское, поступайте как знаете.
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot