Jump to content

IP.Downloads - SQL ошибка при загрузке больших файлов

Featured Replies

Привет всем, сразу перейду к делу.

Установил вчера, загруженный у вас, IP.Downloads 2.5 Rus, сразу же столкнулся с проблемой php при загрузке новых файлов. По совету, оставленному в одной из соседних тем, я сменил место хранения файлов с локального хранилища на базу данных, проблема решилась и все бы хорошо, вот только загрузить файлы весом более ~250 Кб. не могу, появляется ошибка со следующим описанием: "mySQL query error: INSERT INTO downloads_filestorage (`storage_file`,`storage_ss`,`storage_thumb`)". Расширение файла при этом роли не играет, на других форумах, расположенных на этом же сервере, все отлично. К сожалению, с администратором любого из них сейчас не связаться, поэтому и прошу помощи у вас, скриншот прилагаю. Любую дополнительную информацию с радостью готов предоставить.

Заранее спасибо. Адрес страницы при этом выглядит, как __****.**/index.php? .

Link to comment
https://ipbmafia.ru/topic/914-ipdownloads-sql-oshibka-pri-zagruzke-bolshih-fajlov/
Share on other sites

Не надо хранить файлы в базе данных, она не для этого предназначена. Кто вам вообще это посоветовал?

Dark, знаю-знаю, сам был удивлен тому, что такой метод хранения и вовсе предлагается, но раз это было единственным решением проблемы, пришлось смириться. Вот, собственно, тема, где Respected и дал такой совет, .

Нужен лог из папки cache, только он поможет узнать нам ошибку :crazy:

Хранение файлов в базе тут не причём!

Respected, без проблем.

Скажу сразу, ничего в этом не понимаю. Пытался уже разобраться.

Не надо хранить файлы в БД. Вы исправили следствие, но не исправили причину, поэтому и будут ошибки всякие.

Надо решать ту проблему другим способом.

Вот собственно, подтверждение из лога:

Error: 1153 - Got a packet bigger than 'max_allowed_packet' bytes
ну не рассчитана БД на то, чтобы выполняли такие запросы. Чисто для справки: в запросе, который выполняется в БД для вставки значения, значение имеет размер в 1.266.928 символов (зависит от размера файла). Если кто-то не понял, то 1 млн. символов в строке - это уже слишком для PHP / MySQL и прочего. Следующая ошибка:

Error: 2006 - MySQL server has gone away
[/code]

Короче говоря, сервер MySQL просто закрывает соединение после такого запроса.

Я настоятельно рекомендую вам не делать того, что вы делаете, вы просто напросто повалите сервер БД этим.

Информация из документации MySQL:

Эти ошибки будут также выдаваться при посылке серверу неверного или слишком длинного запроса. Если mysqld получает неправильный или слишком большой пакет, то сервер предполагает, что с клиентом что-то не так, и закрывает соединение. Если необходимо выполнять объемные запросы (например, при работе с большими столбцами типа BLOB), можно увеличить предельный размер запроса, запустив mysqld с опцией -O max_allowed_packet=# (по умолчанию 1 Mб). Дополнительная память выделяется по требованию, так что mysqld будет использовать больше памяти только в случае, когда выдан большой запрос или когда mysqld должен возвратить большую строку результата!

Я разъясняю: вы пытаесь загрузить весь файл в БД, сервер понимает, что вы сошли с ума, и от греха подальше закрывает соединение с вами.

C этим я согласен! Но..

Каков выход в данной ситуации?

Проблема с хранением файлов на сервере исчезнет после

Всем спасибо за помощь, Respected, в особенности вам, очень приятно, как пользователю, такое внимание со стороны администрации, после обновления, проблема действительно решилась - файлы загружаются, но появилась новая, снова ошибка php, но на этот раз при попытке просмотреть любой из загруженных файлов - Fatal error: Call to undefined method classItemMarking::getSqlJoin() in /var/www/.../admin/applications_addon/ips/downloads/modules_public/display/file.php on line 175 . Непосредственно 175 строчка:


