Чтение файлов с помощью PHP
Читайте содержимое файлов с помощью file_get_contents и fopen/fread
«Чтение файлов с помощью PHP» — бесплатный урок PHP Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.
PHP и файловая система
PHP позволяет читать, записывать и обрабатывать файлы в файловой системе сервера. Основные функции для чтения:
file_get_contents()— чтение всего файла как строкиfopen()+fread()— чтение на основе потокаfile()— чтение файла в массив строк
file_get_contents()
Самый простой способ прочитать всё содержимое файла в строку:
<?php
$content = file_get_contents('/var/www/html/data.txt');
if ($content === false) {
echo 'Could not read file';
} else {
echo $content;
echo strlen($content) . ' bytes';
}Проверка существования файла
Всегда проверяйте это перед чтением, чтобы избежать ошибок:
<?php
$path = '/var/data/config.json';
if (!file_exists($path)) {
die('Config file not found');
}
if (!is_readable($path)) {
die('No permission to read file');
}
$json = file_get_contents($path);
$config = json_decode($json, true);file() — чтение в массив
file() читает файл и возвращает каждую строку как элемент массива:
<?php
$lines = file('data.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $lineNum => $line) {
echo ($lineNum + 1) . ': ' . $line . PHP_EOL;
}fopen, fread, fclose
Низкоуровневое чтение потока для больших файлов: обрабатывайте файл, не загружая его целиком в память:
<?php
$handle = fopen('large_file.txt', 'r');
if ($handle === false) die('Cannot open file');
// Read 1KB at a time
while (!feof($handle)) {
$chunk = fread($handle, 1024);
echo $chunk;
}
fclose($handle);fgets для построчного чтения
fgets() читает по одной строке за раз, экономя память при работе с большими файлами:
<?php
$handle = fopen('server.log', 'r');
while (($line = fgets($handle)) !== false) {
if (str_contains($line, 'ERROR')) {
echo 'Found error: ' . $line;
}
}
fclose($handle);Чтение удалённых файлов
file_get_contents() также может читать данные по URL HTTP, если включён параметр allow_url_fopen:
<?php
$json = file_get_contents('https://api.example.com/data.json');
// Prefer cURL for more control and error handling
$ch = curl_init('https://api.example.com/data.json');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);SplFileObject
SplFileObject предоставляет объектно-ориентированный интерфейс для работы с файлами:
<?php
$file = new SplFileObject('data.txt', 'r');
foreach ($file as $lineNum => $line) {
echo $lineNum . ': ' . $line;
}
// Read specific line:
$file->seek(5);
echo $file->current(); // line 6 (0-indexed)Чтение файлов JSON
Распространённый шаблон: чтение и декодирование файла конфигурации JSON:
<?php
function loadJsonConfig(string $path): array {
if (!file_exists($path)) {
throw new RuntimeException("Config not found: $path");
}
$json = file_get_contents($path);
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new RuntimeException('Invalid JSON: ' . json_last_error_msg());
}
return $data;
}
$cfg = loadJsonConfig('/app/config.json');Сведения о файле
Получайте метаданные файла, не читая его содержимое:
<?php
$path = '/var/www/html/image.jpg';
echo filesize($path); // bytes
echo filetype($path); // 'file'
echo filemtime($path); // last modified timestamp
echo date('Y-m-d', filemtime($path));
$info = pathinfo($path);
echo $info['dirname']; // /var/www/html
echo $info['basename']; // image.jpg
echo $info['extension']; // jpgБлокировка файлов
Используйте блокировку файлов, чтобы предотвратить конфликты при одновременной записи:
<?php
$handle = fopen('counter.txt', 'r+');
if (flock($handle, LOCK_EX)) { // exclusive lock
$count = (int) fread($handle, 20);
$count++;
fseek($handle, 0);
fwrite($handle, $count);
fflush($handle);
flock($handle, LOCK_UN); // release
}
fclose($handle);Быстрая проверка
Какая функция PHP за один вызов считывает весь файл в строку?
Повторение: чтение файлов
Основы чтения файлов:
file_get_contents()— весь файл как строкаfile()— файл как массив строкfopen/fread/fclose— поток для больших файловfgets()— построчное чтение из потока- Всегда сначала проверяйте file_exists и is_readable
- Используйте flock для безопасного одновременного доступа
Часто задаваемые вопросы
Урок «Чтение файлов с помощью PHP» бесплатный?
Да — полный текст урока «Чтение файлов с помощью PHP» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.
Чему я научусь в уроке «Чтение файлов с помощью PHP»?
Читайте содержимое файлов с помощью file_get_contents и fopen/fread Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать PHP Academy?
Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Чтение файлов с помощью PHP»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке PHP Academy?
Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Чтение файлов с помощью PHP
- Запись и добавление данных в файлы
- Работа с каталогами
- Обработка загрузки файлов