Обучение HTML, Excel, Word. Как сделать свой сайт бесплатно

Microsoft Office

Сайтостроение

HTML

Программинг

Компьютер

Графика

Разное

· Основы Word
· Основы Excel
· Основы VBA
· Основы OpenOffice
· Как сделать сайт
· Свой сайт от А до Я
· Оптимизация сайта
· Шаблоны для сайта
· Обзор CMS
· Основы HTML
· HTML-теги
· Основы CSS
· Основы PHP
· Основы JavaScript
· Софт для сайта
· Что внутри ПК
· ПК для чайников
· Все о BIOS
· Web-графика
· САПР: AutoCAD
· Статьи
· Форум
· SEO-новости
Главная страница Карта сайта
Учебник PHP
Основы SQL
  1. Введение
  2. Инструменты
  3. Первый шаг
  4. Структура языка
  5. Массивы
  6. Глобальные массивы
  7. Cookies
  8. Сессии
  9. Загрузка файлов
  10. Работа с файлами
  11. Работа с базами данных
  12. Работа в сети
  13. Отправка почты
  14. Безопасность
  15. Автоматизация
  16. Регулярные выражения в PHP
  17. Интеграция
 



Работа с данными в файлах

Автор: Артемьев Сергей Игоревич
ICQ: 438856621
email: _spin_@bk.ru

Для работы с данными внутри файла есть достаточно много функций. Мы рассмотрим только самые удобные и нужные в практической работе. Полный список вы сможете найти в официальной документации по PHP.


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


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

<?php
    $lines = file('myconfig.txt');
    foreach($lines as $single_line)
        echo $single_line . "<br />\n";
?>

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

<?php
    $content = file_get_contents('myfile.txt');
    $content = str_replace('{user_name}', 'Иван Петрович', $content);
    file_put_contents('myfile.txt', $content);
?>

В этом примере мы считываем всё содержимое файла myfile.txt, заменяем все вхождения строки "{user_name}" на нормальное имя и отчество ("Иван Петрович"), после чего сохраняем изменённые данные обратно в файл. Пользоваться этими функциями очень удобно, когда надо считать всё содержимое файла (например, фрагмент страницы или шаблон письма электронной почты).

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

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


'r' Файл открывается только для чтения, файловый указатель устанавливается на начало файла.
'r+' Файл открывается для чтения и записи, файловый указатель устанавливается на начало файла.
'w' Файл открывается только для записи, файловый указатель устанавливается на начало файла, размер файла ставится равным нулю, а если файл не существует - делается попытка создать его.
'w+' Файл открывается для чтения и записи, файловый указатель устанавливается на начало файла, размер файла ставится равным нулю, а если файл не существует - делается попытка создать его.
'a' Файл открывается только для записи, файловый указатель устанавливается на конец файла, а если файл не существует - делается попытка создать его.
'a+' Файл открывается для чтения и записи, файловый указатель устанавливается на конец файла, а если файл не существует - делается попытка создать его.
'x' Аналигично 'w', но если файл уже существует - функция вернёт ошибку.
'x+' Аналигично 'w+', но если файл уже существует - функция вернёт ошибку.

Некоторые разработчики всегда и везде ставят режим 'w+', как наиболее удобный. Но с другой стороны, такой режим органичивает возможности Web-сервера по кешированию и управлению производительностью. Режимами нужно пользоваться соответственно ситуации, т.е. если вам нужно только читать файл - используйте 'r', если писать - 'w', а если дописывать в конец файла - 'a'.

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

Функция fclose() закрывает файл, открытый ранее функцией fopen().

Изменим пример для file_get_contents()/file_put_contents() с использованием новых функций:

<?php

    $filename = 'myfile.txt';

    // открываем файл для чтения/записи
    if (!$handle = fopen($filename, 'w+')) {
         echo "Не могу открыть файл '$filename'";
         exit;
    }
    // считываем всё содержимое файла
    $content = fread($handle, filesize($filename));

    //изменяем содержимое
    $content = str_replace('{user_name}', 'Иван Петрович', $content);

    // записываем содержимое назад в файл
    if (fwrite($handle, $content) === FALSE) {
        echo "Не могу сохранить в файл '$filename'";
        exit;
    }

    // закрываем открытый файл
    fclose($handle);
?>

Замечательная особенность fopen() - можно открывать не только локальные файлы, но и URL. Например, можно открыть файл с Web или FTP-сервера и сохранить её в каталог сервера. Некоторые провайдеры запрещают такие операции в целях безопасности, но далеко не все.

<?php
    // открытие локального файла
    // $filename = 'myfile.txt';
    // открытие Web-страницы
    // $filename = 'http://www.example.com/';
    // открытие файла на FTP-сервере
    $filename = 'ftp://user:password@example.com/somefile.txt';

    // открываем файл для чтения/записи
    if (!$handle = fopen($filename, 'w+')) {
         echo "Не могу открыть файл '$filename'";
         exit;
    }
    // считываем всё содержимое файла
    $content = fread($handle, filesize($filename));

    //изменяем содержимое
    $content = str_replace('{user_name}', 'Иван Петрович', $content);

    // записываем содержимое назад в файл
    if (fwrite($handle, $content) === FALSE) {
        echo "Не могу сохранить в файл '$filename'";
        exit;
    }

    // закрываем открытый файл
    fclose($handle);
?>

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

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

<?php
    $filename = 'ftp://user:password@example.com/somefile.txt';

    $handle = fopen($filename, 'w+');

    // смещаемся на 10 байт от конца файла
    fseek($handle, 10, SEEK_END);

    // считываем всё содержимое файла
    $content = fread($handle, 10);

    // закрываем открытый файл
    fclose($handle);
?>

Функция rewind() аналогична fseek(), но позволяет переместить файловый указатель только на начало файла.

Функции fseek() и rewind() работают при любом режиме открытия файла, но если файл открыт в режиме добавления (режимы 'a' или 'a+'), то данные всегда будут записываться в конец файла, даже если вы переместите файловый указатель на начало.

При работе с файлами надо обдуманно выбирать набор используемых функций. Если вам надо считывать все данные и выполнять какие-то массовые операции (замена слов, разбор текста и т.п.), то лучше использовать file(), file_get_contents() и file_put_contents(). Но если вы хотите иметь возможность построчного доступа, возможность обработки огромных файлов или файлов сложной структуры - нужно использовать fopen() и сопутствующие ей функции.

top




 




Спасибо, что заглянули на сайт. Надеюсь, Вам понравилось. Заходите еще. Здесь всегда рады вам :)
При копировании материалов, размещенных на сайте, ссылка на первоисточник обязательна.
Если понравился этот сайт..

© 2005-2012
Юрий Кордык All Rights Reserved

 

E-mail:
admin@on-line-teaching.com