$this->registry->classItemMarking->getSqlJoin( array( 'item_app_key_1' => 'f.file_cat' ), 'downloads' ),

Заранее спасибо.

Нужно обновить кеш файлы стиля!

Respected, cовершенно забыл это упомянуть, в том-то и дело, что перекешировал уже несколько стилей, перекешировал конкретно "Загрузки", сразу, как строку увидел, об этом и подумал - не помогает, даже приложение переустанавливал.

По-прежнему актуально.


Fatal error: Call to undefined method classItemMarking::getSqlJoin() in /var/www/.../admin/applications_addon/ips/downloads/modules_public/display/file.php on line 175

Кеш стилей обновлял, к слову, обновлял также и глобальный кеш, кеш отдельно IP.Bownloads, проверял ошибку сразу в нескольких стилях, ставил новые, даже переустановил приложение - не помогло. Возможно, есть еще какие-нибудь варианты?

Какое содержание у этой строчки?

Respected,

Непосредственно 175 строчка:


$this->registry->classItemMarking->getSqlJoin( array( 'item_app_key_1' => 'f.file_cat' ), 'downloads' ),

Заранее спасибо.

Что, если обновить IP.Downloads до версии 2.5.1?

Respected,

...после обновления (Имеется ввиду 2.5.1), проблема действительно решилась - файлы загружаются, но появилась новая, снова ошибка php, но на этот раз при попытке просмотреть любой из загруженных файлов...

Предвкушая последующие вопросы:

Кеш стилей обновлял, к слову, обновлял также и глобальный кеш, кеш отдельно IP.Bownloads, проверял ошибку сразу в нескольких стилях, ставил новые, даже переустановил приложение - не помогло.

Понимаю, что дело не в модификации, а во мне - в сервере или форуме, но вот понять в чем конкретно, увы, не могу.

  • 1 месяц спустя...

up. Та же проблема, при загрузке файла


Fatal error: Call to undefined method classItemMarking::getSqlJoin() in /home/p113200/www/site.ru/форум/admin/applications_addon/ips/downloads/modules_public/display/file.php on line 175

При просмотре уже загруженного файла

Fatal error: Call to undefined method classItemMarking::getSqlJoin() in /home/p113200/www/site.ru/форум/admin/applications_addon/ips/downloads/modules_public/display/file.php on line 175

я на 2.5.1 и сижу. Пытаюсь сделать через FTP. Ошибка та же остаётся..

Edited by Nicolayka

Делаю через локальное. Файл загрузился, но когда публикую, выскакивает..


Fatal error: Call to undefined method classItemMarking::getSqlJoin() in /home/p113200/www/сайт.рф/форум/admin/applications_addon/ips/downloads/modules_public/display/file.php on line 175

+ зайти и скачать файл не могу... не может найти метод getSqlJoin у класса classItemMarking

				 $this->registry->classItemMarking->getSqlJoin( array( 'item_app_key_1' => 'f.file_cat' ), 'downloads' ),

говорят, что этой вот функции getSqlJoin не существует. Надо найти где объявляется класс classItemMarking и написать эту функцию, ну или найти как её использовать. Ибо функция имхо как бы намекает, что она должна быть откуда то из другого места.

Edited by Nicolayka

Nicolayka, у меня данная проблема решилась полной переустановкой модуля. При этом важно делать перерасчет и перестраивать кеш после каждого выполненного вами действия - удалили Downloads - перестроили кеш, перезагрузили модуль на FTP - повторили операцию и так до окончания установки. Не могу сказать точно, помогло ли мне это, но сейчас проблема решена :good:

Nicolayka, у меня данная проблема решилась полной переустановкой модуля.

Не помогло...поставил чистую 2.5.1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.


Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.