| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Не работает функция |
| Автор: Turik 11.3.2007, 18:10 | ||
| Привет, всем форумчанам! Неработает! Почему.. немогу найти! Помогите!!!! За ранее благодарен! Функция:
Ощибка: Warning: rmdir(../img/menu/resto) [function.rmdir]: Directory not empty in C:\Program Files\Apache Group\Apache2\htdocs\www\wedding\site\library\functions.php on line 27 |
| Автор: mishaSL 11.3.2007, 19:20 | ||
Так должно работать:
|
| Автор: Render 11.3.2007, 19:32 | ||
|
| Автор: Turik 11.3.2007, 20:50 | ||||
Спосибо!!! Работает! Странно, Я пробовал : while((FALSE != ($file = readdir($dir))) Но неполучилос! А где моя ощибка? Я нехочу просто скопировать код, а понять! Спосибо, вам обоим ребята! |
| Автор: Prof_2000 11.3.2007, 21:08 | ||||||
Ну, код Render`a тебе, наверное, понятен... А вот твоя ошибка в том, что вот этой строкой
ты проверяешь, а не равен ли $file результату функции readdir($handle). В этом случае присвоения не происходит. Мало того, если директория непуста, то результат будет равен false, так как $file=0, а readdir($handle)!=0. таким образом в тело цикла ты не заходил. mishaSL посоветовал заминить на
тут происходит присваивание и проверяется результат. А результат оператора "=" - это присвоенное значение. То есть если директория непуста, то оно не равно 0. Правда, хочется отметить, что достаточно напсать
потому как 0 и false тождественны. Не знаю, как в PHP, но в С написание " != false" считается плохим стилем программирования... |
| Автор: mishaSL 11.3.2007, 21:10 |
Значит не правильно пробовал. |
| Автор: Prof_2000 11.3.2007, 22:39 |
| Да, прошу прощения. Просто сам всегда писал именно так... |
| Автор: Turik 12.3.2007, 00:52 |
| Bolwoe vsem sposibo, rebyata!!! A esli 4esno.. kod Render'a nesovsem ponyaten.. :( U koqo vremya est.. prowu pomo4.. tem kto v tanke |
| Автор: Render 12.3.2007, 01:15 | ||
| Описываю. Нужна ф-ция удаления каталога. Для удаления каталога имеем встроеную ф-цию rmdir() НО...она удаляет только пустые директории, соответственно, нужно бы прочистить всё внутри этой директории...для упрощения данной задачи, можно воспользоваться ф-цией glob. glob -- Находит файловые пути, совпадающие с шаблоном. http://www.php.net/manual/ru/function.glob.php далее имеем, ищем по шаблону *.* и удаляем всё это ф-цией unlink, воспользовавшись foreach. ну и под конец убиваем саму директорию.
|
| Автор: incognito06 12.3.2007, 23:55 |
| Господа! А я слышал от своей училки, что есть функция в php удаляющая не пустой каталог и при этом не надо циклить перебирая и удаляя файлы по одному. {так вышло что она только после аварии, и в гипсе (почти вся Кто что скажет в дополнение? Может она ошиблась? А вообще: функция бы такая пригодилась - раз, и удалил каталог, одним махом(строочкой) - пустой ли полный каталог - без разницы. И никаких лишних циклов что характерно. |
| Автор: Render 14.3.2007, 10:11 |
| Есть такая ф-ция, но дается она командами ОС фактически, а с этим тоже надо уметь работать! Чревато безопасностью в не умелых руках. |
| Автор: incognito06 15.3.2007, 00:27 | ||
Спасибо за инфу. Я так понимаю Вы подразумевали, что придёься писать отдельный CGA? И снова оговорюсь: учитель уверяла о такой функции в PHP!!! И именно с этой пометкой я спросил, не ошиблась ли она. Что по этому поводу думаете? Есть такая? (насколько мне известно - мануалы молчат по этому поводу, во всяком случае кроме rmdir конечно ) |
| Автор: Render 15.3.2007, 01:55 |
| В UNIX: $dir=escapeshellarg($directory); exec("rm -rf $dir"); В Винде соответственно: $dir=escapeshellarg($directory); exec("rmdir /s /q $dir"); Не забываем про escapeshellarg Удалит даже не пустой каталог, но как я уже говорил всё внимание безопасности. |
| Автор: incognito06 15.3.2007, 03:03 |
| Render, Тысяча благодарностей! А в каком плане тут безопасность хворает? Хотелось бы в общих чертах как ни будь поподробнее Ну и чем это всё "лечиться". Если вообще "лечиться". |
| Автор: Render 16.3.2007, 10:01 |
| Не забываем про escapeshellarg, escapeshellcmd. В принципе и всё. Ну можно еще ф-цию написать которая бы фильтровала действия, аля не пропускала никаких команд кроме "rm" ну или других, в зависимости от нужд. Тут огромный простор для извращения. А exec мощная вещь, почитай в мане http://ru.php.net/manual/ru/ref.exec.php Думаю сам поймешь что к чему и возможные действия ко взлому, которые помогут тебе защититься. Как говорится идеальной защиты не существует. |
| Автор: incognito06 17.3.2007, 19:03 |
| Прочитал... Действительно, вещь опасная, если неправильно пользоваться или без ораничений. Насколько я понял, этой функ. вообще не сильно рекомендуют пользоваться. - Это точно! |