6

Я работаю на сервере Linux с общим хостингом GoDaddy ("безлимитный" хостинг).

У меня есть папка с изображениями продуктов для интернет-магазина, которая содержит более 7000 изображений.

GoDaddy сказал мне, что мне не разрешено иметь более 1024 файлов в одном каталоге, и мне нужно переформатировать структуру папок, что невозможно, поскольку это программное обеспечение обслуживается и запускается системой Point-of-Sale у моего клиента. магазин кирпича и раствора.

Я ввел SSH и изменил права доступа к папке, в которую перемещаю изображение, а само изображение к 777 и выполнил следующую команду:

mv img.gif product_images/img.gif

и я получаю следующую ошибку:

mv: cannot move 'img.gif' to 'product_images/img.gif': File too large

Файл не "слишком большой"; это только 49 байтов (это 1x1 GIF)!

Если я пытаюсь перетащить + падение загрузки из Windows в каталог через FTP, я получаю следующие ошибки:

An error occurred copying a file to the FTP Server. Make sure you have permission to put files on the server.

Details:
200 TYPE is now 8-bit binary
227 Entering Passive Mode (184,168,167,92,197,60)
553-Can't open that file: File too large
553 Rename/move failure: no such file or directory

У меня действительно есть разрешение помещать файлы на сервер ... это то, как я помещаю туда файл img.gif. Каталог существует. Я могу просто ls его содержимое.

Предыдущий парень поддержки (которого больше нет в наличии) мог это сделать - я просто не знаю как.

Как я могу перемещать файлы в этот очень упрямый каталог? Есть идеи?

4 ответа4

6

Итак, после поиска в файле godaddy 1024 ограничения на количество файлов и чтения нескольких результатов кажется, что лучшим вариантом может быть поиск нового хоста.

За исключением этого, наименее болезненным способом решения проблемы было бы логически организовать файлы в подкаталоги, а затем использовать правила перезаписи Apache для сопоставления старых путей с новыми путями. Это избавит вас от изменения чего-либо в реальном приложении. Ниже приведен один пример:

1) Загрузите каталог на свой локальный компьютер;

2) Организовать файлы в подкаталоги, это должно быть не так уж и плохо, всего 7000 файлов и ограничение 1024. Например, вы можете создать 36 подкаталогов, по одному для каждой буквы алфавита и по одному для каждого числа, 0-9, а затем поместить каждое подмножество файлов в соответствующий подкаталог: файл awhwhat.gif будет помещен в /, файл Что бы вошло в 1 / и т.д.

3) Создайте / отредактируйте файл .htaccess и создайте правило перезаписи, которое сопоставило бы любой запрос для product_images / awhwhat.gif с product_images / a / awhwhat.gif.

Файл .htaccess будет выглядеть примерно так:

RewriteEngine On
RewriteRule ^(.)([^/]+)$ $1/$1$2 [L]
4

GoDaddy прямо сказал вам, что не позволяет делать то, что вы хотите. Страницы справки GoDaddy сообщают вам, что то, что вы хотите сделать, запрещено. Они даже сообщают вам, что вы получите такие сообщения об ошибках, если попытаетесь сделать то, что вам не разрешено. И здесь вы спрашиваете:«Как, несмотря на то, что мне самому GoDaddy сказали, что я не могу это сделать?».

GoDaddy не позволяет вам сделать это. Найдите кого-то еще, кто делает, или держите ниже 1024 предела записей каталога

1

Обойти эту проблему, создав CSS-спрайт-лист для изображений продуктов. Вы уменьшите количество файлов в геометрической прогрессии.

1

Там может быть один трюк, который вы можете попробовать, если GoDaddy позволяет жесткие ссылки:

ln img.gif product_images/img.gif

Конечно, если сообщение об ошибке просто вводит в заблуждение (а на самом деле это ошибка "слишком много файлов", а не ошибка "недостаточно места на диске"), это, вероятно, все равно не будет работать. Но если это удастся, у вас будут одинаковые img.gif как в исходном каталоге, так и в вашем подкаталоге, но указатели файлов будут указывать на один и тот же физический файл, поэтому дополнительное пространство не будет использоваться (кроме указателя).

Если все идет хорошо, вы можете безопасно удалить исходный файл, и файл в подкаталоге останется:

rm img.gif

Если ничего не помогает, загрузите все файлы снова (подсказка: tar+gz, чтобы загрузить их намного быстрее), удалите их с веб-сайта, реорганизуйте их (подробнее об этом ниже), а затем повторно загрузите их.

Решение корневой проблемы

Одним из распространенных решений является создание структур подкаталогов для первых нескольких символов в имени файла. Например:

images/widget001.png -> images/w/i/widget001.png

Затем вы можете написать .htaccess RewriteRule, чтобы ваше веб-приложение не сломалось. Он по-прежнему будет пытаться загрузить изображение из images/widget001.png, но вместо этого механизм перезаписи URL будет отображать images/w/i/widget001.png.

Вы можете создать столько уровней подкаталогов, сколько вам нужно, чтобы уменьшить количество файлов в каталоге. Это особенно хорошо работает, если файлы имеют случайно сгенерированные имена. Если все имена похожи (например, все они соответствуют формату "img #####. Png"), вы можете создать структуру каталогов на основе какой-либо другой части имени вместо использования нескольких первых букв.

ПРИМЕЧАНИЕ. Вы должны сохранить полное имя файла для более простого обслуживания в будущем, а не переименовывать его в images/w/i/dget001.png в предыдущем примере. Одна из причин заключается в том, что гораздо проще сгладить и перестроить структуру каталогов, если вы обнаружите, что вам необходимо еще больше углубить структуру каталогов позже.

РЕДАКТИРОВАТЬ: +1 к baraboom, который также упомянул подкаталог + перезапись URL, когда я писал свой ответ. :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .