Yandex Metrika
sanches.free 4 просмотра

Файловая система в Битрикс D7: IO\File и IO\Directory

Зачем Main\IO

В D7 файловые операции обёрнуты в объекты Bitrix\Main\IO — единый стиль с остальным ядром и меньше ручной склейки путей. Корень сайта берите из Application::getDocumentRoot().

use Bitrix\Main\Application;
use Bitrix\Main\IO;

$root = Application::getDocumentRoot();
$exportFile = new IO\File($root . '/upload/exports/report.csv');

Файл IO\File

Метаданные: isExists(), getSize(), getExtension(), времена создания/изменения, getPermissions().

Чтение и запись:

$payload = $exportFile->getContents();
$exportFile->putContents($csvBody);
$exportFile->putContents("\n" . $extraRow, IO\File::APPEND);
$exportFile->rename($root . '/upload/exports/report-' . date('Y-m-d') . '.csv');
$exportFile->delete();

Статические аналоги: IO\File::isFileExists($path), getFileContents, putFileContents, deleteFile — удобны для разовых скриптов миграции.

Каталог IO\Directory

$workDir = new IO\Directory($root . '/upload/tmp/job_42/');
if (!$workDir->isExists()) {
    $workDir->create();
}
$archiveDir = $workDir->createSubdirectory('archive');

foreach ($workDir->getChildren() as $node) {
    if ($node instanceof IO\File) {
        // обработка файла
    }
}

IO\Path

Утилиты без создания объекта файла: IO\Path::getExtension, getName, getDirectory — полезно для логов и валидаторов путей в модуле.

Когда оставить PHP

  • Потоковая обработка очень больших файлов — иногда проще SplFileObject.
  • Интеграция со сторонними библиотеками, ожидающими строковый путь.

В типовом модуле на D7 для экспорта, агентов и локальных кешей IO\File / IO\Directory — разумный стандарт.

Итог

Собирайте пути от document root, проверяйте isExists(), для пакетных операций используйте статические методы. Не храните абсолютные пути в БД — только относительные от /upload/ или /local/.

Не хотите копаться сами?

Починю за 1-3 дня. Без предоплаты — оплата по результату.

15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии