Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Работа с файлами


Автор: http://www.softtime.ru <http://www.softtime.ru>

Открытие файлов
  
  Файл представляет собой последовательность байтов, хранящуюся на каком-либо физическом носителе информации. Каждый файл имеет абсолютный путь, по которому определяется его местонахождение. В качестве разделителя пути в Windows может использоваться как прямой (/), так и обратный (\) слеш. В других операционных системах используется только прямой слеш.
  
  Открытие файлов в файловой системе сервера производится при помощи функции fopen:
  
    int fopen(string filename, string mode [, int use_include_path])
  
  Первый аргумент filename - имя файла или абсолютный путь к нему. Если абсолютный путь не указывается, то файл должен находится в текущем каталоге.
  
  Второй аргумент mode говорит о том, для каких действий открывается файл и может принимать следующие значения:
  r (Открыть файл только для чтения; после открытия указатель файла устанавливается в начало файла);
  r+ (Открыть файл для чтения и записи; после открытия указатель файла устанавливается в начало файла);
  w (Создать новый пустой файл только для записи; если файл с таким именем уже есть вся информация в нем уничтожается);
  w+ (Создать новый пустой файл для чтения записи; если файл с таким именем уже есть вся информация в нем уничтожается);
  a (Открыть файл для дозаписи; данные будут записываться в конец файла);
  a+ (Открыть файл для дозаписи и чтения данных; данные будут записываться в конец файла);
  b (Флаг, указывающий на работу (чтение и запись) с двоичным файлом; указывается только в Windows).
  
  Третий необязательный аргумент use_include_path определяет должны ли искаться файлы в каталоге include_path. (Параметр include_path устанавливается в файле php.ini).
  
  В случае удачного открытия файла, функция fopen возвращает дескриптор файла, в случае неудачи - false. Дескриптор файла представляет собой указатель на открытый файл, который используется операционной системой для поддержки операций с этим файлом. Возвращенный функцией дескриптор файла необходимо затем указывать во всех функциях, которые в дальнейшем будут работать с этим файлом.
  
  Код, приведенный ниже, открывает файл C:/WWW/HTML/file.txt для чтения:
  

  <?
    $file = fopen("c:/www/html/file.txt","r");
    if(!file)
      {
        echo("Ошибка открытия файла");
      }
  ?>
  

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

  <?
    $file = fopen("c:/www/html/river.jpg","rb");
    if(!file)
      {
        echo("Ошибка открытия файла");
      }
  ?>
  

  
  Содержимое открытого файла можно отобразить в браузере с помощью функции fpassthru:
  
    int fpassthru (int file)
  
  Аргумент file представляет собой дескриптор файла.
  

  <?
    $file = fopen("c:/www/html/pavlovo.jpg","rb");
    if(!file)
      {
        echo("Ошибка открытия файла");
      }
      else
      {
        fpassthru($file);
      }
  ?>
  

  Для текстовых файлов существует еще одна функция отображения readfile:
  
    readfile (string filename)
  
  Обращаем ваше внимание на то, что в качестве аргумента эта функция принимает имя файла, а не его дескриптор:
  
  <?
    readfile ("file.txt");
  ?>
  
  Закрытие файлов
  
  После того, как вы закончите работу с файлом его необходимо закрыть. Закрытие файлов осуществляется с помощью функции fclose:
  
    int fclose (int file)
  
  Аргумент file представляет собой дескриптор файла, который необходимо закрыть.
  Чтение из файлов
  
  Прочитать строку из открытого файла можно с помощью функции fread:
  
    string fread ( int file, int length )
  
  Эта функция возвращает строку длиной length символов из файла с дескриптором file.
  
  Пример (чтение из файла):
  

  <?
    $file = fopen("c:/www/html/file.txt","r");
    if(!file)
      {
        echo("Ошибка открытия файла");
      }
      else
      {
        $buff = fread ($file,100);
        print $buff;
      }
  ?>
  

  Для чтения из файла можно также пользоваться функцией fgets:
  
  
    string fgets ( int file, int length)
  
  Эта функция читает и возвращает строку длиной length - 1 байт. Чтение прекращается, когда достигнута новая строка или конец файла. При достижении конца файла функция возвращает пустую строку.
  
  Для чтения файла с удалением из него тегов HTML применяется функция fgetss:
  
  
    string fgetss (int file, int length [, string allowable_tags])
  
  Необязательный третий параметр allowable_tags может содержать строку со списком тегов, которые не должны быть отброшены, при этом теги в строке записываются через запятую.
  
  Если необходимо записать содержимое файла в массив, применяется функция file:
  
  
    array file (string filename [, int use_include_path])
  
  Функция считывает файл с именем filename и возвращает массив, каждый элемент которого соответствует строке в прочитанном файле. В следующем примере с помощью функции читается файл, информация из которого затем выводится в браузер.
  

  <?
    $file_array = file("file.txt");
    if(!$file_array)
    {
      echo("Ошибка открытия файла");
    }
    else
    {
      for($i=0; $i < count($file_array); $i++)
      {
        printf("%s<br>", $file_array[$i]);
      }
    }
  ?>
  

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

  <?
    $file_array =  file ("file.txt");
    if(!$file_array)
    {
      echo("Ошибка открытия файла");
    }
    else
    {
      $num_str =  count($file_array);
      echo($num_str);
    }
  ?>
  

  Заметим, что функцию file следует применять лишь для чтения небольших файлов.
  
  Для чтения файлов с расширением *.csv применяется функция fgetcsv:
  
    array fgetcsv ( int file, int length, char delim)
  
  Функция читает строку из файла и разбивает ее по символу delim. Параметр delim должен обязательно быть строкой из одного символа, иначе принимается во внимание только первый символ этой строки. Функция возвращает получившийся массив или false, если достигнут конец файла. Пустые строки в файле не игнорируются, а возвращаются как массив из одного элемента - пустой строки. Параметр length задает максимальную длину строки точно так же, как это делается в функции fgets.
  
  Формат CSV является одним из форматов, в котором может сохранять файлы MSExcel. В следующем примере производится чтение созданного MSExcel файла file.csv, содержащего пароли пользователей.
  

  <?
    $count = 1;
    $file =  fopen ("file.csv","r");
    while ($data = fgetcsv ($file, 1000, ","))
    {
      $num = count ($data);
      $count++;
      for ($i=0; $i < $num; $i++)
      {
        print "$data[$i]<br>";
      }
    }
    fclose ( $file );
  ?>
  

  Запись в файлы
  
  Запись в файлы осуществляется функциями fputs и fwrite, которые абсолютно идентичны:
  
    int fputs ( int file, string string [, int length ])
    int fwrite ( int file, string string [, int length ])
  
  Первый аргумент - дескриптор файла, в который осуществляется запись. Второй аргумент представляет собой строку, которая должна быть записана в файл. Третий необязательный аргумент задает количество символов в строке, которые должны быть записаны. Если третий аргумент не указан, записывается вся строка.
  
  В этом примере в файл "file.txt" записывается строка "Hello, world!"
  

  <?
    $file = fopen ("file.txt","r+");
    $str = "Hello, world!";
    if ( !$file )
    {
      echo("Ошибка открытия файла");
    }
    else
    {
      fputs ( $file, $str);
    }
    fclose ($file);
  ?>
  

  Копирование файлов осуществляется функцией copy:
  
    int copy ( string file1, string file2)
  
  Функция копирует файл с именем file1 в файл с именем file2. Если файл file2 на момент копирования существовал, то он перезаписывается.
  
  Переименование файла производится с помощью функции rename:
  
    int rename ( string old, string new)
  
  Эта функция переименовывает файл с именем old в файл с именем new.
  
  Функция rename не выполняет переименования файла, если его новое имя расположено в другой файловой системе.
  
  Удаление файла осуществляется посредством функции unlink:
  
  
    int unlink ( string filename)
  Для получения дополнительной информации об атрибутах файла вы можете воспользоваться перечисленными ниже функциями.
  
  Функция file_exists проверяет, существует ли файл и возвращает true, если файл существует и false в противном случае:
  
    bool file_exists ( string filename)
  
  Функция fileatime возвращает время последнего обращения к файлу:
  
    int fileatime ( string filename)
  
  Функция filemtime возвращает время последней модификации содержимого файла:
  
    int filemtime ( string filename)
  
  Функция file_size возвращает размер файла в байтах:
  
    int file_size ( string filename)
  
  Функция file_type возвращает тип файла:
  
    string file_type ( string filename)
  
  Строка, возвращаемая этой функцией, содержит один из следующих типов файла:
  char (специальное символьное устройство);
  dir (каталог);
  fifo (именованный канал);
  link (символическая ссылка);
  block (специальное блочное устройство);
  file (обычный файл);
  unknown (тип не установлен).
  
  Поскольку использование функций, возвращающих характеристики файла, весьма ресурсоемко, во избежание потери производительности при вызовах таких функций, PHP кэширует информацию о файле. Очистить этот кэш можно с помощью функции clearstatcache:
  
  <?
    clearstatcache();
  ?>
  
  При чтении данных из файла указатель текущей позиции перемещается к очередному непрочитанному символу. Существует несколько функций, с помощью которых можно управлять положением этого указателя.
  
  Установка указателя текущей позиции в начало файла производится функцией rewind:
  
    int rewind ( int file)
  
  Аргумент file является дескриптором файла.
  
  Узнать текущее положение указателя можно при помощи функции ftell:
  
    int ftell ( int file)
  
  Установить указатель в любое место файла можно, используя функцию fseek:
  
    int fseek ( int file, int offset [, int whence ])
  
  Функция fseek устанавливает указатель файла на байт со смещением offset (от начала файла, от его конца или от текущей позиции, в зависимости от значения параметра whence). Аргумент file представляет собой дескриптор файла. Аргумент whence задает с какого места отсчитывается смещение offset и может принимать одно из следующих значений:
  SEEK_SET (отсчитывает позицию начала файла);
  SEEK_CUR (отсчитывает позицию относительно текущего положения указателя);
  SEEK_END (отсчитывает позицию относительно конца файла).
  
  По умолчанию аргумент whence имеет значение SEEK_SET.
  
  Узнать, находится ли указатель в конце файла, можно с помощью функции feof:
  
    int feof ( int file)
  
  Если указатель находится в конце файла, функция возвращает true, в ином случае возвращается false.
  
  Функцию feof удобно использовать при чтении файла:
  

  <?
    $file = fopen ("file.txt","r");
    if ($file)
    {
      while(!feof($file))
      {
        $str = fgets($file);
        echo $str;
        echo ("<br>");
      }
      fclose ( $file);
    }
    else
    {
      echo("Ошибка открытия файла");
    }
  ?>
  

  При помощи этой функции удобно также определять количество строк в файле:
  

  <?
    $file = fopen ("file.txt","r");
    if ($file)
    {
      $counter = 0;
      while(!feof($file))
      {
        $str = fgets ($file);
        $counter++;
      }
      echo($counter);
      fclose ($file);
    }
    else
    {
      echo("Ошибка открытия файла");
    }
  ?>
  


Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS