Чтение из файла в php. Хороший стиль программирования. Доп функции для открытия, записи и создания файла

Чтение из файла в php. Хороший стиль программирования. Доп функции для открытия, записи и создания файла

24.04.2019

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

Последовательность работы с файлами в PHP такая:

  1. Открыть файл.
  2. Выполнить необходимые действия.
  3. Закрыть файл.

Как видите, последовательность работы с файлами напоминает работу с файлами через обычный проводник. Только здесь вся работа выполняется автоматически самим PHP-скриптом .

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

  1. a - открывает файл только для записи, причём указатель помещается в конец файла.
  2. a+ a , но также файл открывается ещё и для чтения.
  3. r - открывает файл только для чтения, а указатель устанавливается в начало файла.
  4. r+ - то же самое, что и модификатор r , но также файл открывается ещё и для записи.
  5. w - открывает файл только для записи, указатель устанавливает в начало файла и стирает всё содержимое файла.
  6. w+ - то же самое, что и модификатор w , только файл открывается также и для чтения.

Также различают два режима работы с файлами: бинарный (обозначается b ) и текстовый (обозначается t ). Если Вы работаете с обычным текстовым файлом, то выбирайте текстовый режим, а если, например, с изображением, то бинарный.

Это все основные модификаторы, которых Вам вполне хватит. Теперь давайте узнаем, как закрыть файл. Закрывается файл с помощью функции fclose() .

Теперь перейдём к чтению файла с помощью функции fread() . И давайте, наконец-то, приведу пример:

$contents = "";
while (!feof($handle))
$contents .= fread($handle, 4096);
fclose($handle);
?>

В данном примере мы сначала открываем файл для чтения в текстовом режиме (модификатор rt ). Функция fopen() возвращает так называемый дескриптор , с помощью которого можно общаться с файлом, и записываем его в переменную handle . Затем мы в цикле while() до тех пор, пока не достигнут конец файл, считываем содержимое каждый раз по 4096 символов, которые записываем в переменную contents . После завершения процесса считывания - закрываем файл, вновь с помощью дескриптора файла.

Теперь перейдём к записи с помощью функции fwrite() :

$handle = fopen("files/a.txt", "at");
$string = "This is text";
fwrite($handle, $string);
fclose($handle);
?>

После запуска этого скрипта, в файле a.txt добавится строка "This is text ".

Особо внимательные читатели обратили внимание на указатели, о которых я писал чуть выше. Указатель - это текущая позиция воображаемого "курсора" в файле. Именно с него и начинается работа с файлом. Изменить положение указателя можно с помощью функции fseek() :

$handle = fopen("files/a.txt", "rt");
echo $contents."
";
fseek($handle, 0, SEEK_SET);
$contents = fread($handle, 3);
echo $contents."
";
?>

Таким образом, мы сначала считываем 3 символа (в результате, текущее положение указателя сдвигается на 3 позиции). Затем мы устанавливаем указатель на начало файла. И вновь считываем 3 символа. Как Вы и догадались, мы два раза считали одно и тоже. То есть первый раз 3 символа, потом вернулись назад, и вновь считали 3 символа. Также если у функции fseek() заменить SEEK_SET на SEEK_CUR , то тогда второй параметр будет не устанавливать позицию указателя, а сдвигать относительно текущего местоположения. Советую даже попрактиковаться с указателями, потому что для понимания это не так просто. Также рекомендую попытаться записать что-нибудь в файл при позиции указателя, например, в самом начале файла. И обязательно объясните полученный результат.

И, напоследок, хочется привести ещё пару функций, которые позволяют работать с файлами на самом простом уровне: file_put_contens() и file_get_contents() . Функция file_put_contents() записывает в файл, а функция file_get_contents() считывает содержимое из файла. Эти функции очень просты в применении, но возможностей там уже меньше (хотя, как правило, они и не нужны):

file_put_contents("files/a.txt", "This is text 2");
echo file_get_contents("files/a.txt");
?>

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

Вот и все основные моменты работы с файлами в PHP .

У Вас в браузере заблокирован JavaScript. Разрешите JavaScript для работы сайта!

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

Работа с файлами - важный инструмент PHP.

Включение внешних файлов

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

Пример 1

Использование include() ...Основная часть..."; ?>

