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

Активный
Статус
Сообщения
516
Лайки
32

8

месяц на сайте

Руководство по чтению, записи и управлению файлами в PHP с примерами кода.

Чтение файла целиком

Код:
<?php
// file_get_contents - читает весь файл в строку
$content = file_get_contents('data.txt');
echo $content;

// С обработкой ошибок
$content = @file_get_contents('data.txt');
if ($content === false) {
    echo "Ошибка чтения файла";
} else {
    echo $content;
}
?>

Запись в файл

Код:
<?php
// file_put_contents - записывает данные в файл
$data = "Новая строка данных\n";
file_put_contents('data.txt', $data);

// Добавление в конец файла
file_put_contents('data.txt', $data, FILE_APPEND);

// Создание файла если не существует
file_put_contents('newfile.txt', $data, FILE_APPEND | LOCK_EX);
?>

Чтение файла построчно

Код:
<?php
$file = fopen('data.txt', 'r');
if ($file) {
    while (($line = fgets($file)) !== false) {
        echo $line;
    }
    fclose($file);
} else {
    echo "Ошибка открытия файла";
}
?>

Запись построчно

Код:
<?php
$file = fopen('output.txt', 'w');
if ($file) {
    fwrite($file, "Строка 1\n");
    fwrite($file, "Строка 2\n");
    fwrite($file, "Строка 3\n");
    fclose($file);
}
?>

Проверка существования файла

Код:
<?php
if (file_exists('data.txt')) {
    echo "Файл существует";
    echo "Размер: " . filesize('data.txt') . " байт";
    echo "Последнее изменение: " . date('Y-m-d H:i:s', filemtime('data.txt'));
} else {
    echo "Файл не существует";
}
?>

Копирование и перемещение файлов

Код:
<?php
// Копирование
if (copy('source.txt', 'destination.txt')) {
    echo "Файл скопирован";
} else {
    echo "Ошибка копирования";
}

// Перемещение/переименование
if (rename('oldname.txt', 'newname.txt')) {
    echo "Файл переименован";
}

// Удаление
if (unlink('file.txt')) {
    echo "Файл удален";
}
?>

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

Код:
<?php
// Чтение CSV
$file = fopen('data.csv', 'r');
while (($row = fgetcsv($file)) !== false) {
    print_r($row);
}
fclose($file);

// Запись CSV
$file = fopen('output.csv', 'w');
$data = [
    ['Имя', 'Возраст', 'Город'],
    ['Иван', 25, 'Москва'],
    ['Петр', 30, 'СПб']
];
foreach ($data as $row) {
    fputcsv($file, $row);
}
fclose($file);
?>

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

Код:
<?php
// Чтение JSON
$json = file_get_contents('data.json');
$data = json_decode($json, true);

// Запись JSON
$data = ['name' => 'Иван', 'age' => 25];
$json = json_encode($data, JSON_UNESCAPED_UNICODE);
file_put_contents('data.json', $json);
?>

Создание директорий

Код:
<?php
// Создание одной директории
if (!file_exists('newdir')) {
    mkdir('newdir');
}

// Создание с правами доступа
mkdir('newdir', 0755);

// Рекурсивное создание
mkdir('path/to/directory', 0755, true);
?>

Чтение директории

Код:
<?php
$dir = opendir('.');
while (($file = readdir($dir)) !== false) {
    if ($file != '.' && $file != '..') {
        echo $file . "\n";
    }
}
closedir($dir);

// Современный способ
$files = scandir('.');
foreach ($files as $file) {
    if ($file != '.' && $file != '..') {
        echo $file . "\n";
    }
}
?>

Рекурсивный обход директории

Код:
<?php
function scanDirectory($dir) {
    $files = [];
    $items = scandir($dir);
    
    foreach ($items as $item) {
        if ($item != '.' && $item != '..') {
            $path = $dir . '/' . $item;
            if (is_dir($path)) {
                $files = array_merge($files, scanDirectory($path));
            } else {
                $files[] = $path;
            }
        }
    }
    
    return $files;
}

$allFiles = scanDirectory('.');
foreach ($allFiles as $file) {
    echo $file . "\n";
}
?>

Загрузка файлов

Код:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['file'])) {
    $uploadDir = 'uploads/';
    $fileName = basename($_FILES['file']['name']);
    $targetFile = $uploadDir . $fileName;
    
    // Проверка типа файла
    $allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
    if (!in_array($_FILES['file']['type'], $allowedTypes)) {
        echo "Недопустимый тип файла";
        exit;
    }
    
    // Проверка размера (максимум 5MB)
    if ($_FILES['file']['size'] > 5000000) {
        echo "Файл слишком большой";
        exit;
    }
    
    if (move_uploaded_file($_FILES['file']['tmp_name'], $targetFile)) {
        echo "Файл загружен: " . $fileName;
    } else {
        echo "Ошибка загрузки";
    }
}
?>

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

Код:
<?php
$file = fopen('data.txt', 'r+');
if (flock($file, LOCK_EX)) {
    // Эксклюзивная блокировка
    $content = fread($file, filesize('data.txt'));
    // Изменение данных
    ftruncate($file, 0);
    rewind($file);
    fwrite($file, $content);
    flock($file, LOCK_UN); // Снятие блокировки
}
fclose($file);
?>

Чтение больших файлов

Код:
<?php
function readLargeFile($filename, $chunkSize = 8192) {
    $file = fopen($filename, 'r');
    if (!$file) {
        return false;
    }
    
    while (!feof($file)) {
        $chunk = fread($file, $chunkSize);
        // Обработка чанка
        echo $chunk;
    }
    
    fclose($file);
    return true;
}

readLargeFile('largefile.txt');
?>

Получение информации о файле

Код:
<?php
$file = 'data.txt';
echo "Размер: " . filesize($file) . " байт\n";
echo "Время изменения: " . date('Y-m-d H:i:s', filemtime($file)) . "\n";
echo "Время доступа: " . date('Y-m-d H:i:s', fileatime($file)) . "\n";
echo "Права доступа: " . substr(sprintf('%o', fileperms($file)), -4) . "\n";
echo "Тип: " . filetype($file) . "\n";
echo "MIME тип: " . mime_content_type($file) . "\n";
?>

Временные файлы

Код:
<?php
// Создание временного файла
$tempFile = tmpfile();
fwrite($tempFile, "Временные данные");
rewind($tempFile);
echo fread($tempFile, 1024);
fclose($tempFile); // Файл автоматически удаляется

// Или с именем
$tempName = tempnam(sys_get_temp_dir(), 'prefix_');
file_put_contents($tempName, "Временные данные");
echo file_get_contents($tempName);
unlink($tempName);
?>

Архивирование файлов

Код:
<?php
// Создание ZIP архива
$zip = new ZipArchive();
if ($zip->open('archive.zip', ZipArchive::CREATE) === TRUE) {
    $zip->addFile('file1.txt', 'file1.txt');
    $zip->addFile('file2.txt', 'file2.txt');
    $zip->close();
    echo "Архив создан";
}

// Извлечение из архива
$zip = new ZipArchive();
if ($zip->open('archive.zip') === TRUE) {
    $zip->extractTo('extracted/');
    $zip->close();
    echo "Архив распакован";
}
?>

Работа с файлами - важная часть PHP программирования. Эти примеры покрывают большинство задач по работе с файловой системой.
 

1 человек читают эту тему (Всего: 1, Пользователей: 0, Гостей: 1)

Сверху