- Создание, назначение доступа, удаление и проверка наличия папки в PHP
- Назначение прав при создании папки
- Создание нескольких вложенных поддиректорий
- Удаление папки
- Удаление непустой папки
- Проверка существования каталога
- Как использовать PHP для проверки того, что каталог пуст?
- How can I use PHP to check if a directory is empty
- Join the world’s most active Tech Community!
- Welcome back to the World’s most active Tech Community!
- Subscribe to our Newsletter, and get personalized recommendations.
- TRENDING CERTIFICATION COURSES
- TRENDING MASTERS COURSES
- COMPANY
- WORK WITH US
- DOWNLOAD APP
- CATEGORIES
- CATEGORIES
Создание, назначение доступа, удаление и проверка наличия папки в PHP
Для создания папки применяется функция mkdir. Обязательным параметром для этой функции является pathname, где задается путь к создаваемой директории.
При таком указании папки, она будет создана в той же директории, из которой был запущен php-скрипт. Если нужно создать каталог в другом месте, можно задать относительный путь к создаваемой папке или указать полный путь от корневой директории сайта.
mkdir("../newfolder"); // на уровень ниже
mkdir("/folder1/folder2/newfolder"); // полный путь
В последнем примере обязательным условием будет существование подкаталогов «folder1» и «folder2». Если их не будет, функция, в таком виде не сможет выполнить создание папки и вернет ошибку:
Warning: mkdir() [function.mkdir]: No such file or directory in …
В случае удачного выполнения, функция возвращает значение True. Если пака не была создана, возвращается значение False.
if (mkdir("newfolder"))
echo "Папка успешно создана";
else
echo "Папка не создана";
Но не стоит использовать эту функцию без проверки на наличие папки, так как ошибку о том, что не удалось создать папку, сервер все равно будет выводить.
Назначение прав при создании папки
За назначение прав на создаваемую папку отвечает второй необязательный параметр функции mkdir. По умолчанию, назначаются максимальные привилегии – 0777.
Права назначаются восьмеричным значением с обязательным нулем на первом месте. Не считая первого нуля, числа означают уровни доступа для владельца, для группы владельца, для всех остальных.
Чаще всего права задаются составной суммой, например:
5 – чтение и выполнение (1+4).
mkdir("newfolder", 0777); // полный доступ для всех
Создание нескольких вложенных поддиректорий
Создать несколько вложенных папок сразу можно, просто задав еще один необязательный логический параметр – recursive.
mkdir("folder1/folder2/newfolder", 0777, True); // полный доступ для всех
В этом случае, если папок «folder1» и «folder2» нет, функция создаст и их, и папку «newfolder». Сообщений об ошибках, если других проблем не возникнет, выведено не будет и функция вернет значение True.
Удаление папки
Пустую папку в PHP можно удалить функцией rmdir. В параметре dirname для нее так же задается полный или относительный путь к удаляемому каталогу:
rmdir("folder1/folder2/myfolder");
В каждом из указанных случаев удаляется только папка «myfolder». Если папки нет или путь задан некорректно, будет выведена ошибка:
Warning: rmdir(myfolder) [function.rmdir]: No such file or directory in …
Удаление непустой папки
Удаления непустого каталога выполняется путем последовательного удаления вложенных файлов в папке функцией unlink, а затем удаление пустой папки функцией rmdir. Для этого можно использовать подобную функцию:
function my_delete_dir($mypath) $dir = opendir($mypath);
while (($file = readdir($dir)))
if (is_file($mypath."/".$file))
unlink ($mypath."/".$file);
elseif (is_dir($mypath."/".$file) && ($file != ".") && ($file != ".."))
my_delete_dir ($mypath."/".$file);
>
closedir ($dir);
rmdir ($mypath);
>
my_delete_dir("myfolder"); // вызов функции
Проверка существования каталога
Перед большинством операций с каталогами стоит проверять, существуют ли они. Для этого применяется функция file_exists.
Помимо этого нужно убедиться, что указанный объект именно папка, а не файл — функция is_dir. Проверяемая папка задается относительным или полным путем.
if (file_exists("myfolder"))
echo "Указанная папка существует";
else
echo "Указанной папки нет";
if (is_dir("myfolder"))
echo "Указанный объект папка";
else
echo "Указанный объект не папка";
Как использовать PHP для проверки того, что каталог пуст?
Для чтения каталога я использую следующий скрипт. Если в каталоге нет файла, он должен быть пустым. Проблема в том, что он просто говорит, что каталог пуст, хотя есть файлы ARE внутри и наоборот.
php $pid = $_GET["prodref"]; $dir = '/assets/'.$pid.'/v'; $q = (count(glob("$dir/*")) === 0) ? 'Empty' : 'Not empty'; if ($q=="Empty") echo "the folder is empty"; else echo "the folder is NOT empty"; ?>
Кажется, что вам нужен scandir вместо glob, поскольку glob не может видеть скрытые файлы unix.
else < echo "the folder is NOT empty"; >function is_dir_empty($dir) < if (!is_readable($dir)) return NULL; return (count(scandir($dir)) == 2); >?>
Обратите внимание, что этот код не является вершиной эффективности, так как нет необходимости читать все файлы только для того, чтобы указать, пуст ли каталог. Таким образом, лучшая версия будет
function dir_is_empty($dir) < $handle = opendir($dir); while (false !== ($entry = readdir($handle))) < if ($entry != "." && $entry != "..") < return FALSE; >> return TRUE; >
Кстати, не используйте слова для замены логических значений. Сама цель последнего – сказать вам, что что-то пустое или нет.
выражение уже возвращает Empty или Non Empty в терминах языка программирования, FALSE или TRUE соответственно – так что вы можете использовать сам результат в структурах управления, таких как IF() без каких-либо промежуточных значений
Я думаю, что использование FilesystemIterator должно быть самым быстрым и простым способом:
// PHP 5 >= 5.3.0 $iterator = new \FilesystemIterator($dir); $isDirEmpty = !$iterator->valid();
Или используя доступ к члену класса при создании экземпляра:
// PHP 5 >= 5.4.0 $isDirEmpty = !(new \FilesystemIterator($dir))->valid();
Это работает, потому что новая файловая система сначала укажет на первый файл в папке – если в папке нет файлов, valid() вернет false . (см. документацию здесь .)
Как указано abdulmanov.ilmir, дополнительно проверьте, существует ли каталог перед использованием FileSystemIterator потому что иначе он выкинет исключение UnexpectedValueException .
Вероятно, из-за оператора присваивания в выражении if .
Это очень старая нить, но я думал, что дам десять центов. Другие решения не помогли мне.
function is_dir_empty($dir) < foreach (new DirectoryIterator($dir) as $fileInfo) < if($fileInfo->isDot()) continue; return false; > return true; >
Короткие и сладкие. Работает как шарм.
Для объектно-ориентированного подхода с использованием RecursiveDirectoryIterator из стандартной библиотеки PHP (SPL) .
Не нужно создавать экземпляр вашего FileHelper всякий раз, когда вам это нужно, вы можете получить доступ к этому статическому методу везде, где вам это нужно:
Класс FileHelper может быть расширен другими полезными методами для копирования, удаления, переименования и т. Д.
Нет необходимости проверять правильность каталога внутри метода, потому что, если он недопустим, конструктор объекта RecursiveDirectoryIterator будет RecursiveDirectoryIterator исключение UnexpectedValueException , которое достаточно UnexpectedValueException покрывает эту часть.
Просто исправьте свой код следующим образом:
Я думаю, что ваш пример исполнителей может быть более результативным, используя строгое сравнение:
function is_dir_empty($dir) < if (!is_readable($dir)) return null; $handle = opendir($dir); while (false !== ($entry = readdir($handle))) < if ($entry !== '.' && $entry !== '..') < // > closedir($handle); //
Я использую этот метод в моем плагине WordPress CSV 2 POST.
public function does_folder_contain_file_type( $path, $extension ) < $all_files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $path ) ); $html_files = new RegexIterator( $all_files, '/\.'.$extension.'/' ); foreach( $html_files as $file) < return true;// a file with $extension was found >return false;// no files with our extension found >
Он работает с определенным расширением, но его легко изменить в соответствии с вашими потребностями, удалив «новое значение RegexIterator (« строка »Count $ all_files.
public function does_folder_contain_file_type( $path, $extension )
В последнее время у меня была аналогичная проблема, хотя самый высокий ответ на голосование действительно не работал для меня, поэтому мне пришлось придумать аналогичное решение. и снова это также не может быть самым эффективным способом решения проблемы,
function is_empty_dir($dir) < if (is_dir($dir)) < $objects = scandir($dir); foreach ($objects as $object) < if ($object != "." && $object != "..") < if (filetype($dir."/".$object) == "dir") < return false; >else < return false; >> > reset($objects); return true; >
и использовал его, чтобы проверить пустую игру
Вы можете использовать это:
How can I use PHP to check if a directory is empty
- All categories
- ChatGPT (11)
- Apache Kafka (84)
- Apache Spark (596)
- Azure (145)
- Big Data Hadoop (1,907)
- Blockchain (1,673)
- C# (141)
- C++ (271)
- Career Counselling (1,060)
- Cloud Computing (3,469)
- Cyber Security & Ethical Hacking (162)
- Data Analytics (1,266)
- Database (855)
- Data Science (76)
- DevOps & Agile (3,608)
- Digital Marketing (111)
- Events & Trending Topics (28)
- IoT (Internet of Things) (387)
- Java (1,247)
- Kotlin (8)
- Linux Administration (389)
- Machine Learning (337)
- MicroStrategy (6)
- PMP (423)
- Power BI (516)
- Python (3,193)
- RPA (650)
- SalesForce (92)
- Selenium (1,569)
- Software Testing (56)
- Tableau (608)
- Talend (73)
- TypeSript (124)
- Web Development (3,002)
- Ask us Anything! (66)
- Others (2,231)
- Mobile Development (395)
- UI UX Design (24)
Join the world’s most active Tech Community!
Welcome back to the World’s most active Tech Community!
Subscribe to our Newsletter, and get personalized recommendations.
Sign up with Google Signup with Facebook
Thank you for registering Join Edureka Meetup community for 100+ Free Webinars each month JOIN MEETUP GROUP
TRENDING CERTIFICATION COURSES
- DevOps Certification Training
- AWS Architect Certification Training
- Big Data Hadoop Certification Training
- Tableau Training & Certification
- Python Certification Training for Data Science
- Selenium Certification Training
- PMP® Certification Exam Training
- Robotic Process Automation Training using UiPath
- Apache Spark and Scala Certification Training
- Microsoft Power BI Training
- Online Java Course and Training
- Python Certification Course
TRENDING MASTERS COURSES
- Data Scientist Masters Program
- DevOps Engineer Masters Program
- Cloud Architect Masters Program
- Big Data Architect Masters Program
- Machine Learning Engineer Masters Program
- Full Stack Web Developer Masters Program
- Business Intelligence Masters Program
- Data Analyst Masters Program
- Test Automation Engineer Masters Program
- Post-Graduate Program in Artificial Intelligence & Machine Learning
- Post-Graduate Program in Big Data Engineering
COMPANY
WORK WITH US
DOWNLOAD APP
CATEGORIES
CATEGORIES
- Cloud Computing
- DevOps
- Big Data
- Data Science
- BI and Visualization
- Programming & Frameworks
- Software Testing © 2023 Brain4ce Education Solutions Pvt. Ltd. All rights Reserved. Terms & ConditionsLegal & Privacy