Echo "

...Общее приветствие...

"

РЕЗУЛЬТАТ ПРИМЕРА 1:

...Общее приветствие...

...Основная часть...

В данном случае результат будет тем же, если включаемый файл top.php содержит только строку HTML-текста:

...Общее приветствие...

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

Пример 2

Использование инструкции include(), возвращающей значение Включаемый файл вернул $res"; ?>

Включаемый файл top.php с PHP-программой:

РЕЗУЛЬТАТ ПРИМЕРА 2:

Включаемый файл вернул 56

Инструкцию include() можно использовать внутри цикла. В цикле include() выполняется при каждой итерации. Это можно использовать для включения нескольких файлов. Например:

For ($i=1; $i<=5; $i++) include("incfile{$i}.htm");

Определение имени включаемого файла и его загрузка производятся повторно при каждом вызове include() . Это означает, что если содержание включаемого файла с момента предыдущего вызова изменилось, то загрузится новое содержание.

Оператор include() также можно включать в тело условного оператора.

Несмотря на сходство по внешнему виду с функцией, include() функцией не является, а представляет собой специальную конструкцию языка.

Для указания что файл нужно подключать только один раз используется оператор include_once()

Анализ файлов

PHP содержит множество функций, дающих информацию о файлах. Наиболее употребимыми являются:

  • file_exists() - определяет существование файла. Например: if (!file_exists("aaa.php")) echo "Внимание! Файл aaa.php не найден!";
  • is_file() - определяет, является ли исследуемый объект файлом. Например: if (is_file("bbb.txt")) echo "Можете не сомневаться, bbb.txt - это файл";
  • is_dir() - определяет, является ли исследуемый объект каталогом. Например: if (is_dir("/tmp")) echo "Действительно, /tmp - это каталог";
  • is_readable() - определяет, доступен ли файл для чтения. Например: if (is_readable("db.dbf")) echo "db.dbf можно читать";
  • is_writable() - определяет, доступен ли файл для записи. Например: if (is_writable("db.dbf")) echo "В db.dbf писать можно";
  • filesize() - определяет размер файла в байтах.
  • filemtime() - определяет дату и время последнего изменения файла.
  • fileatime() - определяет дату и время последнего обращения к файлу.

Пример 3

Информация о файле "; echo "$f - ".(is_dir($f) ? "" : "не ")."каталог
"; echo "$f ".(is_readable($f) ? "" : "не ")."доступен для чтения
"; echo "$f ".(is_writable($f) ? "" : "не ")."доступен для записи
"; echo "размер $f в байтах - ".(filesize($f))."
"; echo "последнее изменение $f - ".(date("d M Y H:i", filemtime($f)))."
"; echo "последнее обращение к $f - ".(date("d M Y H:i", fileatime($f)))."
"; } ?>

РЕЗУЛЬТАТ ПРИМЕРА 3:

Top.php - файл top.php - не каталог top.php доступен для чтения top.php доступен для записи размер top.php в байтах - 732 последнее изменение top.php - 04 Oct 2005 20:21 последнее обращение к top.php - 20 Oct 2005 14:01

Внимание! С удаленными файлами эти функции не работают. Их можно применять только к локальной файловой системе.

