Файловая система PHP. Управление файлами и каталогами ERROR: Показываются только листинги PHP файлов

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

Начнём с самого простого: создание каталога в PHP :

mkdir("new_dir");
?>

После запуска этого скрипта у Вас будет создан пустой каталог "new_dir ".

Удалить пустой каталог очень просто. Для этого используется функция rmdir() .

rmdir("new_dir");
?>

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

  1. Открыть каталог.
  2. Считать содержимое.
  3. Закрыть каталог.

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

$dir = opendir("images");
while (($f = readdir($dir)) !== false)
echo $f."
";
closedir($dir);
?>

В результате Вы увидите список всех файлов и каталогов внутри каталога "images ". Также Вы увидите два интересных имени ". " и ".. ". Первый означает "текущий каталог ", а ".. " - родительский.

Теперь подробно о функциях, используемых в этом примере:

  • Функция opendir(string $path) - открывает каталог, находящийся по пути $path , а также возвращает дескриптор, необходимый для работы с этим каталогом.
  • Функция readdir(resource $dir) - считывает текущий элемент в каталоге dir . Текущий элемент задаётся указателем, который сдвигается при каждом вызове. Поэтому получается, что каждый раз эта функция возвращает новый элемент из каталога. Когда все элементы закончились, то функция readdir() возвращает false .
  • Функция closedir(resource $dir) - закрывает каталог dir .

Это все самые важные функции для работы с каталогами в PHP . Однако, хочется добавить ещё одну очень важную деталь по поводу функции rmdir() , которая удаляет каталог. Если Вы внимательно читали, то я написал, что эта функция удаляет "пустой каталог ", то есть в котором нет ни одного файла и каталога (кроме ". " и ".. "). Другими словами, если в каталоге будет хотя бы один файл, то функция rmdir() не сработает . Вот как решить эту проблему Вы узнаете в следующей статье, поэтому подписывайтесь на обновления, чтобы не пропустить её появление.

Открывает файл и привязывает его к дескриптору.
Синтаксис:

Int fopen(string $filename, string $mode, bool $use_include_path=false)

Открывает файл с именем $filename в режиме $mode и возвращает дескриптор открытого файла. Если операция "провалилась", то функция возвращает false. Необязательный параметр use_include_path говорит о том, что, если задано относительное имя файла, его следует искать также и списке путей, используемом инструкциями include() и require().
Обычно этот параметр не используют.
Параметр $mode может принимать следующие значения:
r

Файл открывается только для чтения. Если файла не существует, вызов регистрирует ошибку. После удачного открытия указатель файла устанавливается на его первый байт, т.е. на начало.
r+

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

Создает новый пустой файл. Если на момент вызова уже был файл с таким именем, то он предварительно уничтожается. В случае неверно заданного имени файла вызов "проваливается".

Аналогичен r+, но если файл изначально не существовало, создает его. После этого с файлом можно работать как в режиме чтения, так и записи. Если файл существовал до момента вызова, его содержимое удаляется.
a

Открывает существующий файл в режиме записи, и при этом сдвигает указатель текущей позиции за последний байт файла. Как водится, вызов не успешен в случае отсутствия файла.
a+

Открывает файл в режиме чтения и записи, указатель файла устанавливается на конец файла, при этом содержимое файла не уничтожается. Отличается от a тем, что если файла изначально не существовало, то он создается. Этот режим полезен, если вам нужно что-то дописать в файл, но вы не знаете, создан ли уже такой файл.
Но это еще не полное описание параметра $mode. Дело в том, что в конце любой из строк r,w,a,r+,w+ и a+
может находиться еще один необязательный символ - b или t. Если указан b (или не указан вообще никакой),
то файл открывается в режиме бинарного чтения/записи. Если же это t, то для файла устанавливается режим трансляции символа перевода строки, т.е. он воспринимается как текстовой.

Создает новый временный файл с уникальным именем и открывает его на чтение и запись.
Синтаксис:

Int tmpfile()

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

Открывает файловый указатель процесса (PHP 3, PHP 4, PHP 5)

Описание:

Resource popen(string command, string mode)

Открывает поток к процессу, выполняемую при помощи форкинга (forking) команды, заданной в command.

Возвращает файловый указатель, идентичный возвращаемому функцией fopen(), за исключением того, что он односторонний (может быть использован только для чтения или записи) и должен быть закрыт при помощи pclose(). Этот указатель может быть использован с fgets(), fgetss() и fwrite().

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

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

Пример использования функции popen()

$handle = popen("/bin/ls", "r");
?>

Если команда для выполнения не может быть найдена, будет возвращён действующий ресурс. Это может выглядить странно, но имеет смысл; это даёт вам возможность получить доступ к любому сообщению об ошибке, которое вернёт оболочка:

error_reporting(E_ALL);

Замечание : В случае работы в безопасном режиме, вы можете запускать что-либо только в пределах safe_mode_exec_dir. В настоящее время, использование.. в пути запрещено

Внимание

В случае работы в безопасном режиме, все слова, следующие за начальной командой, рассматриваются как единый аргумент. То есть echo y | echo x будет работать как echo "y | echo x".

Закрывает файл, открытый предварительно функцией fopen().

Синтаксис:

Int fclose(int $fp)

Возвращает false, если файл закрыть не удалось (например, что-то с ним случилось или же разорвалась связь с удаленным хостом).
В противном случае возвращает значение "истина".

Всегда нужно закрывать FTP- и HTTP-соединения, потому что в противном случае
"беспризорный" файл приведет к неоправданному простою канала и излишней загрузке сервера. Кроме того, успешно закрыв соединение, вы будете уверены в том, что все данные были доставлены без ошибок.

pclose()

Закрывает файловый указатель процесса (PHP 3, PHP 4, PHP 5)

Описание:

Int pclose(resource handle)

Закрывает файловый указатель на канал, открытый при помощи popen().

Файловый указатель должен быть действующим и должен быть возвращён успешным вызовом функции popen().

Возвращает статус выхода завершающегося процесса.

Читает из открытого файла определенное количество символов.
Синтаксис:

String fread(int $f, int $numbytes)

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

readfile()

Выводит файл (PHP 3, PHP 4, PHP 5)

Описание:

Int readfile (string filename [, bool use_include_path [, resource context]])

Читает файл и записывает его в буфер вывода.

Параметры:

filename - имя читаемого файла
use_include_path - необязательный параметр; если TRUE, поиск файла будет происходить также в include_path (директива php.ini).
context - потоковый ресурс среды окружения.

Возвращает количество прочитанных из файла байт. В случае возникновения ошибки вернёт FALSE, если только функция не была вызвана как @readfile(), и выведет сообщение об ошибке.

Пример . Принудительный старт скачивания файла

$file = "monkey.gif";

