работа с директориями php

Работа с директориями в PHP

При написании скриптов на языке PHP не редко требуется выполнять различные операции с директориями. Директории (они же — папки и каталоги) позволяют структурировать и упорядочивать файлы на устройстве. Для работы с каталогами в языке PHP имеются встроенные функции.

Получение списка файлов и директорий

Получить содержимое каталога можно используя функцию glob()

Функция имеет два параметра:

$pattern (обязательный): шаблон поиска

$flags (опциональный): один или несколько флагов, описание которых можно найти в документации

Если нужен список файлов и директорий, имена которых начинаются на “po”, то код будет выглядеть так:

Создание директорий

С самых ранних версий PHP для создания директорий использовалась функция mkdir().

Функция пытается создать директорию, заданную в pathname.

$pathname
Путь к директории.

$mode
По умолчанию принимает значение 0777, что означает самые широкие права. Больше информации о режимах доступа можно узнать на странице руководства функции chmod().

Аргумент mode игнорируется в Windows.

Обратите внимание, что аргумент mode необходимо задавать в виде восьмеричного числа (первой цифрой должен быть ноль). На аргумент mode также влияет текущее значение umask, которое можно изменить при помощи umask().

$recursive
Разрешает создание вложенных директорий, указанных в pathname.

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Источник

Работа с директориями php

Работа с файлами включает в себя 3 этапа.
-Открытие файла;
-Обработка (чтение, запись);
-Закрытие файла.

Закрывает файл функция fclose(). Ей нужно передать указатель на ресурс.
Давайте на примере посмотрим действие этих функций. Пусть в директории /usr/tmp в файле f1.txt хранятся числа. По одному в каждой строке. Нам надо считать это число, увеличить и записать в файл f2.txt.

Немного отступлюсь. Есть еще функция scandir($path). Она принимает путь к каталогу и возвращает в виде массива список всех элементов каталога. Открывать папку функцией opendir() в данном случае не нужно.

Также, оказывается, в PHP есть встроенный класс для работы с директориями. Называется он dir. Он содержит путь, дескриптор, а также методы чтения, закрытия и сброса дескриптора. Как им пользоваться вы поймете, когда изучите ООП.

Так. вернемся назад к нашей readdir(). Получили вы имя очередного элемента каталога. Что же теперь с ним делать? Можно, например, вывести на экран, записать в файл, можно еще что-нибудь придумать.
Например, можно узнать, что это за элемент (еще одна папка, файл, ссылка). для этого существуют соответствующие функции. Функция is_dir($path) принимает строку (путь к элементу с его именем) и возвращает true в случае, если это папка, иначе false. Аналогично работают is_file($path) и is_link($path). Также определить тип элемента можно функцией filetype ($filename), передав ей имя файла. Функция вернет строку с одним из следующих значений: fifo, char, dir, block, link, file или unknown.

Еще есть функция сlearstatcache(). Она очищает кэш состояния файлов. Если вы производите какие-то изменения в файлах своим скриптом, а потом работаете, основываясь на этих изменениях, то после изменений вызывайте эту функцию. Иначе ваши изменения могут быть не обнаружены. Например, вы пишете в файл, пока его размер не достигнет, скажем, 2Мб. И проверяете размер после каждой записи. И не смотря на то, что файл вырос уже до 2Гб, php по-прежнему видит его первоначальный размер. А вот если вы будете сlearstatcache(), то всё будет нормально.

Давайте рассмотрим небольшой пример: откроем директорию /usr/home/mydir и посмотри что в ней есть.

1. Из каких этапов состоит процедура работы с файлами?

2. Как при помощи функции chdir() перейти в каталог уровнем выше, не используя функции getcwd() и прочих методов узнавания текущего каталога?

3. Напишите скрипт, считывающий из файла f1.bmp строки, сортирующий их и отсортированный результат запишите в файл f1.mp3.

4. Напишите скрипт, выводящий на экран дерево каталога /usr и пропускающий файлы, в которые запрещена запись. Подсказка: Для этого вспомните рекурсию.
Дерево должно иметь вид, например, такой:
/usr/
—local/
—-etc/
—-bin/
—home/
—-myfolder/
———my_file

