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

Смотрите также

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

За списком URL-врапперов и пояснениями обращайтесь к главе List of Supported Protocols/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 — Получить время последнего изменения i-узла
  • filegroup — Получить идентификатор группы файла
  • fileinode — Получить номер inode файла
  • 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 — Changes group ownership of symlink
  • lchown — Changes user ownership of symlink
  • link — Создаёт жёсткую ссылку
  • linkinfo — Получает информацию о ссылке
  • lstat — Получает информацию о файле или символической ссылке
  • mkdir — Создаёт директорию
  • move_uploaded_file — Перемещает загруженный файл в новое место
  • parse_ini_file — Обрабатывает конфигурационный файл
  • pathinfo — Возвращает информацию о пути к файлу
  • pclose — Закрывает файловый указатель процесса
  • popen — Открывает файловый указатель процесса
  • readfile — Выводит файл
  • readlink — Возвращает файл, на который указывает символическая ссылка
  • 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);

          $tmpInt = 0;

           for($i =0; $i < strlen($tmpStr); $i++)
          {
                if( extension_loaded('ctype') )
               {
                    if( !ctype_print($tmpStr[$i]) )
                         $tmpInt++;
               }
               else
               {
                   if( !eregi("[[:print:]]+", $tmpStr[$i]) )
                         $tmpInt++;
               }
           }

           if($tmpInt > 5)
                return(0);
            else
                return(1);
     }
     else
           return(0);
}
2003-03-08 09:18:51
http://php5.kiev.ua/manual/ru/ref.filesystem.html
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);
}

Example:

$arr = int2bytes(75832);

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

fputs($fp,chr($arr[0]).chr($arr[1]).chr($arr[2]))

-- Regis
2003-04-03 10:49:37
http://php5.kiev.ua/manual/ru/ref.filesystem.html
Pollard@php.net contributed this in response to a question on setting these variables ...
This option *IS* settable within your PHP scripts.
Example:

<?php
  ini_set
('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, ":");
2003-05-16 01:10:37
http://php5.kiev.ua/manual/ru/ref.filesystem.html
Автор:
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;
    }
 
    $matchedfiles = array();
 
    $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;
 }

$htmlfiles = findfile('/some/dir','/\.(htm|html)$/');
2003-08-22 20:23:00
http://php5.kiev.ua/manual/ru/ref.filesystem.html
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]);

<?php

function list_files($directory$stringSearch$searchHandler$outputHandler) {
 
$errorHandler false;
 
$result = array();
 if (! 
$directoryHandler = @opendir ($directory)) {
  echo (
"<pre>\nerror: directory \"$directory\" doesn't exist!\n</pre>\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 (
"<pre>\nerror: no filetype \"$fileExtension\" found!\n</pre>\n");
 }
 else {
 
sort ($result);
  if (
$outputHandler === 0) {
   return 
$result;
  }
  if (
$outputHandler === 1) {
   echo (
"<pre>\n");
   
print_r ($result);
   echo (
"</pre>\n"); 
  }
 }
}

?>
2005-02-25 10:27:52
http://php5.kiev.ua/manual/ru/ref.filesystem.html
Автор:
I just learned that, to specify file names in a portable manner, you DON'T need 'DIRECTORY_SEPARATOR' - just use '/'. This really surprised and shocked me, as until now I typed about a zillion times 'DIRECTORY_SEPARATOR' to stay platform independent - unnecessary. Don't make the same mistake.
2007-03-17 11:24:19
http://php5.kiev.ua/manual/ru/ref.filesystem.html
Автор:
You have an array of directories (straightforward list of directories):

<?php
     $array 
= 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:

<?php
 $array 
= 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.

<?php
/**
 * 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:

<?php
 $result 
= 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. :)
2009-05-23 21:19:30
http://php5.kiev.ua/manual/ru/ref.filesystem.html
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.

<?php
// 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;
}
?>
2013-03-14 17:56:20
http://php5.kiev.ua/manual/ru/ref.filesystem.html

    Поддержать сайт на родительском проекте КГБ