if (file_exists($file)) {
header("Content-Description: File Transfer");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=".basename($file));
header("Content-Transfer-Encoding: binary");
header("Expires: 0");
header("Cache-Control: must-revalidate");
header("Pragma: public");
header("Content-Length: " . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
?>

В результате работы вышеприведенного кода появится нечто подобное:

fflush()

Сброс буфера вывода в файл (PHP 4 >= 4.0.1, PHP 5)

Описание:

Bool fflush (resource handle)

Данная функция осуществляет сброс буферизованных данных в файл, на который указывает handle.

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

stream_set_write_buffer()

Устанавливает файловый буфер данного потока (PHP 4 >= 4.3.0, PHP 5)

Описание:

Int stream_set_write_buffer (resource stream, int buffer)

Вывод в файл с использованием fwrite() использует в штатном режиме буфер 8K. Это значит, что если имеется два процесса, желающих вывести данные в один и тот же поток вывода (файл), каждый из этих процессов приостанавливается после вывода каждых 8К для того, чтобы позволить вывести данные другому процессу. Stream_set_write_buffer() устанавливает буферизацию для операций записи в данный файлоуказующий поток. Если buffer установлен 0, то операция записи является небуферизованной. Это гарантирует, что все процессы записи fwrite() завершаются до того, как другим процессам открывается доступ к записи в тот же поток вывода.

Функция возвращает 0 при успешном завершении, или EOF если запрос прерывания ввода/вывода был отклонен.

Следующий пример демонстрирует использование stream_set_write_buffer() для создания небуферизованного потока

$fp = fopen($file, "w");
if ($fp) {
stream_set_write_buffer($fp, 0);
fwrite($fp, $output);
fclose($fp);
}
?>

set_file_buffer()

Псевдоним функции stream_set_write_buffer() (PHP 3 >= 3.0.8, PHP 4 >= 4.0.1, PHP 5)

Описание: функция является псевдонимом для фукнции stream_set_write_buffer().

highlight_file()

Синтаксис:






Source Display


if(!$script) {
echo "
ERROR: Укажите имя сценария
";
} else {

echo "

Листинг файла: $PATH_INFO

n
n";
if(!@highlight_file($script))
echo "Ошибка вывода файла";
} else {
echo "

";
}
}

echo "



Запись в файл.
Синтаксис:

Int fwrite(int $f, string $str)

Записывает в файл $f все содержимое строки $str. Эта функция составляет пару для fread(), действуя
"в обратном направлении".

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

Читает из файла одну строку, заканчивающуюся символом новой строки n.
Синтаксис:

String fgets(int $f, int $length)

Этот символ также считывается и включается в результат. Если строка в файле занимает больше $length-1 байтов, то возвращаются только ее $length-1 символов. Функция полезна, если вы открыли файл и хотите "пройтись" по всем ее строкам. Однако даже в этом случае (и быстрее) будет воспользоваться функцией File().
Стоит также заметить, что эта функция (как и функция fread()) в случае текстового режима в Windows заботиться о преобразовании пар rn в один символ n.

Полный аналог fwrite().

Синтаксис:

Int fputs(int $f, string $str)

fgetcsv()

Функция для работы с одним из форматов файлов, в котором может сохранять данные Excel.
Синтаксис:

List fgetcsv(int $f, int $length, char $delim=",")

Функция читает строку из файла, заданного дескриптором $f, и разбивает ее по символу $delim. Параметр $delim должен обязательно быть строкой из одного символа, в противном случае принимается во внимание только первый символ этой строки. Функция возвращает получившийся список или false, если строки кончились. Параметр $length задает максимальную длину строки точно так же, как это делается в fgets().
Пустые строки в файле не игнорируются, а возвращаются как список из одного элемента - пустой строки.
Пример:

$f=fopen("file.csv","r") or die("Ошибка");
for($i=0; $data=fgetcsv($f, 1000, ";"); $i++) {
$num = count($data);
if($num==1 && $data==="") continue;
echo "

Строка номер $i ($num полей):

";
for($c=0; $c<$num; $c++)
print "[$c]: $data[$c]
";
}
fclose($f);

file_get_contents()

Получить содержимое файла в виде одной строки (PHP 4 >= 4.3.0, PHP 5)

Описание:

String file_get_contents(string filename
[, bool use_include_path [, resource context [, int offset [, int maxlen]]]])

Данная функция идентична функции file() с той только разницей, что содержимое файла возвращается в строке, начиная с указанного смещения offset и до maxlen байтов. В случае неудачи, file_get_contents() вернёт FALSE.

Использование функции file_get_contents() наиболее предпочтительно в случае необходимости получить содержимое файла целиком, поскольку для улучшения производительности функция использует алгоритм "memory mapping" (если поддерживается операционной системой).

Замечание: Если вы открываете URI содержащий спецсимволы, такие как пробел, вам нужно закодировать URI при помощи urlencode().

Список изменений

Версия Описание
5.0.0 Добавлена поддержка контекста.
5.1.0 Добавлены аргументы offset и maxlen.

Примечания

Замечание

Внимание

file_put_contents()

Записать строку в файл (PHP 5)

Описание:

Int file_put_contents(string filename, mixed data [, int flags [, resource context]])

Функция идентична последовательному вызову функций fopen(), fwrite() и fclose(). Возвращаемым функцией значением является количество записанных в файл байтов.

Параметр flags может принимать значение FILE_USE_INCLUDE_PATH и/или FILE_APPEND. Используйте FILE_USE_INCLUDE_PATH с осторожностью.

Также вы можете передать (одномерный) массив в качестве параметра data. Это будет эквивалентно вызову file_put_contents($filename, join("", $array)).

Начиная с версии PHP 5.1.0, вы также можете передавать ресурс потока в качестве аргумента data. В результате оставшийся буфер этого потока будет скопирован в указанный файл. Это похоже на использование stream_copy_to_stream().

Замечание : Эта функция безопасна для обработки данных в двоичной форме.

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

Читает содержимое файла и помещает его в массив (PHP 3, PHP 4, PHP 5)

Описание:

Array file (string filename [, int use_include_path [, resource context]])

Данная функция идентична функций readfile() с той разницей, что file() возвращает содержимое прочитанного файла в виде массива. Каждый элемент возвращенного массива содержит соответствующую строку с символами конца строки. В случае ошибки, функция file() возвращает FALSE.

Вы можете указать необязательный параметр use_include_path, равный "1", если хотите, чтобы поиск файла также производился в каталогах, указанных директивой include_path.

// Получить содержимое файла в виде массива. В данном примере мы используем
// обращение по протоколу HTTP для получения HTML-кода с удаленного сервера.
$lines = file("http://www.example.com/");

// Осуществим проход массива и выведем номера строк и их содержимое в виде HTML-кода.
foreach ($lines as $line_num => $line) {
echo "Строка #{$line_num} : " . htmlspecialchars($line) . "
\n";
}

// Второй пример. Получим содержание web-страницы в виде одной строки.
// См.также описание функции file_get_contents().
$html = implode("", file ("http://www.example.com/"));
?>

Для этой функции вы можете использовать URL в качестве имени файла, если была включена опция "fopen wrappers". Смотрите более подробную информацию об определении имени файла в описании функции fopen(), а также список поддерживаемых протоколов URL в Прил. M.

Замечание : Каждая строка в полученном массиве будет завершаться символами конца строки, поэтому, если вам будет нужно избавиться от этих символов, вы будете должны использовать функцию rtrim().

Замечание : Если у вас возникают проблемы с распознаванием PHP окончания строк при чтении файлов на Macintosh-совместимом компьютере или при чтении файлов, созданных на Macintosh-совместимом компьютере, необходимо включить опцию auto_detect_line_endings.

Замечание : Начиная с PHP 4.3.0, вы можете использовать функцию file_get_contents() для получения содержимого файла в виде строки.

Начиная с PHP 4.3.0, функция file() корректно обрабатывает двоичные данные.

Замечание : Поддержка контекста была добавлена в PHP 5.0.0.

Внимание

При использовании SSL, Microsoft IIS нарушает протокол, закрывая соединение без отправки индикатора close_notify. PHP сообщит об этом как о "SSL: Fatal Protocol Error" в тот момент, когда вы достигнете конца данных. Чтобы обойти это, вы должны установить error_reporting на уровень, исключающий E_WARNING. PHP версий 4.3.7 и старше умеет определять, что на стороне сервера находится проблемный IIS и не выводит предупреждение. Если вы используете fsockopen() для создания ssl:// сокета, вы сами отвечаете за определение и подавление этого предупреждения.

fpassthru()

Выводит все оставшиеся данные из файлового указателя (PHP 3, PHP 4, PHP 5)

Описание:

Int fpassthru (resource handle)

Читает указанный файловый указатель с текущей позиции до EOF (конца файла) и записывает результат в буфер вывода.

Если происходит ошибка, fpassthru() возвращает FALSE. В ином случае, fpassthru() возвращает количество символов, прочтнных из handle и переданных на вывод.

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

Вам может понадобиться вызвать rewind() чтобы сбросить файловый указатель на начало файла, если вы уже записывали данные в файл.

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

Замечание: Во время использования fpassthru() на бинарном файле в сисиемах Windows, вы должны убедиться в том, что открыли файл в бинарном режиме при помощи добавления b к режиму открытия файла, использованному в fopen().

Использование fpassthru() с бинарными файлами

// открываем файл в бинарном режиме
$name = ".\public\dev\img\ok.png";
$fp = fopen($name, "rb");

// отправляем нужные заголовки
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));

// скидываем картинку и останавливаем выполнение скрипта
fpassthru($fp);
exit;

Указатель конца файла.
Синтаксис:

Int feof(int $f)

Возвращает true, если достигнут конец файла (то есть если указатель файла установлен за концом файла).

$f=fopen("myfile.txt","r");
while(!feof($f))
{ $str=fgets($f);
// Обрабатываем очередную строку $str

}
fclose($f);

Устанавливает указатель файла на определенную позицию.
Синтаксис:

Int fseek(int $f, int $offset, int $whence=SEEK_SET)

Устанавливает указатель файла на байт со смещением $offset (от начала файла, от его конца или от текущей позиции, в зависимости от параметра $whence).
Это может и не сработать, если дескриптор $f ассоциирован не с обычным локальным файлом, а с соединением HTTP или FTP.

Параметр $whence задает с какого места отсчитывается смещение $offset. В PHP для этого существуют три константы, равные, соответственно, 0, 1 и 2:

устанавливает позицию начиная с начала файла;

отсчитывает позицию относительно текущей позиции;

отсчитывает позицию относительно конца файла;

В случае использования последних двух констант параметр $offset вполне может быть отрицательным (а при применении SEEK_END он будет отрицательным наверняка).
В случае успешного завершения эта функция возвращает 0, а в случае неудачи -1.

Возвращает положение указателя файла.
Синтаксис:

Int ftell(int $f)

rewind()

Сбрасывает курсор у файлового указателя (PHP 3, PHP 4, PHP 5)

Описание:

Bool rewind(resource handle)

Сбрасывает курсор файлового указателя handle на начало файлового потока.

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

Замечание : Если вы открыли файл в режиме "дописать в конец" ("a"), любые данные, которые вы записываете, будут дописаны в конец файла, независимо от положения курсора.

file_exists

Проверяет существование вызываемого файла.
Синтаксис:

Bool file_exists(string filename)

Возвращает true, если файл с именем filename существует на момент вызова. Следует использовать эту функцию с осторожностью.
Например, следующий код никуда не годится с точки зрения безопасности:

If(!file_exists($fname))
$f=fopen($fname,"w");
else
$f=fopen($fname,"r");

Дело в том, что между вызовом file_exists() и открытием файла в режиме w проходит некоторое время, в течение которого другой процесс может вклиниться и подменить используемый нами файл. Данная проблема выходит на передний план при написании сценария счетчика.
Функция не работает с удаленными файлами, файл должен находиться в доступной для сервера файловой системе.
Результаты функции кэшируются, см. функцию clearstatcache().

filetype

Возвращает тип файла.
Синтаксис:

String filetype(string filename)

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

file - обычный файл;
dir - каталог;
link - символическая ссылка;
fifo - fifo-канал;
block - блочно-ориентированное устройство;
char - символьно-ориентированное устройство;
unknown - неизвестный тип файла;

Проверка существования обычного файла.
Синтаксис:

Bool is_file(string filename)

Возвращает true, если filename - обычный файл.

Проверка существования каталога.
Синтаксис:

Bool is_dir(string filename)

Возвращает true, если каталог filename существует.

Bool is_link(string filename)

Возвращает true, если filename - символическая ссылка.
Функция не работает под Windows.

is_readable

Проверка существования файла, доступного для чтения.
Синтаксис:

Bool is_readable(string filename)

Возвращает true, если файл может быть открыт для чтения.
Обычно PHP осуществляет доступ к файлу с привелегиями пользователя, запускающего web-сервер (часто "nobody").
Соображения безопасности должны приниматься в расчет.

is_writeable

Проверка существования файла, доступного для записи.
Синтаксис:

Bool is_writeable(string filename)

Возвращает true, если в файл можно писать. Обычно PHP осуществляет доступ к файлу с привелегиями пользователя, запускающего web-сервер (часто "nobody"). Соображения безопасности должны приниматься в расчет.

is_executable

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

Bool is_executable(string filename)

Возвращает true, если файл filename - исполняемый.

is_uploaded_file

Проверка существования файла, загруженного методом HTTP POST.

Синтаксис:

Bool is_uploaded_file(string filename)

Возвращает true, если файл с именем filename был загружен на сервер посредством HTTP POST.

Часто это полезно, чтобы убедиться, что пользователи из злого умысла не пытались заставить сценарий работать с теми файлами, с которыми им работать не следует.

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

Синтаксис:

Array stat(string $filename)

Этот массив всегда содержит следующие элементы с указанными ключами:

0 - устройство;
1 - Номер узла inode;
2 - атрибуты защиты файла;
3 - число синонимов ("жестких" ссылок) файла;
4 - идентификатор uid владельца;
5 - идентификатор gid группы;
6 - тип устройства;
7 - размер файла в байтах;
8 - время последнего доступа в секундах, прошедших с 1 января 1970 года;
9 - время последней модификации содержимого файла;
10 - время последнего изменения атрибутов файла;
11 - размер блока;
12 - число занятых блоков;

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

Если $filename задает не имя файла, а имя символической ссылки, то всетаки будет возвращена информация о том файле, на который ссылается эта ссылка (а не о ссылке).

fileinode()

Получить номер inode файла (PHP 3, PHP 4, PHP 5)

Описание:

Int fileinode (string filename)

Функция возвращает номер inode файла или FALSE в случае возникновения ошибки.

Замечание

fileowner()

Получить идентификатор владельца файла (PHP 3, PHP 4, PHP 5)

Описание:

Int fileowner (string filename)

Функция возвращает числовой идентификатор владельца указанного файла или FALSE в случае возникновения ошибки. Чтобы получить имя владельца в виде строки, используйте функцию posix_getpwuid().

Замечание : Результаты этой функции кэшируются. Более подробную информацию смотрите в разделе clearstatcache().

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми упаковщиками url.

fileperms()

Получить информацию о правах на файл (PHP 3, PHP 4, PHP 5)

Описание:

Int fileperms (string filename)

Функция возвращает информацию о правах на указанный файл или FALSE в случае возникновения ошибки.

Замечание : Результаты этой функции кэшируются. Более подробную информацию смотрите в разделе clearstatcache().

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми упаковщиками url. Список упаковщиков, поддерживаемых семейством функций stat(), смотрите в Прил. M.

Вывод прав в восмеричном представлении

echo substr(sprintf("%o", fileperms("/tmp")), -4);
echo substr(sprintf("%o", fileperms("/etc/passwd")), -4);
?>

Это выведет:

1777
0644

Вывод полной информации о правах

$perms = fileperms("/etc/passwd");

if (($perms & 0xC000) == 0xC000) {
// Сокет
$info = "s";
} elseif (($perms & 0xA000) == 0xA000) {
// Символическая ссылка
$info = "l";
} elseif (($perms & 0x8000) == 0x8000) {
// Обычный
$info = "-";
} elseif (($perms & 0x6000) == 0x6000) {
// Специальный блок
$info = "b";
} elseif (($perms & 0x4000) == 0x4000) {
// Директория
$info = "d";
} elseif (($perms & 0x2000) == 0x2000) {
// Специальный символ
$info = "c";
} elseif (($perms & 0x1000) == 0x1000) {
// Поток FIFO
$info = "p";
} else {
// Неизвестный
$info = "u";
}

// Владелец
$info .= (($perms & 0x0100) ? "r" : "-");
$info .= (($perms & 0x0080) ? "w" : "-");
$info .= (($perms & 0x0040) ?
(($perms & 0x0800) ? "s" : "x") :
(($perms & 0x0800) ? "S" : "-"));

// Группа
$info .= (($perms & 0x0020) ? "r" : "-");
$info .= (($perms & 0x0010) ? "w" : "-");
$info .= (($perms & 0x0008) ?
(($perms & 0x0400) ? "s" : "x") :
(($perms & 0x0400) ? "S" : "-"));

// Мир
$info .= (($perms & 0x0004) ? "r" : "-");
$info .= (($perms & 0x0002) ? "w" : "-");
$info .= (($perms & 0x0001) ?
(($perms & 0x0200) ? "t" : "x") :
(($perms & 0x0200) ? "T" : "-"));

echo $info;
?>

Результат:

R--r--r--

fnmatch()

Совпадает ли имя файла с шаблоном (PHP 4 >= 4.3.0, PHP 5)

Описание:

Bool fnmatch (string pattern, string string [, int flags])

fnmatch() проверяет, совпадает ли переданный параметр string с указанным шаблоном подстановок оболочки (shell wildcard) pattern.

Эта функция полезна при рабоде с именами файлов, хотя может быть использована и на обычной строке. Среднестатистический пользователь знаком с подстановками оболочки, как минимум в их простейшей форме из подстановок "?" и "*", так что использование fnmatch() вместо ereg() или preg_match() для поиска в пользовательской части сайта может быть намного удобнее для пользователей, не знакомых с регулярными выражениями.

Проверяет, соответствует ли цвет шаблону подстановок оболочки.

if (fnmatch("*gry", $color)) {
echo "some form of gray ...";
}
?>

На данный момент эта функция недоступна в Windows и других POSIX-несовместимых системах.

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

Описание:

Array fstat (resource handle)

Собирает статистическую информацию о открытом файле по файловому указателю handle. Эта функция похожа на stat(), за исключением того, что она работает с открытым файловым указателем, а не именем файла.

Возвращает массив со статистической информацией на файл; формат массива подробно описан на странице описания функции stat().

Пример использования функции fstat()

// открываем файл
$fp = fopen("/etc/passwd", "r");

// собираем статистику
$fstat = fstat($fp);

// закрываем файл
fclose($fp);

// отображаем только ассоциативную часть
print_r(array_slice($fstat, 13));

Array
=> 771
=> 488704
=> 33188
=> 1
=> 0
=> 0
=> 0
=> 1114
=> 1061067181
=> 1056136526
=> 1056136526
=> 4096
=> 8
)

Замечание

is_writable()

Определяет, доступен ли файл для записи (PHP 4, PHP 5)

Описание:

Bool is_writable (string filename)

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

Не забывайте, что PHP может обращаться к файлу от имени того пользователя, от которого запущен веб-сервер (обычно "nobody"). Ограничения безопасного режима не принимаются во внимание.

Замечание : Результаты этой функции кэшируются. Более подробную информацию смотрите в разделе clearstatcache().

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми упаковщиками url

Получает информацию о файле или символической ссылке (PHP 3 >= 3.0.4, PHP 4, PHP 5)

Описание:

Замечание : Результаты этой функции кэшируются. Более подробную информацию смотрите в разделе clearstatcache().

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми упаковщиками url.

fileatime

Возвращает время последнего доступа к файлу.

Синтаксис:

Int fileatime(string filename)

Если файл не обнаружен, возвращает false.

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

filemtime

Возвращает время последнего изменения файла или false в случае отсутствия файла.

Синтаксис:

Int filemtime(string $filename)

filectime

Возвращает время создания файла.

Синтаксис:

Int filectime(string $filename)

filesize

Возвращает размер файла в байтах или false, если файла не существует.

Синтаксис:

Int filesize(string $filename)

Устанавливает время модификации.

Синтаксис:

Int touch(string $filename [, int $timestamp])

Устанавливает время модификации указанного файла $filename равным $timestamp (в секундах, прошедших с 1 января 1970 года).

Если второй параметр не указан, то подразумевается текущее время. В случае ошибки возвращает false.

Если файл с указанным именем не существует, он создается пустым.

Изменяет режим доступа к файлу или каталогу(PHP3, PHP4, PHP5)

Описание:



// восьмеричное, верный способ
?>

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

1 - доступ на выполнение,
2 - доступ на запись,
4 - доступ на чтение.

Более подробно о системе прав в системах Unix вы можете узнать с помощью команд "man 1 chmod" and "man 2 chmod".

//Доступ на запись и чтение для владельца, нет доступа для других




chmod("/somedir/somefile", 0755);


?>

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

Замечание: Текущим пользователем является пользователь, от имени которого выполняется PHP. Возможно, что этот пользователь будет отличаться от пользователя, под именем которого вы получаете доступ к командной оболочке или учетной записи FTP.

Замечание: Когда безопасный режим включён, PHP проверяет имеет ли файл или директория, с которой вы работаете, такой же UID, как и выполняемый скрипт. Кроме того, вы не можете устанавливать SUID, SGID и "липкие" биты.

Источник: http://www.php.ru/manual/function.chmod.html

file_exists()

Проверить наличие указанного файла или каталога (PHP 3, PHP 4, PHP 5)

Описание:

Bool file_exists (string filename)

Возвращзает TRUE, если файл или каталог с именем, указанным в параметре filename, существует; возвращает FALSE в обратном случае.

На платформах Windows, для проверки наличия файлов на сетевых ресурсах, используйте имена, подобные //computername/share/filename или \\computername\share\filename.

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

$filename = "/path/to/foo.txt";

if (file_exists($filename)) {
echo "The file $filename exists";
} else {
echo "The file $filename does not exist";
}
?>

Замечание : Результаты этой функции кэшируются. Более подробную информацию смотрите в разделе clearstatcache().

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми упаковщиками url.

filegroup()

Получить идентификатор группы файла (PHP 3, PHP 4, PHP 5)

Описание:

Int filegroup (string filename)

Функция возвращает идентификатор группы файла в виде числа. Для получения имени группы в виде строки используйте функцию posix_getgrgid(). В случае возникновения ошибки функция возвращает FALSE и генерируется сообщение об ошибке уровня E_WARNING.

Замечание : Результаты этой функции кэшируются. Более подробную информацию смотрите в разделе clearstatcache().

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми упаковщиками url.

basename

Выделяет имя файла из пути.
Синтаксис:

String basename(string $path)

Выделяет основное имя из пути $path
Примеры:

Echo basename("/home/somebody/somefile.txt"); // выводит "somefile.txt"
echo basename("/"); // ничего не выводит
echo basename("/."); // выводит "."
echo basename("/./"); // также выводит "."
echo basename("/home/somebody/somefile.php",".php"); // выводит "somefile"

Функция basename() не проверяет существование файла. Она просто берет часть строки после самого правого слеша и возвращает ее.

Эта функция правильно обрабатывает как прямые, так и обратные слеши под Windows.

Выделяет имя каталога.
Синтаксис:

String dirname(string $path)

Возвращает имя каталога, выделенное из пути $path. Функция довольно "разумна" и умеет выделять нетривиальные ситуации, которые описаны в примерах:

Echo dirname("/home/file.txt"); // выводит "/home"
echo dirname("../file.txt"); // выводит ".."
echo dirname("/file.txt"); // выводит "/" под Unix, "" под Windows
echo dirname("/"); // то же самое
echo dirname("file.txt"); // выводит "."

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

Генерирует уникальное имя файла в определенном каталоге.
Синтаксис:

String tempnam(string $dir, string $prefix)

Генерирует имя файла в каталоге $dir с префиксом $prefix в имени, причем так, чтобы созданный под этим именем в будущем файл был уникален. Для этого к строке $prefix присоединяется некое случайное число.
Например, вызов tempnam("/tmp","temp") может возвратить /tmp/temp3a6b243c.
Если такое имя нужно создать в текущем каталоге, передайте $dir="."

realpath

Преобразует относительный путь в абсолютный.
Синтаксис:

String realpath(string $path)

Преобразует относительный путь $path в абсолютный, т.е. начинающийся от корня.
Пример:

Echo realpath("../t.php"); // например, /home/t.php
echo realpath("."); // выводит имя текущего каталога

Файл, который указан в параметре $path, должен существовать, иначе функция возвратит false.

(PHP 3, PHP 4, PHP 5)

rename -- Переименовывает файл или директорию
Описание

Bool rename (string oldname, string newname [, resource context])

Пытается переименовать oldname в newname.
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Пример использования функции rename()

?>

Замечание: В версиях PHP ниже 4.3.3, функция rename() не могла переименовать файлы, находящиеся на другом разделе в ОС, основанных на *nix.
Замечание: Начиная с версии PHP 5.0.0, функция rename() также может быть использована с некоторыми обвёртками URL.

Замечание: Обвёртка, используемая в oldname ОБЯЗАНА совпадать с обвёрткой, используемой в newname.
Замечание: Атрибут context был добавлен начиная с версии PHP 5.0.0.

Находит файловые пути, совпадающие с шаблоном (PHP 4 >= 4.3.0, PHP 5)

Описание:

Array glob (string pattern [, int flags])

Функция glob() ищет все пути, совпадающие с шаблоном pattern согласно правилам, используемым в функции glob() библиотеки libc, которые похожи на правила, используемые большинством распространённых оболочек. Раскрытие тильды или подстановки параметров не совершаются.

Возвращает массив, который содержит совпадающие файлы/директории или FALSE в случае ошибки.

Допустимые флаги:

GLOB_MARK - Добавляет слеш к каждому возвращаемому предмету
GLOB_NOSORT - Возвращает файлы в таком виде, в котором они содержатся в директории (без сортировки)
GLOB_NOCHECK - Возвращает шаблон поиска, если с его помощью не был найден ни один файл.
GLOB_NOESCAPE - Обратные слеши не экранируют метасимволы
GLOB_BRACE - Раскрывает {a,b,c} для совпадения с "a", "b" или "c"
GLOB_ONLYDIR - Возвращает только директории, совпадающие с шаблоном

Замечание : В версиях ниже PHP ниже 4.3.3 GLOB_ONLYDIR был не доступен в Windows и других системах, не использующих библиотеку GNU C.

Удобный способ, как при помощи glob() можно заменить opendir() и её друзей.

foreach (glob("*.txt") as $filename) {
echo "$filename size " . filesize($filename) . "\n";
}
?>

Результат будет примерно таким:

Funclist.txt size 44686
funcsummary.txt size 267625
quickref.txt size 137820

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

pathinfo()

Возвращает информацию о пути к файлу (PHP 4 >= 4.0.3, PHP5)

Описание:

Array pathinfo(string path [, int options])

pathinfo() возвращает ассоциативный массив, который содержит информацию о пути path. Возвращаемый массив состоит из следующих элементов: dirname, basename и extension.

Вы можете указать, какие элементы будут возвращены при помощи необязательного параметра options. Он состоит из PATHINFO_DIRNAME, PATHINFO_BASENAME, PATHINFO_EXTENSION и PATHINFO_FILENAME (появилась в PHP 5.2.0). По умолчанию возвращаются все элементы.

Пример использования функции pathinfo()

$path_parts = pathinfo("/www/htdocs/index.html");

echo $path_parts["dirname"], "\n";
echo $path_parts["basename"], "\n";
echo $path_parts["extension"], "\n";
?>

Результат:

/www/htdocs
index.html
html

Копирует файл.
Синтаксис:

Bool copy(string $src, string $dst)

Копирует файл с именем $src в файл с именем $dst. При этом, если файл $dst на момент вызова существовал, осуществляется его перезапись.
Функция возвращает true, если копирование прошло успешно, а в случае провала - false.
Функция не выполняет переименования файла, если его новое имя расположено в другой файловой системе (на другой смонтированной системе в Unix или на другом диске в Windows).

Удаление файла.
Синтаксис:

Bool unlink(string $filename)

Удаляет файл с именем $filename. В случае неудачи возвращает false, иначе - true.
Надо заметить, что файл удаляется только в том случае, если число "жестких" ссылок на него стало равным 0.
Правда, эта схема специфична для Unix-систем.

Считывает файл и разбивает его по строкам.
Синтаксис:

List file(string $filename)

Считывает файл с именем $filename целиком и возвращает массив-список, каждый элемент которого соответствует строке в прочитанном файле.
Неудобство этой функции состоит в том, что символы конца строки (обычно n), не вырезаются из строк файла, а также не транслируются, как это делается для текстовых файлов.

move_uploaded_file()

Перемещает загруженный файл в новое место (PHP 4 >= 4.0.3, PHP 5)

Описание:

Bool move_uploaded_file(string filename, string destination)

Эта функция проверяет, является ли файл filename загруженным на сервер (переданным по протоколу HTTP POST). Если файл действительно загружен на сервер, он будет перемещён в место, указанное в аргументе destination.

Если filename не является загруженным файлов, никаких действий не предпринимается и move_uploaded_file() возвращает FALSE.

Если filename является загруженным файлом, но не может быть перемещён по каким-либо причинам, никакие действия не предпринимаются и move_uploaded_file() возвращает FALSE. Кроме того, отображается предупреждение.

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

Замечание: На move_uploaded_file() не распространяются нормальные UID-ограничения режима безопасный режим. Это не является нарушением безопасности, потому что move_uploaded_file() оперирует лишь теми файлами, которые загружены на сервер через PHP. Функция move_uploaded_file() принимает во внимание как безопасный режим, так и open_basedir. Тем не менее, ограничения накладываются лишь на параметр destination, чтобы разрешить перемещение загруженных файлов, так как параметр filename может конфликтовать с этими ограничениями. move_uploaded_file() гарантирует безопасность этой операции, работая лишь с теми файлами, которые были загружены через PHP.

Внимание

Если файл destination уже существует, он будет перезаписан.

ftruncate

Усекает файл.
Синтаксис:

Bool ftruncate(int $f, int $newsize)

Эта функция усекает открытый файл $f до размера $newsize. Разумеется, файл должен быть открыт в режиме, разрешающим запись.
Например, следующий код очищает весь файл:

Ftruncate($f,0);

highlight_file()

Вывод содержимого файла с цветовой разметкой.

Синтаксис:

Boolean highlight_file(string filename);

Имя или путь файла указывается в аргументе. Цвета выделения синтаксиса определяются в файле конфигурации PHP. Возвращает true или false при ошибке.

Например, чтобы заставить сервер Apache при получении запроса с URL, содержащего значение вида "http://имя.сервера/source/путь/к/файлу.php", выводит листинг файла "http://имя.сервера/source/путь/к/файлу.php", сделайте следующее. Добавьте в файл httpd.conf следующий фрагмент:

# Используем директиву "ForceType" чтобы указать,
# что значение source в URL - не каталог, а имя сценария PHP

ForceType application/x-httpd-php

Создайте в корневом web-каталоге следующий файл с именем source:


Source Display

$script = getenv ("PATH_TRANSLATED");
if(!$script) {
echo "
ERROR: Укажите имя сценария
";
} else {
if(ereg("(.php|.inc)$",$script)) {
echo "

Листинг файла: $PATH_INFO

n
n";
if(!@highlight_file($script))
echo "Ошибка вывода файла";
} else {
echo "

ERROR: Показываются только листинги PHP файлов

";
}
}