Источник

Функции файловой системы

Описание родственных функций вы сможете найти в разделах Каталоги и Выполнение программ.

За списком обёрток URL для работы с удалёнными файлами и пояснениями обращайтесь к главе Поддерживаемые протоколы и обёртки.

Содержание

User Contributed Notes 8 notes

You have an array of directories (straightforward list of directories):

= array (
‘home’ => array (
‘drapeko’ => array (
‘var’ => array (
‘y’ => array()
)
)
),
‘var’ => array(
‘libexec’ => array()
)
);
?>

How can you do it?

First of all the below function will help us.

How can you use this function? I know it looks like a little confusing. But it’s quite simple. Consider the example below:

I made this function to search and/or display files by extension or for a string occurance in the filename. Any comments or enhancements are welcome offcourse. I’ll update this function soon.

usage: list_files([string], [string], [int 1 | 0], [int 1 | 0]);

This function searches a directory and returns an array of all files whose filename matches the specified regular expression. It’s similar in concept to the Unix find program.

\\ Read a line from a MAC file
stream_get_line($fp, 4096, «\r»);

\\ Read a line from a UNIX file
stream_get_line($fp, 4096, «\n»);

\\ Read a line from a DOS file
stream_get_line($fp, 4096, «\r\n»);

\\ Read a line up to any filesystem line ending
ini_set(‘auto_detect_line_endings’, true); fgets($fp);

\\ You can also make up your own line ending characters:
\\ Read up to the first instance of «:»
stream_get_line($fp, 4096, «:»);

function is_binary($link)
<
$tmpStr = »;
@$fp = fopen($link, ‘rb’);
@$tmpStr = fread($fp, 256);
@fclose($fp);

Here is a useful function if you’re having trouble writing raw bytes into a file.

It receives an integer and returns an array containing the ASCII values of the bytes on each index of the array.

$arr will contain the following values:
Array
(
[0] => 1
[1] => 40
[2] => 56
)

Now, to write this data to the file, just use a fputs() with chr(), just like this:

a function based on «tunnelareaten at gmail dot com»s idea to search for files in a given directory by a searchstring or by fileextension.

I added support to search recursively through all sub-directories an to determine weather the filepath should be returned or not.

// recursive function to get contents of given folder by searchterm or fileextension
// (does not show folders)
// standards: Foldername: string
// Searchterm: string
// Searchtype: ext/search (file-extension or searchterm within filename)
// SaveCompletePath: true/1
// usage: array FileSearch_r($Folder,$Search[,$SearchType,$SavePath])

Источник

PHP: список файлов и директорий

В данном уроке мы разберемся с типовой задачей, которая возникает во время работы над проектом PHP: получение списка файлов и директорий. Обсудим несколько базовых и более изощренных подходов, с перечисление плюсов и минусов каждого. Первые три решения будут использовать типовые функции PHP, а затем представим более надежное с применением итераторов SPL.

Для предметного обсуждения решения и демонстраций предположим, что структура директорий имеет следующий вид:

Базовые решения

Использование glob()

Первое решение базируется на использовании функции glob(), которая позволяет выполнять поиск пути с помощью шаблонов. Функция имеет два параметра:

Рассмотрим примеры. Для поиска в директории всех файлов и директорий, имена которых заканчиваются на .txt, следует использовать код:

Если нужен список файлов и директорий, имена которых начинаются на “te”, то код будет выглядеть так:

А для получения списка только директорий с именами, содержащих “ma”, используем код:

Последний пример выведет:

Обратите внимание, что в последнем примере использован флаг GLOB_ONLYDIR в качестве второго параметра функции. Поэтому файл master.dat исключен из списка. Хотя функция glob() очень проста в использовании, иногда она недостаточно гибкая. Например, нет флага для получения только файлов (без директорий), которые соответствуют шаблону.

Ниже приведенный пример возвращает список имен файлов и директорий начинающихся на “te”:

Второй пример выводит только файлы, содержащиеся в заданном каталоге.

Пример выдаст следующее:

Использование scandir()

Данный пример показывает, как получить список файлов и каталогов, имена которых начинаются на “te”:

Воспользуемся итераторами SPL

Теперь рассмотрим использование итераторов SPL. Но прежде, чем приступить к решению нашей задачи, проведем введение в библиотеку SPL и итераторы. Библиотека SPL предоставляет серию классов для объектно ориентированных структур данных, итераторов, дескрипторов файлов и прочее.

Конечно, PHP представляет возможность для получения такой информации с помощью функций,например filesize() и fileowner(). Но PHP5 основан на использовании концепции ООП. Поэтому лучше использовать современные методы работы с языком программирования. На нашем сайте есть уроки, посвященные работе с итераторами.

Реальное различие в данных итераторах заключается в их использовании для навигации по заданному пути.

FilesystemIterator

Использовать FilesystemIterator очень просто. Рассмотрим в действии. Представляем два примера. Первый показывает поиск всех файлов и каталогов, имена которых начинаются на “te”. Второй пример использует другой итератор RegexIterator для поиска всех файлов и каталогов, имена которых заканчиваются на “t.dat” или “t.php”. Итератор RegexIterator используется для фильтрации результата на основе регулярных выражений.

Выше приведенный код выдаст результат, аналогичный предыдущим примерам.

Второй пример с применением RegexIterator :

RecursiveDirectoryIterator

GlobIterator

Заключение

В данном уроке демонстрируется использование различных подходов для достижение одинаковой цели: получение списка файлов и директорий. Следует запомнить следующие ключевые моменты:

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: phpmaster.com/list-files-and-directories-with-php/
Перевел: Сергей Фастунов
Урок создан: 13 Ноября 2012
Просмотров: 107041
Правила перепечатки

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

работа с директориями php. Смотреть фото работа с директориями php. Смотреть картинку работа с директориями php. Картинка про работа с директориями php. Фото работа с директориями php

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

работа с директориями php. Смотреть фото работа с директориями php. Смотреть картинку работа с директориями php. Картинка про работа с директориями php. Фото работа с директориями php

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

работа с директориями php. Смотреть фото работа с директориями php. Смотреть картинку работа с директориями php. Картинка про работа с директориями php. Фото работа с директориями php

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

работа с директориями php. Смотреть фото работа с директориями php. Смотреть картинку работа с директориями php. Картинка про работа с директориями php. Фото работа с директориями php

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Источник

Работа с директориями php

Создание каталога.
Синтаксис:

Удаление каталога.
Синтаксис:

Смена текущего каталога.
Синтаксис:

Возвращает полный путь текущего директория

Данная функция возвращает текущую директорию, относительно которой проводятся файловые операции, т.е. возвращает полный путь к текущему каталогу, начиная от «корня» (/).

Если такой путь не может быть отслежен, вызов «проваливается» и возвращается false.

Определяет свободное пространство в каталоге
Синтаксис:

Данная функция возвращает в байтах свободное пространство в каталоге directory, то есть в соответствующей ей файловой системе или на разделе диска.
Пример:

Сменить корневой каталог (PHP 4 >= 4.0.5, PHP 5)

Изменяет корневой каталог текущего процесса на переданный в качестве параметра каталог. Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки..

Данная функция доступна только в том случае, если ее поддерживает ваша операционная система и вы используете методы вызова CLI, CGI или Embed SAPI.

Замечание: Для Windows-платформ эта функция не реализована.

scandir — Получает список файлов и каталогов, расположенных по указанному пути

Возвращает array, содержащий имена файлов и каталогов, расположенных по пути, переданном в параметре directory.

Возвращает array имен файлов в случае успеха или FALSE в случае ошибки. Если directory не является каталогом, возвращается FALSE и генерируется сообщение об ошибке уровня E_WARNING.

Пример #1 Простой пример использования функции scandir()

Результатом выполнения данного примера будет что-то подобное:

Пример #2 Альтернативный вариант функции scandir() для PHP 4

Результатом выполнения данного примера будет что-то подобное:

Для этой функции вы можете использовать URL в качестве имени файла, если была включена опция fopen wrappers.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *