В данной статье рассмотрим проблему (как загрузить большой файл), с которой сам столкнулся буквально вчера. Загружал на сайт новый видео курс, через раздел MEDIA грузил видео файлы. Для WordPress чтобы подгрузить большой файл нужно включить дополнительные опции, про это я рассказывал в отдельной статье. У меня уже были сняты ограничения и установлено 2Г на файл.
Первые 3 видео файла успешно загрузились, а четвертое просто подвисало и не грузилось. Я никак не мог понять почему оно не подгружается, ведь ошибок ни PHP ни JS не выкидывали, консоль с логами пустая. Просто файл не принимает и все, без отображения ошибок. Я пробую пятый файл загрузить, тоже не принимает и ничего в ответ не выдает. И вдруг меня осенило, на сайте ведь использую cloudflare для кэша, и следовательно все запросы проходят именно через него. А у cludflare для бесплатного тарифа стоит ограничение на загружаемые файлы в 100 мб, и те файлы просто превышали лимит.
Как загрузить большой файл и решить проблему?
Отключать cloudflare чтобы загрузить эти файлы мне не хотелось. Пришлось искать решение в обход. Кстати это решение поможет и в других ситуациях. Например если ваш хостинг не позволяет вам увеличить memory_limit и execuration_time а именно эти параметры скрипт загрузки использует. У меня же эти параметры увеличены, а проблема заключалась что файл сначала отправлялся в запросе к серверу cloudflare и только потом к реальному серверу сайта, и на стороне cloudflare просто обрывался.
- Я загрузил файлы через FTP в папку wp-content/uploads/год/месяц (WordPress при загрузки файлов создает каталоги на базе даты загрузки и я использовал такую же структуру, хотя можно создать абсолютно любой каталог)
- Конечно же файлы в админке не появились, в разделе MEDIA ни слуху ни духу. Когда мы загружаем что то через админку, WordPress кроме загрузки файла, еще вписывает пост в базу данных в которой сохраняет данные для файла, такие как название, alt, caption и другие.
- Воспользовался плагином Media Sync для того чтобы просканировать каталог загрузок на наличие файлов для которых нет записи в базе и для найденных файлов создать такую запись.
- В результате загруженные через FTP файлы появились в разделе MEDIA.
- Плагин после операции отключил а файлы уже использовал в редакторе по назначению
Как работает плагин Media Sync?
В настройках плагина можно задать путь который нужно сканировать. По умолчанию это /wp-content/uploads
. Но поскольку у меня на сайте много в нем файлов и каталогов, я задал путь для сканирования /wp-content/uploads/2024/01
чтобы не копаться во всех и не расходовать ресурсы сервера. Нажимаем Scan Files.
Плагин вернет список файлов в заданном каталоге, все файлы которые не имеют записи в базе данных (а это все файлы которые были загружены через FTP или другим ручным способом, например через файл менеджер хостинга) будут выделены и четко отличимы от тех которые уже есть в MEDIA.
Выбираем новые файлы и жмем импорт, и плагин для них создаст запись в базе. После этой процедуры эти файлы можно использовать как и любые другие файлы загруженные через админку.
Заключение
В заключение, важно помнить, что технические трудности при работе с платформами, такими как WordPress, могут возникнуть внезапно и потребовать нетрадиционных подходов для их преодоления. Ограничения, связанные с хостингом или облачными сервисами, могут стать причиной неудачной загрузки файлов. Однако, находить альтернативные методы, такие как использование FTP и специализированных плагинов, позволяет эффективно обойти эти препятствия и успешно завершить задачи. Этот опыт подчеркивает важность гибкости и поиска нестандартных решений, которые могут быть весьма полезны не только в ситуации загрузки файлов, но и в других аспектах работы с веб-платформами.