echo "


Распечатано: ".date("Y/M/d H:i:s",time());


Немедленная запись всех изменений в файле.
Синтаксис:

Void fflush(int $f)

Заставляет PHP немедленно записать на диск все изменения, которые производились до этого с открытым файлом $f. Что это за изменения? Дело в том, что для повышения производительности все операции записи в файл буферизируются: например, вызов fputs($f, "Это строка!") не приводит к непосредственной записи данных на диск - сначала они попадают во внутренний буфер (обычно размером 8К). Как только буфер заполняется, его содержимое отправляется на диск, а сам он очищается, и все повторяется вновь. Особенный выигрыш от буферизации чувствуется в сетевых операциях, когда просто глупо отправлять данные маленькими порциями.

set_file_buffer

Устанавливает размер буфера.
Синтаксис:

Int set_file_buffer(int $f, int $size)

Эта функция устанавливает размер буфера, о котором говорилось выше, для указанного открытого файла $f.
Чаще всего она используется так:

Set_file_buffer($f,0);

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

Описание:

Bool flock(resource handle, int operation [, int &wouldblock])

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

Замечание: flock() является обязательным под Windows.

flock() применяется к handle, который должен быть указателем на открытый файл. Параметр operation может принимать следующие значения:

Чтобы установить общее запирание (чтение), установите operation в значение LOCK_SH (или 1, в случае версии PHP ниже 4.0.1).
- Чтобы установить эксклюзивное запирание (запись), установите operation в значение LOCK_EX (или 2, в случае версии PHP ниже 4.0.1).
- Чтобы отпереть файл (после общего или эксклюзивного запирания), установите operation в значение LOCK_UN (или 3, в случае версии PHP ниже 4.0.1).
- Если вы не хотите, чтобы flock() блокировал файл при запирании, добавьте LOCK_NB (или 4, при использовании версии PHP ниже 4.0.1) к параметру operation.

flock() позволяет вам реализовывать простую модель чтения/записи, которая может быть использована практически на любой платформе (включая большинство проивзодных от Unix платформ, и даже Windows). Необязательный третий аргумент устанавливается в TRUE, если запирание также блокирует (код ошибки EWOULDBLOCK). Блокировка снимается при помощи этой же функции fclose() (которая также автоматически вызывается при завершении выполнения скрипта).

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

Пример использования функции flock()

$fp = fopen("/tmp/lock.txt", "w+");
if (flock($fp, LOCK_EX)) { // выполнить эксплюзивное запирание
fwrite($fp, "Что-нибудь пишем\n");
flock($fp, LOCK_UN); // отпираем файл
} else {
echo "Не могу запереть файл!";
}
fclose($fp);
?>

Замечание: Из-за того, что функции flock() необходим указатель на файл, вам может понадобиться воспользоваться специальным запирающим файлом для того, чтобы ограничить доступ к файлу, который вы намерены очищать путём открытыя его в режиме записи (используя "w" или "w+" в качестве аргумента функции fopen()).

Внимание

flock() не будет работать на NFS и многих других сетевых файловых системах. Обратитесь к документации вашей операционной системы для получения дополнительной информации.

В некоторых операционных системах flock() реализован на уровне процессов. При использовании многопоточных серверных API, таких как ISAPI, вы не можете полагаться на flock() для защиты ваших файлов от дугих PHP-скриптов, которые работают в параллельном потоке на том же сервере!

flock() не поддерживается на старых файловых системах вроде FAT и его производных, так что всегда будет возвращать FALSE в этом окружении (это особенно касается пользователей Windows 98).

parse_ini_file()

Обрабатывает конфигурационный файл (PHP 4, PHP 5)

Описание:

Array parse_ini_file (string filename [, bool process_sections])

parse_ini_file() загружает ini-файл, указанный в аргументе filename, и возвращает его настройки в виде ассоциативного массива. Установив последний аргумент process_sections в TRUE, вы получаете многомерный массив, который включает как название отдельных настроек, так и секции. По умолчанию process_sections равен FALSE

Замечания :

• Эта функция не имеет никакого отношения к файлу php.ini. К моменту выполнения вашего скрипта, он уже обработан. Эта функция может быть использована для загрузки настроек вашего собственного приложения.
• Если значение в ini-файле содержит прочие символы, кроме букв и цифр, оно должно заключаться в двойные кавычки (").
• Начиная с версии PHP 4.2.1, на поведение этой функции влияет безопасный режим и open_basedir.
• Начиная с версии PHP 5.0, эта функция также обрабатывает переводы строк в значениях.

Существует зарезервированные слова, которые вы не можете использовать в качестве ключей в ini-файлах. Такими словами являются следующие: null, yes, no, true и false.

Структура ini-файла похожа на структуру php.ini.

Константы также могут быть обработаны в ini-файле, так что если вы объявите константу в виде значения для ini-файла до вызова parse_ini_file(), она (константа) будет правильно обработана. Таким образом обрабатываются только значения. Например:

Содержимое sample.ini

; Это пример файла настроек
; Комментарии начинаются с ";", как в php.ini


one = 1
five = 5
animal = BIRD


path = /usr/local/bin
URL = ""

Пример использования функции parse_ini_file()

define("BIRD", "Dodo bird");

// Обрабатываем без секций
$ini_array = parse_ini_file("sample.ini");
print_r($ini_array);

// Обрабатываем с секциями
$ini_array = parse_ini_file("sample.ini", true);
print_r($ini_array);

Результат:

Array
=> 1
=> 5
=> Dodo bird
=> /usr/local/bin
=> http://www.example.com/~username
Array
=> Array
=> 1
=> 5
= Dodo bird
)

=> Array
=> /usr/local/bin
=> http://www.example.com/~username
)

Ключи и имена секций, состоящие из цифр, будут обработаны как целые числа в PHP, поэтому числа, начинающиеся с 0 будут считаться восьмиричными, а начинающиеся с 0x - шестнадцатиричными.

disk_total_space()

Возвращает объем каталога (PHP 4 >= 4.1.0, PHP 5)

Описание:

Float disk_total_space(string directory)

Функция возвращает размер в байтах указанного раздела диска.

Пример использования disk_total_space()

// $df содержит размер "/"
$df = disk_total_space("/");

// Под Windows:
disk_total_space("C:");
disk_total_space("D:");
?>

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

diskfreespace()

Псевдоним функции disk_free_space() (PHP 3 >= 3.0.7, PHP 4, PHP 5)

Описание: Эта функция является псевдонимом для фукнции disk_free_space().

disk_free_space()

Получить размер доступного пространства в каталоге (PHP 4 >= 4.1.0, PHP 5)

Описание:

Float disk_free_space(string directory)

Функция возвращает размер свободного пространства в байтах, доступного для использования в указанном разделе диска.

Пример использования функции disk_free_space()

$df = disk_free_space("/");
// $df содержит размер свободного места в каталоге "/"

// Под Windows:
disk_free_space("C:");
disk_free_space("D:");
?>

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

clearstatcache()

Очищает кэш состояния файлов (PHP 3, PHP 4, PHP 5)

Описание:

Void clearstatcache(void)

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

Обратите внимание, что PHP не кэширует информацию о несуществующих файлах. Так что если вы вызовите file_exists() на несуществующем файле, она будет возвращать FALSE до тех пор, пока вы не создадите этот файл. Если же вы создадите файл, она будет возвращать TRUE даже если затем вы его удалите.

Замечание : Результаты выполнения приведенных ниже функций кешируются PHP, поэтому, если вы не хотите, чтобы информация о файле или каталоге, с которым вы работаете, кешировалась, используйте функцию clearstatcache().

Список функций, результаты выполнения которых кешируются: stat(), lstat(), file_exists(), is_writable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype() и fileperms().

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

Bool mkdir(string $name, int $perms)

Создает каталог с именем $name и правами доступа perms. Права доступа для каталогов указываются точно так же, как и для файлов. Чаще всего значение $perms устанавливают равным 0770 (предваряющий ноль обязателен -
он указывает PHP на то, что это - восьмеричная константа, а не десятичное число).

Mkdir("my_directory",0755);
// создает подкаталог в текущем каталогеmkdir("/data");
// создает подкаталог data в корневом каталоге

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

Bool rmdir(string $name)

Удаляет каталог с именем $name.
Каталог должен быть пустым, а его атрибуты должны позволять это.
В случае успеха функция возвращает true, иначе - false.

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

Int chdir(string $directory);

Изменяет текущий PHP каталог на directory. Возвращает FALSE если не может изменить, TRUE если смена произошла. Параметр $directory может определять и относительный путь, задающийся от текущего каталога.
Примеры:

Chdir("/tmp/data"); // переходим по абсолютному пути
chdir("./js"); // переходим в подкаталог текущего каталога
chdir(".."); // переходим в родительский каталог
chdir("~/data"); // переходим в /home/пользователь/data (для Unix)

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

Синтаксис:

String getcwd()

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

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

diskfreespace

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

Float diskfreespace (string directory);

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

$diskspace=diskfreespace("/");
// Тем самым мы определили свободное место в корневой директории "/"

chroot()

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

Описание:

Bool chroot (string directory)

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

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

Замечание

scandir()

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

Описание

Array scandir (string $directory [, int $sorting_order = SCANDIR_SORT_ASCENDING [, resource $context ]])

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

Список параметров

directory - Сканируемый каталог.
sorting_order - По умолчанию, сортировка производится в алфавитном порядке по возрастанию. Если необязательный параметр sorting_order установлен в значение SCANDIR_SORT_DESCENDING, сортировка производится в алфавитном порядке по убыванию. Если же он установлен в значение SCANDIR_SORT_NONE, то сортировка не производится.
context - За описанием параметра context обратитесь к разделу "Потоки" данного руководства.

Возвращаемые значения

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

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

$dir = "/tmp";
$files1 = scandir($dir);
$files2 = scandir($dir, 1);

print_r($files1);
print_r($files2);
?>

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

Array
=> .
=> ..
=> bar.php
=> foo.txt
=> somedir
Array
=> somedir
=> foo.txt
=> bar.php
=> ..
=> .
)

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

$dir = "/tmp";
$dh = opendir($dir);
while (false !== ($filename = readdir($dh))) {
$files = $filename;
}

print_r($files);

print_r($files);

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

Array
=> .
=> ..
=> bar.php
=> foo.txt
=> somedir
Array
=> somedir
=> foo.txt
=> bar.php
=> ..
=> .
)

Примечания

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

Класс каталога (псевдо-объектно ориентированный механизм).

Синтаксис:

New dir(string directory);

Псевдо-объектно ориентированный механизм для получения списка файлов каталога. Открывает каталог из directory.
После этого становятся доступны два свойства объекта: дескриптор каталога handle и строка path, указывающая, какой каталог в настоящий момент используется. Эти свойства доступны, если только каталог был открыт.
Свойство handle может быть использован вместе с другими функциями работы с каталогом типа readdir(), rewinddir() и closedir().

Для класса доступны три метода: чтение, возврат к началу и закрытие (read, rewind и close соответственно).

$d = dir("/etc");
echo "Handle: ".$d->handle."
n";
echo "Path: ".$d->path."
n";
while($entry=$d->read()) { // Последовательно выводить
echo $entry."
n"; // имя каждого файла,
} // имеющегося в каталоге$d->close();

closedir

Закрыть дескриптор(handle) каталога.
Синтаксис:

Void closedir(int dir_handle);

Закрывает поток каталога, обозначенный как dir_handle. Поток предварительно должен быть открыт функцией opendir().

Открыть дескриптор каталога.
Синтаксис:

Int opendir(string path);

Возвращает дескриптор открытого каталога path, который в последующем используется в функциях closedir(), readdir(), и rewinddir().

Получение имени следующего файла в списке каталога.
Синтаксис:

String readdir(int dir_handle);

Возвращает имя следующего файла из каталога. Имена файлов возвращаются в виде неупорядоченной последовательности.
Пример:

$handle=opendir(".");
echo "Directory handle: $handlen";
echo "Files:n";
while ($file = readdir($handle)) {
echo "$filen";
}
closedir($handle);
?>

Следует отметить, что функция также возвращает значения "." и "..".

Если эти значения не требуются, то их можно исключить следующим образом:

$handle=opendir(".");
while($file=readdir($handle)) {
if($file != "." && $file != "..") {
echo "Имя файла: $file
";
};
};
closedir($handle);
?>

rewinddir

Реинициализация дескриптора каталога.
Синтаксис:

Void rewinddir(int dir_handle);

После вызова этой функции функция readdir() с аргументом dir_handle будет возвращать имена файлов с начала в списке каталога.

Изменяет группу владельцев файла (PHP3, PHP4, PHP5)

Описание:

Bool chgrp (string filename, mixed group)

Функция осуществляет попытку смены группы владельцев файла с именем filename на группу, указанную в параметре group (в качестве имени или числа). Только суперпользователь способен произвольно изменять группу файла, обычный пользователь может изменять группу файла на любую из групп, к которой принадлежит данный пользователь.

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

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

Замечание

Изменяет режим доступа к файлу или каталогу (PHP 3, PHP 4, PHP 5)

Описание:

Bool chmod (string filename, int mode)

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

Обратите внимание, что значение параметра mode не переводится автоматически в восьмеричную систему счисления, поэтому строки (такие, как, например, "g+w") не будут работать должным образом. Чтобы удостовериться в том, что режим был установлен верно, предваряйте значение, передаваемое в параметре mode, нулем (0):

chmod("/somedir/somefile", 755); // десятичное, неверный способ
chmod("/somedir/somefile", "u+rwx,go+rx"); // строка, неверный способ

?>

Значение параметра mode состоит из трех восьмеричных чисел, определяющих уровень доступа для владельца файла, для группы, в которую входит владелец, и для других пользователей, соответственно. Число, определяющее уровень пользователя, может быть вычислено путем суммирования значений, определяющих права: 1 - доступ на выполнение, 2 - доступ на запись, 4 - доступ на чтение. Более подробно о системе прав в системах Unix вы можете узнать с помощью команд "man 1 chmod" and "man 2 chmod".

// Доступ на запись и чтение для владельца, нет доступа для других
chmod("/somedir/somefile", 0600);

// Доступ на запись и чтение для владельца, доступ на чтение для других
chmod("/somedir/somefile", 0644);

// Полный доступ для владельца, доступ на чтение и выполнение для других
chmod("/somedir/somefile", 0755);

// Полный доступ для владельца, доступ на чтение и выполнение для группы владельца
chmod("/somedir/somefile", 0750);
?>

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

Замечание : Текущим пользователем является пользователь, от имени которого выполняется PHP. Возможно, что этот пользователь будет отличаться от пользователя, под именем которого вы получаете доступ к командной оболочке или учетной записи FTP.

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

Замечание : Когда безопасный режим включён, PHP проверяет имеет ли файл или директория, с которой вы работаете, такой же UID, как и выполняемый скрипт. Кроме того, вы не можете устанавливать SUID, SGID и "липкие" биты.

Изменяет владельца файла (PHP 3, PHP 4, PHP 5)

Описание:

Bool chown (string filename, mixed user)

Осуществляет попытку изменения владельца файла с именем filename на владельца, чье имя передано в параметре user (в виде числа или строки). Только суперпользователь может изменять владельца файла.

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

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

Замечание : Когда опция safe mode включена, PHP проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.

lchgrp()

Изменяет группу владельцев символической ссылки

Описание:

Bool lchgrp(string filename, mixed group)

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

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

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

Замечание : Когда опция safe mode включена, PHP проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.

lchown()

Описание:

Bool lchown (string filename, mixed user)

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

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

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

Замечание : Когда опция safe mode включена, PHP проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.

Изменяет текущую umask (PHP 3, PHP 4, PHP 5)

Описание:

Int umask ()

Устанавливает umask() PHP в значение mask & 0777 и возвращает старую umask. Если PHP используется как модуль сервера, umask восстанавливается после завершения каждого запроса.

Вызов umask() без аргументов вернёт текущую umask.

Общие сведения

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

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

Ее синтаксис полностью идеентичен функции symlink(), да и работает она по тем же правилам, за исключением того, что создает не символическую, а жесткую ссылку.

Описание:

Bool link(string target, string link)

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

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

linkinfo()

Описание:

Int linkinfo(string path)

linkinfo() возвращает поле st_dev структуры stat из Unix C, которую возвращает системный вызов lstat. Эта функция используется для определения, существует ли ссылка (на которую указывает path) на самом деле (используя тот же метод, что и макро S_ISLNK, определённый в stat.h). Возвращает 0 или FALSE в случае ошибки.

Пример использования функции linkinfo()

echo linkinfo("/vmlinuz"); // 835
?>

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

Общие сведения

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

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

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

Получает информацию о файле или символической ссылке (PHP 3 >= 3.0.4, PHP 4, PHP 5)

Описание:

Array lstat (string filename)

Собирает статистику на файл или символическую ссылку с именем filename. Эта функция идентична функции stat(), за исключением того, что если filename является символической ссылкой, возвращается статус символической ссылки, а не того файла, на который она указывает.

Обратитесь к странице руководства функции stat() для получения информации о структуре массива, который возвращает lstat().

Замечание : Результаты этой функции кэшируются. Более подробную информацию смотрите в разделе clearstatcache().

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми упаковщиками url.

readlink()

Возвращает файл, на который указывает символическая ссылка (PHP 3, PHP 4, PHP 5)

Описание:

String readlink (string path)

readlink() делает то же самое, что и функция C readlink - возвращает содержимое пути символической ссылки или FALSE в случае ошибки.

Пример использования функции readlink()

// output e.g. /boot/vmlinux-2.4.20-xfs
echo readlink("/vmlinuz");

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

symlink()

Описание:

Bool symlink (string target, string link)

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

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

Последнее обновление: 1.11.2015

Перемещение файла

Для перемещения файла применяется функция rename() :

Если у нас в каталоге файла hello.txt имеется подкаталог subdir , то файл будет в него перемещен. Если файл был успешно перемещен, функция возвратит значение true .

Копирование файла

Для копирования файла используется функция copy() . Она принимает имя копируемого файла, и имя копии файла. И если копирование прошло успешно, возвращает значение true:

Удаление файла

Для удаления файла применяется функция unlink , которая принимает имя файла и возвращает значение true при успешном удалении файла:

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

Для создания каталога используется функция mkdir() :

If(mkdir("newdir")) echo "Каталог создан"; else echo "Ошибка при создании каталога";

В данном случае mkdir создает новый каталог "newdir" в текущем каталоге. Если создание пройдет успешно, то функция возвращает значение true , иначе - false

Для создания новой папки в корневом каталоге можно использовать выражение mkdir("/newdir") .

Удаление каталога

Для удаления каталога применяется функция rmdir() . Ее использование аналогично mkdir():

If(rmdir("newdir")) echo "Каталог удален"; else echo "Ошибка при удалении каталога";

Операции с каталогами

Для получения абсолютного пути к текущему каталогу используется функция getcwd() , которая возвращает путь в виде строки:

$path = getcwd(); echo $path; // C:\localhost

Функция opendir() открывает определенный каталог для считывания из него информации о файлах и каталогах. При успешном открытии каталога функция возвращает дескриптор открытого каталога. После окончания работы с каталогом его надо закрыть функцией closedir() .

Для считывания имени отдельного файла в открытом каталоге применяется функция readdir() .

Теперь объединим эти функции и выведем на страницу все файлы и подкаталоги из текущего каталога:

"; else echo "файл: $file
"; } closedir($dh); // закрываем каталог } } ?>

Ей необходимо передать два параметра: первый - имя файла (строка), второй - режим (тоже строка). Возвращает функция значение типа Ресурс. В дальнейшем оно будет использоваться другими функциями, работающими с файлами.
Если файл находится в текущей директории, то достаточно указать только его имя (без пути). Если же он находится в другом месте, нужно указать полый путь. Для смены текущей директории используется функция . Ей необходимо сообщить имя каталога, который мы хотим сделать текущим. Если сменить каталог не удастся, функция вернет false.
Чтобы узнать какой каталог текущий в данный момент, используйте .
О всех режимах вы можете узнать в описании функции, а с остальными мы познакомимся в этой главе.

Обработка файла обычно включает в себя чтение и/или запись. Давайте рассмотрим несколько функций, осуществляющих чтение файла.
. Первый параметр - указатель на ресурс. Тот самый, который нам вернула функция fopen(). Второй параметр - необязательный - количество байт, которое необходимо считать. Функция считывает указанное количество байт, либо меньше, если раньше встретит конец строки или конец файла. Возвращает она считанную строку.
принимает имя файла и возвращает его содержимое одной строкой.
принимает имя файла и возвращает его содержимое в виде массива строк.
При использовании двух последних функций открывать файл функцией fopen() не надо. Они сами всё сделают.
Для записи в файл используются следующие функции:
. Первый параметр - указатель на ресурс, второй - строка, которую мы записываем.
принимает строку - имя файла и строку, которую необходимо записать.

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

chdir ("/usr/tmp" );
$src = fopen ("f1.txt" , "r" ); // "r" указывает функции открыть файл для чтения
$dst = fopen ("f2.txt" , "w" ); // "w" указывает функции открыть файл для записи
while (! feof ($src )) {
$line = fgets ($src , 16 );
$line ++;
fputs ($dst , $line );
}
fclose ($dst );
fclose ($src );
?>

Здесь вы увидели новую функцию которая возвращает true если после очередной операции достигнут конец файла.
Функции работы с каталогами.
Мы только что узнали две функции работы с каталогами (кстати какие?) Но, как вы догадываетесь, их не две.
Итак, как и файл, директорию необходимо открыть, а в конце работы закрыть. Делают это функции и.
Первая принимает строку - путь к каталогу и возвращает дескриптор каталога (либо false, если не удалось открыть), вторая принимает тот самый дескриптор и ничего не возвращает.

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

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

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

Что же можно делать с директорией после того, как мы ее открыли?
Например, можно узнать, что в ней есть. Функция принимает дескриптор каталога, полученный после использования opendir() и возвращает имя очередного элемента каталога. Под элементами каталога имеется в виду папка или файл, который в нем расположен. Если вызвать эту функцию после получения имени последнего элемента каталога, она вернет false. Определив, что это за элемент, мы можем сделать с ним что-то еще. Если файл - открыть и обработать, если директория - получить список ее элементов и не только.

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

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

$dir_hndl = opendir ("/usr/home/mydir" );
while (false !== ($name = readdir ($dir_hndl ))) {
if ($name == ".." ) {
echo "Parent directory
" ;
continue;
} elseif ($name == "." ) {
echo "Current directory
" ;
continue;
}
if (
is_dir ($name )) echo $name . " is a dir
" ;
elseif (is_file ($name )) echo $name . " is a filr" ;
else echo $name . " что же это может быть?
"
;
}
closedir ($dir_hndl );
?>

Теперь я коротко расскажу об остальных.