Управление файлами

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

  • touch() - создает пустой файл с заданным именем. Если такой файл уже существует, то функция изменит дату модификации. Например: touch("ex1.txt");
  • copy() - копирует файл. Для копирования файлов в php применяется функция copy ($source, $result). Ей нужно передать лишь два параметра - источник $source и имя файла-копии - $result. Стоит отметить, что следует указывать полные адреса к файлам. Пример применения функции copy:

  • unlink() - удаляет заданный файл. Например:
  • fopen() - открывает локальный или удаленный файл и возвращает указатель на него. Указатель используется во всех операциях с содержимым файла. Аргументы: имя файла и режим открытия.
    r чтение. Указатель файла устанавливается на его начало
    r+ чтение и запись. Указатель файла устанавливается на его начало
    w запись. Указатель файла устанавливается на его начало. Все старое содержимое файла теряется. Если файл с указанным именем не существует, функция пытается его создать
    w+ чтение и запись. Указатель файла устанавливается на его начало. Все старое содержимое файла теряется. Если файл с указанным именем не существует, функция пытается его создать
    a запись. Указатель файла устанавливается на его конец. Если файл с указанным именем не существует, функция пытается его создать
    a+ чтение и запись. Указатель файла устанавливается на его конец. Если файл с указанным именем не существует, функция пытается его создать

    Например:

    $fp = fopen("http://www.php.net/", "r"); // для чтения $fp = fopen("ex1.txt", "w"); // для записи $fp = fopen("ex2.txt", "a"); // для добавления в конец

    Если открыть файл не удалось, то можно прервать выполнение программы. Например:

    $fp = fopen("ex1.txt", "w") or die ("Не удалось открыть файл");

  • fclose() - закрывает файл. Аргумент: указатель файла, полученный ранее от функции fopen() . Например: fclose($fp);
  • feof() - проверка конца файла. Аргумент: указатель файла.
  • fgetc() - чтение очередного символа из файла. Аргумент: указатель файла.
  • fgets() - чтение очередной строки файла. Аргументы: указатель файла и длина считываемой строки. Операция прекращается либо после считывания указанного количества символов, либо после обнаружения конца строки или файла.

    Пример 4

    Чтение строк из файла "; ?>
  • fread() - общая функция чтения из файла. Аргументы: указатель файла и количество считываемых символов.
  • fseek() - отступ от начала файла. Аргументы: указатель файла и смещение.

    Пример 5

    Вывод на экран второй половины файла
  • fputs() - запись строки в файл. Аргументы: указатель файла и строка.
  • fwrite() - полный аналог функции fputs() .

    Пример 6

    Запись и добавление в файл
  • flock() - блокирует файл, т.е. не позволяет другим пользователям читать этот файл или писать в него, пока тот, кто наложил блокировку не закончит работу с данным файлом. Аргументы: указатель файла и номер режима блокировки.

    Пример 7

    Блокировка файла

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

В PHP версии >= 4.3.0 появились новые удобные функции работы с файлами:

  • file_get_contents() - прочитать весь файл или URL
  • file_put_contents() - записать файл

Работа с каталогами

В PHP есть несколько функций для работы с каталогами:

  • mkdir() - создание каталога. Аргументы: путевое имя каталога и режим доступа. Режим доступа - восьмеричное число из трех цифр с ведущим нулем. Первая цифра - право доступа для владельца, вторая - для группы, третья - для всех остальных. В системе Windows режим доступа игнорируется. В системе UNIX определены следующие права доступа:

    Например, право полного доступа для владельца, чтения и запуска для группы и запуска для всех остальных:

    Mkdir("testdir", 0751);

  • rmdir() - удаление каталога. Аргумент: путевое имя каталога. Удалить можно лишь пустой каталог при наличии права на это. При успешном выполнении функция возвращает true .
  • opendir() - открытие каталога. Аргумент: путевое имя каталога. В случае возникновения ошибки функция возвращает false . Ошибка при открытии может быть вызвана тем, что каталог не существует или программа не имеет права его читать.
  • readdir() - чтение каталога. Аргумент: путевое имя каталога. Возвращает строку, содержащую имя найденного файла или подкаталога. По достижении конца каталога функция возвращает false .

    Пример 8

    Чтение каталога "; ?>

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

    Gettype($f = readdir($dh)) != "boolean"

    Помимо использования функция fgetc() fgets() fgetss(), Вы можете использовать
    $file = file($filename). Она читает $filename в массив($file).

    Пример:

    $file=file($filename); for ($i=0; $i<=count($file); $i++) { echo $file[$i], "
    "; }

Передача файла с сервера. Скачать файл. DownLoad.

Ручной Download, или как скриптом открыть пользователю окошко сохранения файла. Чтобы в браузере открылся диалог "Сохранить файл" с названием файла file.dat, скрипт должен послать такие заголовки:

Header("Content-Disposition: attachment; filename=file.dat"); header("Content-Type: application/x-force-download; name=\"file.dat\"");

Готовый пример отправки файла с диска:

Не мешало бы также ссылаться на скрипт как http://.../download.php?file.dat, иначе браузеры, основанные на Mozilla, могут попытаться записать файл как file.dat.php. или указать атрибут download: Скачать Примечание: Не используйте заголовок header("Cache-Control: no-cache") в таких скриптах, большинство версий Internet Explorer не смогут скачать файл.

Следующий пример скрипта демонстрирует как организовать поддержку докачки :

Предполагается, что $cd - путь к файлу, $fn - имя файла Как передать файл на сервер?

Функции для работы с каталогами

  • chdir() - Сменить каталог
  • boolean chdir (string str)

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

  • chroot() - Сменить корневой каталог
  • boolean chroot (string str)

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

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

  • closedir() - Освободить дескриптор каталога
  • void closedir (resourse catalog)

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

    dir - Класс directory

class dir { dir (string str) string path resource handle string read (void) void rewind (void) void close (void) }

Псевдо-объектно-ориентированный механизм для чтения каталога, переданного в параметре каталог. С момента открытия каталога становятся доступными два свойства класса. Свойство "handle" может быть использовано с другими функциями для работы с каталогами, например, с функциями readdir() , rewinddir() и closedir() . Свойство "path" содержит путь к открытому каталогу. Доступны три метода: read, rewind and close.

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

Пример кода:

handle."
\n"; echo "Путь: ".$d->path."
\n"; while (false !== ($entry = $d->read())) { echo $entry."
\n"; } $d->close(); ?>

Замечание: Порядок, в котором метод "read" возвращает элементы каталога, зависит от операционной системы.

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


  • getcwd() - Получить имя текущего рабочего каталога
  • string getcwd (void)

    Возвращает имя текущего рабочего каталога.


  • opendir() - Открыть каталог
  • resourse opendir (string path)

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

    Если путь не существует или каталог, расположенный по указанному пути, не может быть открыт вследствие правовых ограничений или ошибок файловой системы, функция opendir() возвращает значение FALSE и генерирует сообщение PHP об ошибке уровня E_WARNING. Вы можете запретить вывод сообщения об ошибке, предварив имя функции opendir() символом "@".

    Пример кода

    Начиная с версии PHP 4.3.0, параметр путь может также являться любым URL"ом, обращение к которому приводит к получению списка его файлов и каталогов. Однако, данный способ работает только при использовании url-упаковщика file://. В версии PHP 5.0.0 была добавлена поддержка url-упаковщика ftp://.


  • readdir - Получить элемент каталога по его дескриптору
  • string readdir (resource catalog)

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

    Обратите внимание на способ проверки значения, возвращаемого функцией readdir() в приведенном ниже примере. В этом примере осуществляется проверка значения на идентичность (выражения идентичны, когда они равны и являются значениями одного типа - за более подробной информацией обратитесь к главе Операторы сравнения) значению FALSE, поскольку в ином случае, любой элемент каталога, чье имя может быть выражено как FALSE, остановит цикл (например, элемент с именем "0").

    Пример кода

    Обратите внимание, что функция readdir() также возвращает элементы с именами, и, если вы не хотите получать эти значения, просто отбрасывайте их:

    Пример кода


  • rewinddir() - Сбросить дескриптор каталога
  • void rewinddir (resource catalog)

    Сбрасывает поток каталога, переданный в параметре catalog таким образом, чтобы тот указывал на начало каталога


  • scandir() - Получить список файлов и каталогов, расположенных по указанному пути
  • array scandir (string catalog [, int order])

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

    По умолчанию, сортировка производится в алфавитном порядке по возрастанию. Если указан необязательный параметр order (равен 1), сортировка производится в алфавитном порядке по убыванию. Пример кода

    Результатом будет нечто вроде:

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

    Пример кода

    РЕЗУЛЬТАТ ПРИМЕРА:

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

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

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

    Чтение и запись файлов

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

    Для открытия файлов в PHP определена функция fopen() . Она имеет следующее определение: resource fopen(string $filename, string $mode) . Первый параметр $filename представляет путь к файлу, а второй - режим открытия. В зависимости от цели открытия и типа файла данный параметр может принимать следующие значения:

      "r" : файл открывается только для чтения. Если файла не существует, возвращает false

      "r+" : файл открывается только для чтения с возможностью записи. Если файла не существует, возвращает false

      "w" : файл открывается для записи. Если такой файл уже существует, то он перезаписывается, если нет - то он создается

      "w+" : файл открывается для записи с возможностью чтения. Если такой файл уже существует, то он перезаписывается, если нет - то он создается

      "a" : файл открывается для записи. Если такой файл уже существует, то данные записываются в конец файла, а старые данные остаются. Если файл не существует, то он создается

      "a+" : файл открывается для чтения и записи. Если файл уже существует, то данные дозаписываются в конец файла. Если файла нет, то он создается

    Результатом функции fopen будет дескриптор файла. Этот дескриптор используется для операций с файлом и для его закрытия.

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

    $fd = fopen("form.php", "r") or die("не удалось открыть файл"); fclose($fd);

    Конструкция or die("текст ошибки") позволяет прекратить работу скрипта и вывесте некоторое сообщение об ошибке, если функция fopen не смогла открыть файл.

    Чтение файла

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

    При каждом вызове fgets() PHP будет помещать указатель в конец считанной строки. Чтобы проследить окончание файла, используется функция feof() , которая возвращает true при завершении файла. И пока не будет достигнут конец файла, мы можем применять функцию fgets().

    Чтение файла полностью

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

    Поблочное считывание

    Также можно провести поблочное считывание, то есть считывать определенное количество байт из файла с помощью функции fread() :

    Функция fread() принимает два параметра: дескриптор считываемого файла и количество считываемых байтов. При считывании блока указатель в файле становится в конец этого блока. И также с помощью функции feof() можно отследить завершение файла.

    Запись файла

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

    Аналогично работает другая функция fputs() :

    Работа с указателем файла

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

    Int fseek (resource $handle , int $offset [, int $whence = SEEK_SET ])

    Параметр $handle представляет дескриптор файла. Параметр $offset - смещение в байтах относительно начала файла, с которого начнется считывание/запись. Третий необязательный параметр задает способ установки смещения. Он может принимать три значения:

      SEEK_SET : значение по умолчанию, устанавливает смещение в offset байт относительно начала файла

      SEEK_CUR : устанавливает смещение в offset байт относительно начала текущей позиции в файле

      SEEK_END : устанавливает смещение в offset байт от конца файла

    В случае удачной установки указателя функция fseek() возвращает 0, а при неудачной установке возвращает -1.

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

    $fd = fopen("hello.txt", "w+") or die("не удалось открыть файл"); $str = "Привет мир!"; // строка для записи fwrite($fd, $str); // запишем строку в начало fseek($fd, 0); // поместим указатель файла в начало fwrite($fd, "Хрю"); // запишем в начало строку fseek($fd, 0, SEEK_END); // поместим указатель в конец fwrite($fd, $str); // запишем в конце еще одну строку fclose($fd);

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

    Работа с файлами разделяется на 3 этапа:

    1. Открытие файла.
    2. Манипуляции с данными.
    3. Закрытие файла.

    I . Открытие файла

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

    $fp = fopen("counter.txt", "r");

    Согласно документации PHP выделяют следующие виды режимов файлов:

    1. r – открытие файла только для чтения.
    2. r+ - открытие файла одновременно на чтение и запись.
    3. w – создание нового пустого файла. Если на момент вызова уже существует такой файл, то он уничтожается.
    4. w+ - аналогичен r+, только если на момент вызова фай такой существует, его содержимое удаляется.
    5. a – открывает существующий файл в режиме записи, при этом указатель сдвигается на последний байт файла (на конец файла).
    6. a+ - открывает файл в режиме чтения и записи при этом указатель сдвигается на последний байт файла (на конец файла). Содержимое файла не удаляется.

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

    Для демонстрации рассмотрим следующий сценарий:

    //Открывает файл в разных режимах
    $fp = fopen("counter.txt", "r"); // Бинарный режим
    $fp = fopen("counter.txt", "rt"); // Текстовый режим
    $fp = fopen("http://www.yandex.ru", "r");// Открывает HTTP соединение на чтение
    $fp = fopen("ftp://user:[email protected]", "w"); //Открываем FTP соединение с указанием логина и пароля
    ?>

    II . Манипуляции с данными файла

    Записывать данные в файл при помощи PHP можно при помощи функции fwrite() . Это функция принимает 2 обязательных параметра и 1 необязательный. В качестве обязательных параметров выступает дескриптор файла и режим файла:

    $fp = fopen("counter.txt", "a"); // Открываем файл в режиме записи
    $mytext = "Это строку необходимо нам записать\r\n"; // Исходная строка
    $test = fwrite($fp, $mytext); // Запись в файл
    if ($test) echo "Данные в файл успешно занесены.";
    else echo "Ошибка при записи в файл.";
    fclose($fp); //Закрытие файла
    ?>

    Для построчного считывания файла используют функцию fgets() . Функция принимает 2 обязательных параметра:


    if ($fp)
    {
    while (!feof($fp))
    {
    $mytext = fgets($fp, 999);
    echo $mytext."
    ";
    }
    }

    fclose($fp);
    ?>

    Примечание: В данном примере значение 999 определяет количество символов, которые будут считываться до тех пор, пока указатель не достигнет конца файла (EOF).

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

    echoreadfile("counter.txt");
    ?>

    Также можно использовать функцию fpassthru() которая принимает 1 обязательный параметр. Перед использованием этой функции необходимо открыть файл в режиме чтения. По окончанию считывания файла функция автоматически закрывает файл(при этом дескриптор файла становиться недействительным).

    $fp = fopen("counter.txt", "r"); // Открываем файл в режиме чтения
    if ($fp) echo fpassthru($fp);
    elseecho "Ошибка при открытии файла";
    ?>

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

    Примечание: Не следует применять функцию file() к двоичным файлам (binary-safe), т.к. она не является безопасной в плане считывания двоичных файлов, если при этом, где-то встретиться символ конца файла (EOF), то она не гарантирует вам чтение всего двоичного файла.

    $file_array = file("counter.txt"); // Считывание файла в массив $file_array
    // Работа с данными массива
    ?>

    Примечание: Работа с массивами подробно описывается , авторы: Мухаметшин Д.Ф., Симдянов И.В.

    В конце статьи, вы найдете хороший «сборник рецептов» по массивам, который дает решение многих проблем, с которыми ежедневно встречается веб-программист.

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

    $fp = fopen("counter.txt", "r"); // Открываем файл в режиме чтения
    if ($fp)
    {
    while(!feof($fp))
    {
    $char = fgetc($fp);
    if ($char == "с") $i = $i + 1;// Находим символ «с»
    }
    echo "Количество букв "c" в файле: ". $i;
    }
    else echo "Ошибка при открытии файла";
    ?>

    III . Закрытие файла

    Закрытие файла происходить с помощью функции fclose() , которая принимает 1 обязательный параметр.

    $fp = fopen("counter.txt", "r");
    if ($fp)
    {
    echo "Файл открыт";
    fclose($fp); // Закрытие файла
    }
    ?>

    Сборник рецептов

    1) Нам необходимо проверить существует ли тот или иной файл. Для этого мы воспользуемся функцией file_exists() .

    myfile("counter.txt"); // Используем функцию myfile, передав в качестве аргумента имя файла

    function myfile($name) //Создаем функцию для проверки существования файла
    {
    if (file_exists($name)) echo "Файл существует";

    }
    ?>

    Примечание: Функция file_exists не производит проверку файлов на удаленном веб-сервере. Для правильной работы функции, файл со скриптом должен находиться на том сервере, где и проверяемый файл.

    2) Определяем размер файла с помощью функции filesize ()

    myfile("counter.txt");

    function myfile($name) //Создаем функцию для проверки существования файла и определения размера файла
    {
    if (file_exists($name)) echo "Размер файла: ".filesize($name)." байт";
    else echo "Файл не существует";
    }
    ?>

    3) Создание временного файла с помощью функции tmpfile ()

    $myfile = tmpfile();
    fwrite($myfile, "Эта строка записывается во временный файл."); // Записываем во временный файл
    fseek($myfile, 0); // Устанавливаем указатель файла
    echo fread($myfile, 1024); // выводим содержимое файла
    ?>

    4) Вам необходимо определить количество строк в файле. Для этого используем функцию count ()

    $fp = file("counter.txt");
    echo "Количество строк в файле: ".count($fp);
    ?>

    5) Нам необходимо использовать механизм блокировки файла

    $fp = fopen("counter.txt", "a");
    flock($fp, LOCK_EX); // Блокирование файла для записи
    fwrite($fp, "Строка для записи");
    flock($fp, LOCK_UN); // Снятие блокировки
    fclose($fp);
    ?>

    6) Нам необходимо удалить определенную строку из файла

    $num_stroka = 5; //Удалим 5 строку из файла
    $file = file("counter.txt"); // Считываем весь файл в массив

    for($i = 0; $i < sizeof($file); $i++)
    if($i == $num_stroka) unset($file[$i]);

    $fp = fopen("counter.txt", "w");
    fputs($fp, implode("", $file));
    fclose($fp);
    ?>

    7) Определение типа файла. Используем функцию

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

    Чтобы создать файл на php в исполняемом скрипте надо всего лишь указать несколько функций:

    Рассмотрим сразу пример:

    $text = "Какой-то тут текст для записи в файл";
    $fp = fopen("file.txt", "w");
    fwrite($fp, $text);
    fclose($fp);
    ?>

    Тут вы должны знать :

    fopen() - функция открывает файл чтения или для записи и уточнениями;

    Это уточнения (параметр mode функции fopen) очень важно:

    • "r " - открыть файл в php ТОЛЬКО для чтения . Курсор помещается в начало.
    • "r+ " - открыть файл в php для чтения и для записи . Курсор помещается в начало. !!! - при этих двух режимах r и r+ файлы уже должны быть созданы(иначе вылезет ошибка Warning: fopen(file.txt) : failed to open stream: No such file or directory in ... ), а мы лишь читаем или у нас есть возможность дописывать.
    • "w " - открывается файл ТОЛЬКО для записи. Файл урезается до нулевой длины - то есть затирается. Записывается, что нужно и Курсор ставится в начало.
    • "w+ " - открывается файл для записи И ЧТЕНИЯ! Остальное то же самое что и в режиме "w". !!! - при этих двух режимах - если файл не был создан - ПРЕДПРИМЕТСЯ ПОПЫТКА ЕГО СОЗДАТЬ!
    • "a " - открыть файл ТОЛЬКО для записи. В отличие от "w" этот параметр не затирает содержимое файла, а ставит курсор в конец строки и добавляет в конец содержимое, которое мы хотели добавить.
    • "a+ " - открыть файл для записи и чтения.

    fwrite ($fp, $text) - функция записи в файл на php - то есть то что находится в переменной $text записывается в файл, который находится в переменной $fp;

    fclose ($fp) - функция закрытия файла, который мы записали в переменную $fp;

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

    Полезные дополнения и функции PHP для работы с открытым файлом:

    while(!feof($fp)){
    $mytext = fgets($fp, 99);
    echo $mytext."
    ";
    }

    здесь выполняется условие - "пока не достигнут конец файла то делай то то" while(!feof($fp))

    1. Функция fgets ($fp, 99) - позволяет разделить все содержимое на участки в 99 байт и далее, чтобы это отчетливее увидеть мы помещаем тег

    Эта функция string fgets (resource handle [, int length]) по умолчанию принимает в параметр length 1024 байта(1 килобайт), если не указать так и будет. Этот параметр необязателен с PHP 4.2.0 (В случае ошибки возвращает FALSE)

    Доп функции для открытия, записи и создания файла

    Функция - int readfile (string filename [, bool use_include_path [, resource context]]) - считываем файл как единое целое.

    Читает файл и записывает содержимое в буфер вывода. И возвращает количество выведенных байт. В случае ошибки вернет, если не использована собачка - @readfile.

    Что-то подобное получится:

    В конце слова тег стоят
    .

    б. Функция - array file (string filename [, int use_include_path [, resource context]]), делает то же самое, что и функция readfile, за одним исключением она добавляет содержимое файла в массив:

    Таким образом можно считывать любые странички в интернете: $lines = file("http://сайт/"); и перебрать массив через функцию foreach;

    3а. Функция string file_get_contents (string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]]) - позволяет получить содержимое в виде одной строки.

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

    Важно!!! - в этом случае функция заменяет сразу 3: fopen(), fread() и fclose() и таким образом избавляет от мароки.

    3б. Функция int file_put_contents (string filename, mixed data [, int flags [, resource context]]) - идентична последовательному вызову функций fopen(), fwrite() и fclose() - возвращает количество записанных байт.



    © 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows