7. Файлы
7.1. Основные возможности языка программирования для работы с файлами
7.2. Организация файла. Прямой и последовательный доступ.
96.04K
Категория: ПрограммированиеПрограммирование

ЛК7 (1)

1. 7. Файлы

7. ФАЙЛЫ
Файлы. Основные возможности языка программирования для работы с файлами. Способы
представления информации в файлах.
Организация файла. Прямой и последовательный доступ. Программная реализация алгоритмов работы
с файлами. Примеры вычислительных алгоритмов.

2. 7.1. Основные возможности языка программирования для работы с файлами

7.1. ОСНОВНЫЕ ВОЗМОЖНОСТИ ЯЗЫКА ПРОГРАММИРОВАНИЯ
ДЛЯ РАБОТЫ С ФАЙЛАМИ
PHP предоставляет множество функций для работы с файлами:
fopen() - открытие файла
fclose() - закрытие файла
fread(), fgets() - чтение из файла
fwrite() - запись в файл
file_get_contents(), file_put_contents() - чтение/запись всего файла
file_exists() - проверка существования файла
unlink() - удаление файла
rename() - переименование файла
copy() - копирование файла

3.

При открытии файла с помощью fopen() указывается режим:
'r' - чтение (файл должен существовать)
'r+' - чтение и запись
'w' - запись (создает файл или очищает существующий)
'w+' - чтение и запись (создает/очищает)
'a' - добавление в конец (создает файл если нужно)
'a+' - чтение и добавление
'x' - эксклюзивное создание (ошибка если файл существует)
'x+' - эксклюзивное создание с возможностью чтения.

4.

Текстовые файлы
Простое хранение данных в виде строк
Читаемы человеком
Пример: CSV, конфигурационные файлы
// Запись в текстовый файл
file_put_contents('data.txt', "Строка 1\nСтрока 2\n");
// Чтение из текстового файла
$content = file_get_contents('data.txt');
echo $content;

5.

Бинарные файлы
Более компактное представление
Пример: изображения, сериализованные данные
// Запись бинарных данных
$data = pack('L*', 1, 2, 3, 4);
file_put_contents('binary.dat', $data);
// Чтение бинарных данных
$binary = file_get_contents('binary.dat');
$unpacked = unpack('L*', $binary);
print_r($unpacked);

6.

Сериализация данных – процесс перевода структуры данных в битовую
последовательность (строку)
$data = ['name' => 'John', 'age' => 30];
file_put_contents('serialized.txt', serialize($data));
$loaded = unserialize(file_get_contents('serialized.txt'));
print_r($loaded);

7.

JSON
текстовый формат обмена данными, основанный на JavaScript
за счёт своей лаконичности по сравнению с XML может быть более
подходящим для сериализации сложных структур
$data = ['name' => 'John', 'age' => 30];
file_put_contents('data.json', json_encode($data));
$loaded = json_decode(file_get_contents('data.json'), true);
print_r($loaded);

8.

JSON

9.

Видеодемонстрация
1) Работа с файлами. Практический PHP
2) Пишем и читаем CSV файлы. Практический PHP Stage 2
3) Пишем и читаем JSON файлы. Практический PHP Stage 2

10.

Подключение файлов - важная возможность PHP, позволяющая организовывать
код в модули, повторно использовать код и разделять логику приложения.
include
При ошибке выдает предупреждение (E_WARNING), но скрипт продолжает работу
include 'config.php';
include 'functions.php’;
require
При ошибке выдает фатальную ошибку (E_COMPILE_ERROR) и останавливает
скрипт
require 'database.php';

11.

// functions.php
<?php
function calculateSum($a, $b) {
return $a + $b;
}
// index.php
require 'functions.php';
echo calculateSum(5, 3); // 8
В современных PHP-проектах часто используется Composer и его автозагрузчик:
composer require package/name (bash)

12. 7.2. Организация файла. Прямой и последовательный доступ.

7.2. ОРГАНИЗАЦИЯ ФАЙЛА. ПРЯМОЙ И ПОСЛЕДОВАТЕЛЬНЫЙ
ДОСТУП.
Правильная организация файловой структуры - ключ к поддержанию чистого,
масштабируемого и понятного кода.
Файлы классов
• Один класс = один файл
• Имя файла соответствует имени класса
• Следование стандарту PSR-4
namespace App\Models;
class User
{
// Класс пользователя
}

13.

Конфигурационные файлы
• Возвращают массив настроек
• Обычно имеют расширение .php
• Не содержат исполняемого кода
// config/database.php
<?php
return [
'host' => 'localhost',
'dbname' => 'myapp',
'user' => 'root',
'password' => ''
];

14.

Шаблоны представлений
• Содержат HTML с минимальной PHP-логикой
• Используют расширение .phtml или .php
• Разделены на компоненты
<!-- resources/views/header.phtml -->
<header>
<h1><?= htmlspecialchars($title) ?></h1>
</header>

15.

project-root/
├── app/

├── Controllers/

├── Models/

├── Views/

└── Core/
├── config/
├── public/

├── css/

├── js/

├── images/

└── index.php
├── vendor/
├── tests/
├── storage/
└── resources/
# Основное приложение
# Контроллеры
# Модели данных
# Представления
# Ядро приложения
# Конфигурационные файлы
# Публичная директория
# Стили
# JavaScript
# Изображения
# Точка входа
# Зависимости (Composer)
# Тесты
# Файлы приложения (логи, кэш)
# Ресурсы (шаблоны, переводы)

16.

Последовательный доступ
Данные читаются последовательно от начала до конца
Эффективно для обработки всего файла
$handle = fopen('data.txt', 'r');
while (!feof($handle)) {
$line = fgets($handle);
echo $line;
}
fclose($handle);
//feof - достигнут ли конец файла

17.

Прямой (произвольный) доступ
Возможность читать/писать в любое место файла
Используется fseek() для позиционирования
Эффективно для больших файлов и поиска
$handle = fopen('data.txt', 'r+');
fseek($handle, 10); // Перемещаемся на 10 байт от начала
$data = fread($handle, 5); // Читаем 5 байт
echo $data;
fclose($handle);

18.

Чтение файла построчно
function readFileLineByLine($filename) {
$handle = fopen($filename, 'r');
if (!$handle) {
throw new Exception("Не удалось открыть файл"); }
while (!feof($handle)) {
yield fgets($handle);
}
fclose($handle);
}
foreach (readFileLineByLine('large_file.txt') as $line) {
echo $line;
}

19.

Поиск в файле
function searchInFile($filename, $search) {
$handle = fopen($filename, 'r');
$lineNumber = 0;
while (!feof($handle)) {
$lineNumber++;
$line = fgets($handle);
if (strpos($line, $search) !== false) {
fclose($handle);
return $lineNumber;
}
}
fclose($handle);
return -1;
}

20.

Подсчет частоты слов в тексте
function wordFrequency($filename) {
$content = file_get_contents($filename);
$words = preg_split('/\s+/', strtolower($content));
$frequency = array_count_values($words);
arsort($frequency);
return $frequency;
}
print_r(wordFrequency('text.txt'));

21.

Обработка CSV-файла
function processCSV($filename) {
$handle = fopen($filename, 'r');
$headers = fgetcsv($handle);
$data = [];
while ($row = fgetcsv($handle)) {
$data[] = array_combine($headers, $row);
}
fclose($handle);
return $data;
}
$stats = processCSV('data.csv');

22.

Поиск дубликатов файлов
function findDuplicates($dir) {
$hashes = [];
$duplicates = [];
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
foreach ($files as $file) {
if ($file->isFile()) {
$hash = md5_file($file->getPathname());
if (isset($hashes[$hash])) {
$duplicates[$hash][] = $file->getPathname();
} else {
$hashes[$hash] = $file->getPathname();
}
}
}
return array_filter($duplicates);
}
English     Русский Правила