Картинки не отображаются - пустой каталог, права, битые пути
Элементы на месте, а картинок нет: вместо изображения пустая рамка, ссылка ведёт в никуда, каталог загрузок подозрительно лёгкий. Чаще всего это заметно после переезда на другой сервер или ручной чистки диска. Разбираем причины по убыванию частоты.
С чего начать
Первая проверка делит все причины пополам. Либо файла нет на диске, и виноват перенос или чистка, либо файл лежит на месте, а до браузера не доходит.
Проверяем путь из исходного кода страницы:
# берём адрес картинки из вёрстки и ищем этот же файл на дискеls -l /home/bitrix/www/upload/iblock/a1b/photo.jpgcurl -sI https://site.ru/upload/iblock/a1b/photo.jpg | head -1# живой файл при ответе 403 или 404 означает права либо веб-серверОтсутствие файла на диске уводит к первой группе причин, а живой файл с отказом по ссылке - ко второй. Дальше проверки внутри группы идут быстрее.
Смотрим, что о файле знает платформа:
$file = \CFile::GetFileArray($fileId); // false, если записи о файле нет вовсе$path = \Bitrix\Main\Application::getDocumentRoot() . \CFile::GetPath($fileId);var_dump($file['SUBDIR'], $file['FILE_NAME'], file_exists($path), filesize($path));// GetPath вернёт NULL, когда записи с таким номером в таблице файлов не осталосьЗапись есть, а файла нет - хранилище рассинхронизировано с диском. Нулевой размер выдаёт файл, который не доехал целиком или создавался при нехватке места.
Считаем файлы на диске и записи в базе:
# уменьшенные копии из счёта исключаем: записей в таблице файлов у них нетfind /home/bitrix/www/upload -type f -not -path '*/resize_cache/*' | wc -lmysql -N -e 'SELECT COUNT(*) FROM b_file' sitemanager0du -sh /home/bitrix/www/upload /home/bitrix/www/upload/resize_cache# записей в разы больше, чем файлов - каталог загрузок доехал не полностьюРасхождение в разы означает потерянный перенос, а расхождение в единицы - ручную чистку диска. Второй случай лечится точечно, первый - только повторной перевозкой каталога.
Сверяем права, владельца и свободное место:
# на пути к файлу право на вход нужно каждому каталогу, а не только последнемуls -ld /home/bitrix/www /home/bitrix/www/upload /home/bitrix/www/upload/iblockstat -c '%U:%G %a %n' /home/bitrix/www/upload/iblock/a1b/photo.jpgdf -h /home/bitrix/www # переполненный диск даёт копии нулевого размера# права по умолчанию: файлы 0644, папки 0755, владелец - пользователь веб-сервераИщем в таблице файлов пустые записи:
SELECT ID, SUBDIR, FILE_NAME, FILE_SIZE, MODULE_ID FROM b_fileWHERE FILE_SIZE = 0 ORDER BY TIMESTAMP_X DESC LIMIT 20;-- MODULE_ID показывает, чьи это файлы: инфоблоков, форм или своего модуля-- массовый нулевой размер указывает на оборванный перенос каталога загрузокПричины
-
Файлы не доехали при переносе, а записи о них остались примерно 30% случаев
ПризнакКаталог загрузок на новом сервере пуст или заметно легче прежнего, а элементы на месте.
ПроверкаСравниваем число записей в таблице файлов с числом файлов внутри каталога загрузок.
Что делатьПереносим каталог загрузок отдельным архивом: штатная копия тяжёлые папки часто исключает целиком.
-
Веб-серверу не хватает прав на каталог загрузок примерно 25% случаев
ПризнакФайл на диске лежит и читается в консоли, а по прямой ссылке браузер получает отказ.
ПроверкаСмотрим владельца и права самого файла и всех каталогов на пути к нему.
Что делатьВозвращаем владельца пользователю веб-сервера, а права - к 0644 на файлы и 0755 на папки.
-
Уменьшенные копии не пересозданы или собраны пустыми примерно 18% случаев
ПризнакОригинал открывается по прямой ссылке, а миниатюра в списке пустая либо нулевого размера.
ПроверкаПроверяем свободное место на диске и размер файла копии в служебном каталоге.
Что делатьОсвобождаем место и удаляем пустую копию: платформа соберёт её заново при первом обращении.
-
Путь к файлу записан в коде абсолютным примерно 12% случаев
ПризнакВ исходном коде страницы виден домен старого сайта или путь каталогов прежнего сервера.
ПроверкаИщем по шаблонам и своему коду прямые обращения к каталогу загрузок и жёсткие домены.
Что делатьСобираем путь по номеру файла штатным вызовом, а не склейкой строк в шаблоне.
-
Запись о файле осталась, а сам файл удалён вручную примерно 10% случаев
ПризнакПропали отдельные картинки, а не весь каталог, и обычно сразу после ручной чистки диска.
ПроверкаБерём номер файла из поля элемента и проверяем существование файла по собранному пути.
Что делатьЧистим файлы штатным вызовом: он убирает и запись в таблице, и сам файл с диска.
-
Файлы вынесены в облачное хранилище примерно 5% случаев
ПризнакПо прямой ссылке файл открывается, а на странице сайта картинка так и не появляется.
ПроверкаСверяем адрес картинки в вёрстке с ответом хранилища на запрос из браузера.
Что делатьПравим домен и заголовки хранилища и помним: штатная резервная копия облачные файлы не забирает.
Частые вопросы
После переноса сайта пропали миниатюры к картинкам, как исправить?
Сначала смотрим свободное место: при нехватке платформа создаёт копию нулевого размера. Освобождаем диск, удаляем пустой файл копии, и он пересоздаётся из оригинала при обращении.
Файл физически существует, но объём его равен нулю - что это?
Файл не доехал целиком либо создавался, когда на диске кончилось место. Такой файл удаляют: оригиналы восстанавливают из копии, а уменьшенные копии собираются заново.
Можно ли просто удалить каталог уменьшенных копий?
Да, данные при этом не теряются: платформа соберёт нужные размеры заново. Первые минуты после уборки витрина работает заметно медленнее обычного.
Перенёс портал на другой сервер, и в админке перестали отображаться файлы
Типовая причина - у пользователя веб-сервера нет прав на каталог сайта. Проверяем владельца всей ветки каталогов, а не только каталога загрузок.
Почему картинку видно по прямой ссылке, а на сайте нет?
Значит, файл цел, а неверен адрес в вёрстке или ответ хранилища. Сверяем домен картинки в исходном коде страницы и заголовки, с которыми она отдаётся.
Смежное
- Файлы в коде - оглавление подтемы
- Файлы платформы изнутри: таблица, каталоги, копии, удаление - как устроено хранилище и откуда берутся копии
- Файл не загружается: пределы, права, типы, веб-сервер - обратный случай: файл не удаётся загрузить
- Файлы из кода: сохранение, уменьшенные копии, удаление - как класть файл в хранилище и убирать за собой
- Перенос сайта на другой сервер: через восстановление и вручную - чтобы каталог загрузок доехал целиком
- Права на файлы и папки: файловая система и права структуры - владелец и права на уровне сервера
- Закончилось место на диске: разбор причин - почему копии создаются пустыми
- Не выгружаются картинки из 1С: разбор причин - когда изображения не приезжали вовсе
- Картинки товара: загрузка, размеры и вывод галереи - тот же симптом в карточке товара
- Ядро D7 - устройство ядра целиком
- Облачное хранилище и CDN: подключение, перенос, копии - если картинки живут в облаке