Файловая система PHP


PHP и взаимодействие с файловой системой Web-сервера

Введение

В статье рассмотрены вопросы организации загрузки файлов на сервер с помощью PHP, работы с каталогами и файлами на сервере, запуск программ и использование переменных среды. Все это становится актуальным при необходимости решения задач, связанных с изменением Web-содержимого или предоставления дружественного интерфейса пользователю вместо традиционного ftp или scp.

Также мы рассмотрим создание HTML-формы для интерфейса, реализующего функционал загрузки файлов на сервер.

Код HTML-формы

Форма содержит поля для ввода имени файла и дает возможность выбора такого файла из числа доступных на локальной машине.

Для посылки данных используется метод POST. Дескриптор

ГЛАВА 7 Файловый ввод/вывод и файловая система

Данная глава посвящена одному из важнейших аспектов PHP — средствам файлового ввода/вывода. Как нетрудно предположить, входные и выходные потоки данных интенсивно используются при разработке web-приложений. Не ограничиваясь простым чтением/записью файлов, PHP предоставляет в распоряжение программиста средства просмотра и модификации серверной информации, а также запуска внешних программ. Этим средствам и посвящена настоящая глава.

Проверка существования и размера файла

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

file_exists( ) и is_file( ).

Функция f ilе_ехists ( ) проверяет, существует ли заданный файл. Если файл существует, функция возвращает TRUE, в противном случае возвращается FALSE. Синтаксис функции file_exists( ):

bool file_exists(string файл)

Пример проверки существования файла:

if (! file_exists ($filename)) :

print «File $filename does not exist!»;

Функция is_file( ) проверяет существование заданного файла и возможность выполнения с ним операций чтения/записи. В сущности, is_file( ) представляет собой более надежную версию file_exists( ), которая проверяет не только факт существования файла, но и то, поддерживает ли он чтение и запись данных:

bool is_file(string файл)

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

print «The file $file is valid and exists!»;

print «The file $file does not exist or it is not a valid file!»;

Убедившись в том, что нужный файл существует и с ним можно выполнять различные операции чтения/записи, можно переходить к следующему шагу — открытию файла.

Функция filesize( ) возвращает размер (в байтах) файла с заданным именем или FALSE в случае ошибки. Синтаксис функции filesize( ):

int filesize(string имя_файла)

Предположим, вы хотите определить размер файла pastry.txt. Для получения нужной информации можно воспользоваться функцией filesize( ):

$fs = filesize(«pastry.txt»); print «Pastry.txt is $fs bytes.»;

Выводится следующий результат:

Pastry.txt is 179 bytes.

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

Открытие и закрытие файлов

Прежде чем выполнять операции ввода/вывода с файлом, необходимо открыть его функцией fopen( ).

Функция fopen( ) открывает файл (если он существует) и возвращает целое число — так называемый файловый манипулятор (file handle). Синтаксис функции fopen( ):

int fopen (string файл, string режим [, int включение_пути])

Открываемый файл может находиться в локальной файловой системе, существовать в виде стандартного потока ввода/вывода или представлять файл в удаленной системе, принимаемой средствами HTTP или FTP.

Параметр файл может задаваться в нескольких формах, перечисленных ниже:

Если параметр содержит имя локального файла, функция fopen( ) открывает этот файл и возвращает манипулятор.

Если параметр задан в виде php://stdin, php://stdout или php://stderr, открывается соответствующий стандартный поток ввода/вывода.

Если параметр начинается с префикса https://, функция открывает подключение HTTP к серверу и возвращает манипулятор для указанного файла.

Если параметр начинается с префикса ftp://, функция открывает подключение FTP к серверу и возвращает манипулятор для указанного файла. В этом случае следует обратить особое внимание на два обстоятельства: если сервер не поддерживает пассивный режим FTP, вызов fopen( ) завершается неудачей. Более того, FTP-файлы открываются либо для чтения, либо для записи.

При работе в пассивном режиме сервер ЯР ожидает подключения со стороны клиентов. При работе в активном режиме сервер сам устанавливает соединение с клиентом. По умолчанию обычно используется активный режим.

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

Таблица 7.1. Режимы открытия файла

Режим Описание
Только чтение. Указатель текущей позиции устанавливается в начало файла
r+ Чтение и запись. Указатель текущей позиции устанавливается в начало файла
w Только запись. Указатель текущей позиции устанавливается в начало файла, а все содержимое файла уничтожается. Если файл не существует, функция пытается создать его
w+ Чтение и запись. Указатель текущей позиции устанавливается в начало файла, а все содержимое файла уничтожается. Если файл не существует, функция пытается создать его
a Только запись. Указатель текущей позиции устанавливается в конец файла. Если файл не существует, функция пытается создать его
a+ Чтение и запись. Указатель текущей позиции устанавливается в конец файла. Если файл не существует, функция пытается создать его

Если необязательный третий параметр включение_пути равен 1, то путь к файлу определяется по отношению к каталогу включаемых файлов, указанному в файле php.ini (см. главу 1).

Ниже приведен пример открытия файла функцией fopen( ). Вызов die( ), используемый в сочетании с fopen( ), обеспечивает вывод сообщения об ошибке в том случае, если открыть файл не удастся:

$file = «userdata.txt»; // Некоторый файл

$fh = fopen($file, «a+») or die(«File ($file) does not exist!»);

Следующий фрагмент открывает подключение к сайту PHP (https://www.php.net):

$site = «https://www.php.net»: // Сервер, доступный через HTTP

$sh = fopen($site., «r»); //Связать манипулятор с индексной страницей Php.net

После завершения работы файл всегда следует закрывать функцией fclose( ).

Функция fclose( ) закрывает файл с заданным манипулятором. При успешном закрытии возвращается TRUE, при неудаче — FALSE. Синтаксис функции fclose( ):

int fclose(int манипулятор)

Функция fclose( ) успешно закрывает только те файлы, которые были ранее открыты функциями fopen( ) или fsockopen( ). Пример закрытия файла:

$fh = fopen($file, «r»);

// Выполнить операции с файлом


print «File Sfile does not exist!»;

Запись в файл

С открытыми файлами выполняются две основные операции — чтение и запись.

Функция is_writeable( ) позволяет убедиться в том, что файл существует и для него разрешена операция записи. Возможность записи проверяется как для файла, так и для каталога. Синтаксис функции is_writeable( ):

bool is_writeable (string файл)

Одно важное обстоятельство: скорее всего, PHP будет работать под идентификатором пользователя, используемым web-сервером (как правило, «nobody»). Пример использования is_writeable( ) приведен в описании функции fwrite( ).

Функция fwrite( ) записывает содержимое строковой переменной в файл, заданный файловым манипулятором. Синтаксис функции fwrite( ):

int fwrite(int манипулятор, string переменная [, int длина])

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

Функция fputs( ) является псевдонимом fwrite( ) и может использоваться всюду, где используется fwrite( ).

Функция fputs( ) является псевдонимом fwrite( ) и имеет точно такой же синтаксис. Синтаксис функции fputs( ):

int fputs(int манипулятор, string переменная [, int длина])

Лично я предпочитаю использовать fputs( ). Следует помнить, что это всего лишь вопрос стиля, никак не связанный с какими-либо различиями между двумя функциями.

Чтение из файла

Несомненно, чтение является самой главной операцией, выполняемой с файлами. Ниже описаны некоторые функции, повышающие эффективность чтения из файла. Синтаксис этих функций практически точно копирует синтаксис аналогичных функций записи.

Функция i s_readable( ) позволяет убедиться в том, что файл существует и для него разрешена операция чтения. Возможность чтения проверяется как для файла, так и для каталога. Синтаксис функции is_readable( ):

boo! is_readable (string файл]

Скорее всего, PHP будет работать под идентификатором пользователя, используемым web-сервером (как правило, «nobody»), поэтому для того чтобы функция is_readable( ) возвращала TRUE, чтение из файла должно быть разрешено всем желающим. Следующий пример показывает, как убедиться в том, что файл существует и доступен для чтения:

// Открыть файл и установить указатель текущей позиции в конец файла

$fh = fopen($filename, «r»);

print «$filename is not readable!»;

Функция fread( ) читает из файла, заданного файловым манипулятором, заданное количество байт. Синтаксис функции fwrite( ):

int fread(int манипулятор, int длина)

Манипулятор должен ссылаться на открытый файл, доступный для чтения (см. описание функции is_readable( )). Чтение прекращается после прочтения заданного количества байт или при достижении конца файла. Рассмотрим текстовый файл pastry.txt, приведенный в листинге 7.1. Чтение и вывод этого файла в браузере осуществляется следующим фрагментом:

$fh = fopen(‘pastry.txt’, «r») or die(«Can’t open file!»);

$file = fread($fh, filesize($fh));

Используя функцию fllesize( ) для определения размера pastry.txt в байтах, вы гарантируете, что функция fread( ) прочитает все содержимое файла.

Листинг 7.1. Текстовый файл pastry.txt

Recipe: Pastry Dough

1 1/4 cups all-purpose flour

3/4 stick (6 tablespoons) unsalted butter, chopped

2 tablespoons vegetable shortening 1/4 teaspoon salt

3 tablespoons water

Функция fgetc( ) возвращает строку, содержащую один символ из файла в текущей позиции указателя, или FALSE при достижении конца файла. Синтаксис функции fgetc( ):

string fgetc (int манипулятор)

Манипулятор должен ссылаться на открытый файл, доступный для чтения (см. описание функции is_readable( ) ранее в этой главе). В следующем примере продемонстрированы посимвольное чтение и вывод файла с использованием функции fgetc( ):

$fh = fopen(«pastry.txt», «r»); while (! feof($fh)) :

print $char; endwhile;

Функция fgets( ) возвращает строку, прочитанную от текущей позиции указателя в файле, определяемом файловым манипулятором. Файловый указатель должен ссылаться на открытый файл, доступный для чтения (см. описание функции is_readable( ) ранее в этой главе). Синтаксис функции fgets( ):

string fgets (int манипулятор, int длина)

Чтение прекращается при выполнении одного из следующих условий:

  • из файла прочитано длина — 1 байт;
  • из файла прочитан символ новой строки (включается в возвращаемую строку);
  • из файла прочитан признак конца файла (EOF).

Если вы хотите организовать построчное чтение файла, передайте во втором параметре значение, заведомо превышающее количество байт в строке. Пример построчного чтения и вывода файла:

$fh = fopen(«pastry.txt», «r»);

$line = fgets($fh, 4096);

Функция fgetss( ) полностью аналогична fgets( ) за одним исключением — она пытается удалять из прочитанного текста все теги HTML и PHP:

string fgetss (Int манипулятор, int длина [, string разрешенные_теги])

Прежде чем переходить к примерам, ознакомьтесь с содержимым листинга 7.2 — этот файл используется в листингах 7.3 и 7.4.

Листинг 7.2. Файл science.html

Breaking News — Science

Alien lifeform discovered

Early this morning, a strange new form of fungus was found growing in the closet of W. J. Gilmore’s old apartment refrigerator. It is not known if powerful radiation emanating from the tenant’s computer monitor aided in this evolution.

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

Никакие внешние библиотеки не требуются для сборки этого расширения, но если вы хотите, чтобы PHP поддерживал LFS (large files, большие файлы) в Linux, вам нужно иметь последнюю версию glibc и скомпилировать PHP со следующими флагами компилятора: -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 .

Для использования этих функций не требуется проведение установки, поскольку они являются частью ядра PHP.

Поведение этих функций зависит от установок в php.ini .


Таблица 1. Директивы конфигурации для файловых систем и потоков

Имя Значение по умолчанию Область изменения
allow_url_fopen «1» PHP_INI_SYSTEM
user_agent NULL PHP_INI_ALL
default_socket_timeout «60» PHP_INI_ALL
from NULL ??
auto_detect_line_endings «Off» PHP_INI_ALL

Краткое разъяснение конфигурационных директив.

Данная директива включает поддержку упаковщиков URL (URL wrappers), которые позволяют работать с объектами URL, как с обычными файлами. Упаковщики, доступные по умолчанию, служат для работы с удаленными файлами с использованием протокола ftp или http. Некоторые расширения, например, zlib , могут регистрировать собственные упаковщики.

Замечание: Эта настройка может быть установлена только в php.ini из соображений безопасности.

Замечание: Эта директива была представлена сразу же после выхода PHP версии 4.0.3. В этой и в последующих версиях эта функциональность может быть отключена только во время компиляции PHP с помощью ключа —disable-url-fopen-wrapper .

В версиях PHP, более ранних, чем 4.3.0, для платформ Windows, поддержка работы с удаленными файлами отсутствует для следующих функций: include() , include_once() , require() , require_once() и функции imagecreatefromXXX расширения Ссылка LIV, Image Functions .

Устанавливает строку «User-Agent» для использования ее PHP при запросах к удаленным серверам.

Значение таймаута (в секундах) для потоков, использующих сокеты.

Замечание: Данная директива стала доступна с версии PHP 4.3.0

Устанавливает пароль для анонимного доступа к серверу ftp (ваш адрес электронной почты).

Данная директива позволяет PHP взаимодействовать с системами Macintosh, однако, по умолчанию эта директива выключена, поскольку при ее использовании возникает (несущественная) потребность в дополнительных ресурсах для определения символа окончания первой строки, а также потому, что программисты, использующие в системах Unix символы перевода строки в качестве разделителей, столкнутся с обратно-несовместимым поведением PHP.

Замечание: Эта директива стала доступна с версии PHP 4.3.0

Перечисленные ниже константы определены данным расширением и могут быть доступны только в том случае, если PHP был собран с поддержкой этого расширения или же в том случае, если данное расширение подгружается во время выполнения.

PHP 5 Файловая система Функции

PHP Filesystem Введение

Функции файловой системы позволяют получить доступ и управлять файловой системой.

устанавливать

Функции Filesystem являются частью ядра PHP. Никакой установки не требуется, чтобы использовать эти функции.

Настройка во время выполнения

Функции Поведение Filesystem зависит от установок в php.ini.

Параметры конфигурации Filesystem:

Внимание
名称 默认 描述 可改变
allow_url_fopen «1» 允许 fopen()-type 函数使用 URL。(PHP 4.0.4 版以后可用) PHP_INI_SYSTEM
user_agent NULL 定义 PHP 发送的用户代理。(PHP 4.3 版以后可用) PHP_INI_ALL
default_socket_timeout «60» 设置基于 socket 流的默认的超时时间(秒)。(PHP 4.3 版以后可用) PHP_INI_ALL
from «» 定义匿名 FTP 的密码(您的 email 地址)。 PHP_INI_ALL
auto_detect_line_endings «0» 当设置为 «1» 时,PHP 将检查通过 fgets() 和 file() 取得的数据中的行结束符号是符合 Unix、MS-Dos 还是 Mac 的习惯。(PHP 4.3 版以后可用) PHP_INI_ALL

Совместимость с Unix / Windows

При заданной траектории на Unix-платформах, прямой слэш (/) в качестве разделителя каталогов. В то время как на платформе Windows, (\) можно использовать прямой слэш (/) и обратной косой черты.

PHP 5 FileSystem Функции

Введение в файловую систему PHP

Функции файловой системы позволяют получить доступ к файловой системе и манипулировать ею.

Установки

Функции файловой системы являются частью ядра PHP. Для использования этих функций не требуется установка.

Совместимость с Unix/Windows

При указании пути на платформах UNIX в качестве разделителя каталогов используется косая черта (/).

На платформах Windows можно использовать как косую черту (/), так и обратную косую черту (\).

Конфигурация среды выполнения

Поведение функций файловой системы зависит от настроек в PHP. ini.

Урок 14: Файловая система

С помощью PHP вы можете получить доступ к файловой системе сервера. Это даёт возможность работать с папками и текстовыми файлами в РНР-скриптах.

Например, можно использовать PHP для чтения и записи текстовых файлов. Либо можно получить список всех файлов в папке. Возможностей много, и РНР может избавить вас от рутинной работы.

Здесь мы посмотрим, как можно использовать РНР для работы с файлами и папками. Цель — дать вам общее представление. В следующих уроках мы более подробно рассмотрим эти возможности. Полный список см. в документации.

filemtime Возвращает время, когда файл в последний раз редактировался (в виде UNIX timestamp — см. Урок 4)). fileatime Возвращает время, когда к файлу в последний раз осуществлялся доступ (в виде UNIX timestamp — см. Урок 4)). filesize Возвращает размер файла, в байтах.

Попробуем определить эти три свойства файла: «/tutorials/php/lesson14.php»

Папки

PHP позволяет также работать с папками на сервере. Мы не будем рассматривать все возможности — только покажем на примере. Не забывайте смотреть документацию.

opendir Открывает специфицированную папку/директорию. readdir Возвращает имя следующего файла в открытой папке (соотв. opendir) closedir Закрывает специфицированную папку/директорию.

В примере создаётся листинг папки «tutorials/php/».

В этом примере сначала открывается директория «../../tutorials/php/». Затем используется цикл для написания имени следующего файла в папке, если файлы ещё есть. В конце папка закрывается.

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

Файловая система

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

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

Содержание

  • basename — Возвращает последний компонент имени из указанного пути
  • chgrp — Изменяет группу владельцев файла
  • chmod — Изменяет режим доступа к файлу
  • chown — Изменяет владельца файла

  • clearstatcache — Очищает кэш состояния файлов
  • copy — Копирует файл
  • delete — См.описание функции unlink или unset
  • dirname — Возвращает имя родительского каталога из указанного пути
  • disk_free_space — Возвращает размер доступного пространства в каталоге или в файловой системе
  • disk_total_space — Возвращает общий размер каталога или раздела файловой системы
  • diskfreespace — Псевдоним disk_free_space
  • fclose — Закрывает открытый дескриптор файла
  • feof — Проверяет, достигнут ли конец файла
  • fflush — Сбрасывает буфер вывода в файл
  • fgetc — Считывает символ из файла
  • fgetcsv — Читает строку из файла и производит разбор данных CSV
  • fgets — Читает строку из файла
  • fgetss — Прочитать строку из файла и отбросить HTML-теги
  • file_exists — Проверяет наличие указанного файла или каталога
  • file_get_contents — Читает содержимое файла в строку
  • file_put_contents — Пишет строку в файл
  • file — Читает содержимое файла и помещает его в массив
  • fileatime — Возвращает время последнего доступа к файлу
  • filectime — Возвращает время изменения индексного дескриптора файла
  • filegroup — Получает идентификатор группы файла
  • fileinode — Возвращает индексный дескриптор файла
  • filemtime — Возвращает время последнего изменения файла
  • fileowner — Возвращает идентификатор владельца файла
  • fileperms — Возвращает информацию о правах на файл
  • filesize — Возвращает размер файла
  • filetype — Возвращает тип файла
  • flock — Портируемая консультативная блокировка файлов
  • fnmatch — Проверяет совпадение имени файла с шаблоном
  • fopen — Открывает файл или URL
  • fpassthru — Выводит все оставшиеся данные из файлового указателя
  • fputcsv — Форматирует строку в виде CSV и записывает её в файловый указатель
  • fputs — Псевдоним fwrite
  • fread — Бинарно-безопасное чтение файла
  • fscanf — Обрабатывает данные из файла в соответствии с форматом
  • fseek — Устанавливает смещение в файловом указателе
  • fstat — Получает информацию о файле используя открытый файловый указатель
  • ftell — Сообщает текущую позицию чтения/записи файла
  • ftruncate — Урезает файл до указанной длинны
  • fwrite — Бинарно-безопасная запись в файл
  • glob — Находит файловые пути, совпадающие с шаблоном
  • is_dir — Определяет, является ли имя файла директорией
  • is_executable — Определяет, является ли файл исполняемым
  • is_file — Определяет, является ли файл обычным файлом
  • is_link — Определяет, является ли файл символической ссылкой
  • is_readable — Определяет существование файла и доступен ли он для чтения
  • is_uploaded_file — Определяет, был ли файл загружен при помощи HTTP POST
  • is_writable — Определяет, доступен ли файл для записи
  • is_writeable — Псевдоним is_writable
  • lchgrp — Изменяет группу, которой принадлежит символическая ссылка
  • lchown — Изменяет владельца символической ссылки
  • link — Создаёт жёсткую ссылку
  • linkinfo — Возвращает информацию о ссылке
  • lstat — Возвращает информацию о файле или символической ссылке
  • mkdir — Создаёт директорию
  • move_uploaded_file — Перемещает загруженный файл в новое место
  • parse_ini_file — Обрабатывает конфигурационный файл
  • parse_ini_string — Разбирает строку конфигурации
  • pathinfo — Возвращает информацию о пути к файлу
  • pclose — Закрывает файловый указатель процесса
  • popen — Открывает файловый указатель процесса
  • readfile — Выводит файл
  • readlink — Возвращает файл, на который указывает символическая ссылка
  • realpath_cache_get — Получает записи из кэша реального пути
  • realpath_cache_size — Получает размер кэша реального пути
  • realpath — Возвращает канонизированный абсолютный путь к файлу
  • rename — Переименовывает файл или директорию
  • rewind — Сбрасывает курсор у файлового указателя
  • rmdir — Удаляет директорию
  • set_file_buffer — Псевдоним stream_set_write_buffer
  • stat — Возвращает информацию о файле
  • symlink — Создаёт символическую ссылку
  • tempnam — Создаёт файл с уникальным именем
  • tmpfile — Создаёт временный файл
  • touch — Устанавливает время доступа и модификации файла
  • umask — Изменяет текущую umask
  • unlink — Удаляет файл

Коментарии

This is a function I use to determine if a file contains Binary information. I use this for my search engine so that it doesn’t try to index files like .zip or .mp3 or any other file that doesn’t contain readable information. It makes use of the Character Type Extension if it’s loaded, if it’s not then it uses Regular Expressions.

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

if($tmpStr != »)
<
$tmpStr = str_replace(chr(10), », $tmpStr);
$tmpStr = str_replace(chr(13), », $tmpStr);

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.

function int2bytes($number) <
$byte = $number;
$i=0;
do <
$dec_tmp = $byte;

$byte = bcdiv($byte,256,0);
$resto = $dec_tmp — (256 * $byte);
$return[] = $resto;
> while($byte >= 256);
if($byte) $return[] = $byte;
return array_reverse($return);
>

$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:

Pollard@php.net contributed this in response to a question on setting these variables .
This option *IS* settable within your PHP scripts.
Example:

( ‘auto_detect_line_endings’ , true );
$contents = file ( ‘unknowntype.txt’ );

ini_set ( ‘auto_detect_line_endings’ , false );
$content2 = file ( ‘unixfile.txt’ );
?>

Note, with PHP 4.3 anytime Mac files are read using fgets or file you’ll need to auto_detect_line_endings since \n is otherwise assumed. However, with PHP 5.0, stream_get_line() will allow you to specify what line ending character to read up to.

\\ 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, «:»);

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.

function findfile($location=»,$fileregex=») <
if (!$location or !is_dir($location) or !$fileregex) <
return false;
>

$all = opendir($location);
while ($file = readdir($all)) <
if (is_dir($location.’/’.$file) and $file <> «..» and $file <> «.») <
$subdir_matches = findfile($location.’/’.$file,$fileregex);
$matchedfiles = array_merge($matchedfiles,$subdir_matches);
unset($file);
>
elseif (!is_dir($location.’/’.$file)) <
if (preg_match($fileregex,$file)) <
array_push($matchedfiles,$location.’/’.$file);
>
>
>
closedir($all);
unset($all);
return $matchedfiles;
>

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]);

search for extension: list_files([string], [string], [0], [int 1 | 0]);
returns array: $myArray = list_files([string], [string], [0], [0]);
echo result: list_files([string], [string], [0], [1]);

search for string occurance: list_files([string], [string], [1], [int 1 | 0]);
returns array: $myArray = list_files([string], [string], [1], [0]);
echo result: list_files([string], [string], [1], [1]);

function list_files ( $directory , $stringSearch , $searchHandler , $outputHandler ) <
$errorHandler = false ;
$result = array();
if (! $directoryHandler = @ opendir ( $directory )) <
echo ( «\n» );
return $errorHandler = true ;
>
if ( $searchHandler === 0 ) <
while ( false !== ( $fileName = @ readdir ( $directoryHandler ))) <
if(@ substr ( $fileName , — @ strlen ( $stringSearch )) === $stringSearch ) <
@ array_push ( $result , $fileName );
>
>
>
if ( $searchHandler === 1 ) <
while( false !== ( $fileName = @ readdir ( $directoryHandler ))) <
if(@ substr_count ( $fileName , $stringSearch ) > 0 ) <
@ array_push ( $result , $fileName );
>
>
>
if (( $errorHandler === true ) && (@ count ( $result ) === 0 )) <
echo ( «\n» );
>
else <
sort ( $result );
if ( $outputHandler === 0 ) <
return $result ;
>
if ( $outputHandler === 1 ) <
echo ( «\n» );
>
>
>

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

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

And you would like to transform this array to hierarchy 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.

/**
* This function converts real filesystem path to the string array representation.
*
* for example,
* ‘/home/drapeko/var/y will be converted to $result_array[‘home’][‘drapeko’][‘var’][‘y’]
* ‘/home/drapeko/var/y/file.txt will be converted to $result_array[‘home’][‘drapeko’][‘var’][‘y’]
*
* @param $path realpath of the directory
* @return string string array representation of the path
*/
function pathToArrayStr ( $path ) <
// TODO constants/configs?
$res_path = str_replace (array( ‘:/’ , ‘:\\’ , ‘/’ , ‘\\’ , DIRECTORY_SEPARATOR ), ‘/’ , $path );
// if the first or last symbol is ‘/’ delete it (e.g. for linux)
$res_path = preg_replace (array( «/^\//» , «/\/$/» ), » , $res_path );
// create string
$res_path = ‘[\» . str_replace ( ‘/’ , ‘\’][\» , $res_path ). ‘\’]’ ;

return $res_path ;
>
?>

It simply converts the real path of the file to array string representation.

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

= array();
$check = array();
foreach( $array as $val ) <
$str = pathToArrayStr ( $val , ‘result’ );
foreach( $check as $ck ) <
if ( strpos ( $ck , $str ) !== false ) <
continue 2 ;
>
>
$check [] = $str ;
eval( ‘$result’ . $str . ‘ = array();’ );
>
print_r ( $result );
?>

Heh, how do you find it? This approach has helped me very much. I hope you will find it useful. 🙂

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])

function FileSearch_r ( $Dir , $Search , $SearchType = «search» , $SavePath = 1 ) <
$Array =array();
$D = dir ( $Dir );
while ( false !==( $Entry = $D -> read ()))
if ( $Entry != ‘.’ && $Entry != ‘..’ ) <
$Entry = $Dir . $Entry ;
if ( is_dir ( $Entry )) $Array = array_merge ( $Array , FileSearch_r ( $Entry . ‘/’ , $Search , $SearchType , $SavePath ));
else
if ( $SearchType == «search»
? substr_count ( $Entry , $Search )> 0
🙁 $SearchType == «ext»
? substr ( $Entry ,- strlen ( $Search ))=== $Search
: true ))
$Array []= $Entry ;
>
$D -> close ();
sort ( $Array , SORT_STRING );
if(!(bool) $SavePath ) $Array = str_replace ( $Dir , «» , array_values ( $Array ));
return $Array ;
>
?>

Полный список функций файловой системы PHP 5

Главное меню » Статьи » Полный список функций файловой системы PHP 5

Функции файловой системы позволяют манипулировать папками & файлами из определенного каталога.

Полный перечень функция файловой системы PHP 5

Ниже приведен полный список функций PHP 5, которые используются для управления файловой системы.

Функция в PHP Описание
basename() Возвращает имя файла
chgrp() Изменение группы файлов
chmod() Изменение разрешения файла
chown() Изменение владельца файла
clearstatcache() Очищает кэш состояния файлов
copy() Копирует файл
dirname() Возвращает имя каталога из пути
disk_free_space() Возвращает свободное пространство каталога
disk_total_space() Возвращает размер каталога
fclose() Закрывает открытый файл
feof() Тесты на конец файла в открытом файле
fflush() Сбрасывает буферизованный вывод в открытый файл
fgetc() Возвращает символ из открытого файла
fgetcsv() Анализирует строку из открытого файла, проверка полой CSV
fgets() Возвращает строку из открытого файла
fgetss() Возвращает строку с HTML и PHP теги удалены из открытого файла
file() Считывает файл в массив
file_exists() Проверяет, существует ли или нет файл или каталог
file_get_contents() Считывает файл в строку
file_put_contents() Записывает строку в файл
fileatime() Возвращает время последнего доступа к файлу
filectime() Возвращает время последнего изменения файла
filegroup() Возвращает идентификатор группы файла
fileinode() Возвращает номер inode файла
filemtime() Возвращает время последнего изменения файла
fileOwner() Возвращает идентификатор пользователя(владельца) файла
fileperms() Возвращает права доступа к файлу
filesize() Возвращает размер файла
filetype() Возвращает тип файла
flock() Блокирует или освобождает файл
fnmatch() Соответствует имени файла или строку с заданным шаблоном
eореп() Открывает файл или URL
fpassthru() Считывает из открытого файла, пока EOF, и записывает результат в буфер вывода
fputcsv() Форматирование строки в CSV и записывает его в открытый файл
fputs() Псевдоним FWRITE()
fread() Чтение из открытого файла
fscanf() Обрабатывает данные из открытого файла в соответствии с заданным форматом
fseek() Стремится в открытом файле
fstat() Возвращает информацию об открытом файле
ftell() Возвращает текущую позицию в открытом файле
ftruncate() Усекает открытый файл определенной длины
fwrite() Пишет в открытый файл
glob() Возвращает массив имен файлов/каталогов, соответствующий заданному шаблону
is_dir() Проверяет, является ли файл каталогом
is_executable() Проверяет, является ли файл исполняемым
is_file() Проверяет, является ли файл обычным файлом
is_link() Проверяет, является ли файл ссылку
is_readable() Проверяет, является ли файл для чтения
is_uploaded_file() Проверяет, был ли файл загружен с помощью POST HTTP
is_writable() Проверяет, является ли файл записываемый
is_writeable() Псевдоним is_writable()
lchgrp() Изменение групповой собственности по ссылке
lchown() Изменение владельца-пользователя ссылки
ссылка() Создает жесткую ссылку
linkInfo() Возвращает информацию жесткой ссылки
lstat() Возвращает символьную информацию о соединении
mkdir() Создает каталог
move_uploaded_file() Перемещает загруженный файл
parse_ini_file() Анализирует файл конфигурации
parse_ini_string() Анализирует строку конфигурации
pathInfo() Возвращает информацию о пути к файлу
pclose() Закрывает pipe
popen() Открывает pipe
readFile() Чтение и запись в файл
readlink() Возвращает символьную целевую ссылку
realpath() Возвращает абсолютный путь к файлу
realpath_cache_get() Возвращает запись кэша Realpath
realpath_cache_size() Возвращает размер кэша Realpath
rename() Переименовывает файл или каталог
rewind() Перемотка указателя на файл
rmdir() Удаляет пустой каталог
set_file_buffer() Устанавливает размер буфера открытого файла
stat() Возвращает информацию о файле
symlink() Создает символическую ссылку
tempnam() Создает уникальный временный файл
tmpfile() Создает уникальный временный файл
touch() Устанавливает время доступа и модификации файла
umask() Изменение прав доступа к файлам для файлов
unlink() Удаляет файл

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Файлы и файловая система PHP

3. На странице предвидеть возможность переименования и удаления файла.
4. Организовать файл, в котором будет информация о поездах, направляющимся в Киев (номер поезда, название и время в пути). Используя уже сформированный файл — вывести информацию о поездах, которые в пути не более 6 часов.

И еще одно. Есть страница регистрации, и при завершении регистрации данные должны записываться в БД, но не все, а только те, емейли которых заканчиваются на mail.ru

10.12.2009, 22:56

Друзья необходим код php. Формы и файлы в PHP
1. Составить программу, благодаря которой пользователь может выбрать стиль оформления списков из.

Друзья необходим код php. Формы и файлы в PHP
1. Имеется упорядоченный файл. Вставить в него заданное число таким образом, чтобы упорядоченность.

PHP и система оплата
Возможно ли реализовать, что бы PHP мог получить доступ к примечанию, отправленный на платёжный.

Пишут ли бэкенд система на php?
Таким вопросом конечно нужно было бы задаться раньше), но лучше поздно чем никогда. Есть.

Не работает PHP код. Файлы .php не обрабатываются, хотя, если занести в html, всё работает.
не могу разобраться с проблемой. установила денвер, вроде все работает, но как только начала.

11.12.2009, 11:28 2

а далее просто их записуешь в массив и выводишь в броузер с помощью mysql_fetch_array их выводишь.

Добавлено через 2 минуты
вот если чё не понятно пиши,постараюсь обьяснить

11.12.2009, 11:28

Система оповещания в PHP
Доброго времени уважаемые форумчане! У меня возник вопрос как работает система оповещения.

Платежная система на php
Доброго времени суток ! Устроился на работу c# программистом, а тут бац мне дали платежную систему.

PHP и поисковые система
Здравствуй всем. Хочу сделать одну ххх знает как назвать ее.. Сейчас попробую объяснить. У меня.

Мастер Йода рекомендует:  Что такое блог
Добавить комментарий