Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: удаление не пустого каталога
Покинул форум
Сообщений всего: 17
Дата рег-ции: Авг. 2010
Помог: 0 раз(а)
в общем, идея такова:
цель - создать каталог и записать в него изображения, но сначала нужно проверить есть ли такой каталог, и если он присутствует - удалить со всем содержимым.
в php я ток начинаю разбираться(переделываю платный скрипт под свои нужды, а то там много чего мне не хватает), так что - вот что нарыл в инете и вообще... 1 вариант, который нашел..с переделками типа))
я походу тут везде ошибок наделал( короче... в обоих случаях пишет что не могу удалить каталог ибо он не пустой, ну и создать тоже не может, ибо каталог создан...
просьба указать на ошибку...ну и какой вариант применить)
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
4ygo пишет:
Я походу тут везде ошибок наделал( короче... в обоих случаях пишет что не могу удалить каталог ибо он не пустой, ну и создать тоже не может, ибо каталог создан
Используемые вами функции предоставляют правильный способ рекурсивного удаления каталогов который должен успешно работать - однако причиной проблемы может быть указание неправильного относительного файлового пути по отношению к рабочей директории или отсутствие требуемых прав доступа Причиной недостатка уровня доступа может быть ситуация когда файлы располагаемые на вашем web-ресурсе принадлежат разным пользователям - например отдельно вашему системному пользователю под именем которого вы загружаете файлы на FTP-сервер - и отдельно пользователю от имени которого исполняются PHP-скрипты такому как www-data
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
4ygo
Отправлено: 17 Августа, 2010 - 08:41:30
Новичок
Покинул форум
Сообщений всего: 17
Дата рег-ции: Авг. 2010
Помог: 0 раз(а)
JustUserR пишет:
причиной проблемы может быть указание неправильного относительного файлового пути по отношению к рабочей директории или отсутствие требуемых прав доступа Причиной недостатка уровня доступа может быть ситуация когда файлы располагаемые на вашем web-ресурсе принадлежат разным пользователям
1)про пользователей - проверю. Файлы в каталоге лежат с атрибутом 666. Поставлю 777 и попробую, если причина в этом, должно заработать. Только как с этим бороться потом - не понятно...но сначала проверю(вчера еще хотел так сделать)хотя, мы же используем
так что не понимаю. а если владелец я, а www-data не может даже менять атрибуты, какой атрибут должен быть у файла, чтобы ОН смог менять атрибуты?
2)про относительный путь. $fotodir="./datafoto", и соответственно, когда
получается путь, типа "./datafoto/1001289". Может нужно прописывать chdir? или я не догоняю что такое рабочая директория?) или я не правильно задаю переменную?(я в синтаксисе не уверен совсем) мб надо типа как ниже?
самое страшное то, что это не самая важная проблема( ладно - бум решать по порядку!
а вообще мне вроде бы нравится второй мой вариант(вроде попроще). может я допустил ошибку в логике или не правильно написал что-то(хотя ошибок вроде не выдает,но хз). я писал когда, брал строки из разных примеров, и возможно не правильно их соединил((
каталог по $fotodir у меня создается(если он ранее не был создан)
посмотрите плиз на правильность кода. я совсем не уверен что он правильно собран
Slavenin
Отправлено: 17 Августа, 2010 - 14:02:34
Посетитель
Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010 Откуда: Тверь
Помог: 4 раз(а)
итак, первое, у тебя отсутвовала последняя закрывающая скобка в конце. Дальше, объявление функции внутри условия возможно но не желательно, она тебя будет переобъявляться каждый раз если вдруг ты засунешь условие в цикл, поэтому фнкции надо объявлять вне каких либо условий и циклов. Скачай себе редактор php и юзай его, я, например пользуюсь pspad, самое большое его достоинство что он умеет подсвечивать парные скобки, в нем есть русский язык и полностью настраиваемый синтаксис. В месте где у тебя функция объявляется должен следовать ее вызов. Старайся не делать одинаковые и/или бессмысленные имена функций и переменных, сам потом запутаешься. Ну и код, наверно, должен выглядеть как-то так:
Да и старайся не использовать символ @ стоящий перед функцией он блокирует сообщения об ошибках исходящие от нее. Старайся писать код более структурно, чтоб самому было понятно
Slavenin спасибо за помощь!
вот почему все описания на обучающих сайтах делаются так "отстраненно"? писали бы :
1)имеем код такой-то. (комментами что и где он делает)
2)задача - такая-то и такая-то
3)используем такие-то функции
4)смотрите как и куда что вставляем
а тут тратишь на удаление какого-то каталога сутки, и все эти сутки чуствуешь себя полным дауном)
//функция определена. можно вставять в код. ниже -определение параметров(удаляемый каталог) и вызов функции
$deldir="$fotodir/$id";//задаем переменной нужный нам каталог. можно путь в явном виде. в данном примере подразумевается что $fotodir и $id заданы раньше:)
if(file_exists($deldir)){dd($deldir);}//если находим его - удаляем
удаляет каталог,файлы в нем и ВСЕ подкаталоги - надеюсь кому-нить поможет
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
4ygo пишет:
chmod($delfile,0777); //выстави атрибут на файл/каталог 777,т.е. полный доступ
Несмотря на то что в большом числе PHP-функций которые осуществляют рекурсивное удаления дерева папок используется функция chmod - но на самом деле ее применение не дает никакого дополнительного эффекта по следующим причинами Во-первых если указанных ресурс в файловой системе принаждежит пользователю отличному от эффективного владельца данного процесса - то изменение прав доступа не будет происходить вообще вне зависимости от дополнительных условий наличия доступа к родительским ресурсам Во-вторых возможность удаления файлов из папки обеспечивается ее правом на запись для текущего пользователя - если оно имеется то удаление всех файлов их данной директории будет производиться вне зависимости от их параметров - поскольку происходит удаление только жесткой ссылки а не реального объекта Что касается удаления вложенных директорий то для них такая схема напрямую неприменима - дело в том каждая папка содержит специальный файл <точка> ссылающийся на нее саму - и соответственно если вложенная директория принадлежит другому пользователю то она содержит и файл <точка> находящийся также в его владении - удалит файл невозможно поскольку нет прав на содержащую его директорию а удалить ее саму нельзя поскольку она содержит вложенный файл
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.