Как я могу вставить большие файлы в дб MySQL с помощью PHP?

Опции, которые вы использовали, должны работать без опций timeout и useCookies, я использовал его в своем последнем проекте, где сеанс должен длиться минимум неделю, откройте вкладку хранилища в панели разработчиков Mozilla и нажмите на куки Слева вы увидите раздел cookie-файлов с cookie-файлами, зарегистрированными для вашего сайта, в моем случае это http://www.kp2.local

enter image description here [ 1119]

, если вы используете 'lifetime' => 7 * 24 * 60 * 60,, он должен показывать cookie с датой истечения срока 1 неделю спустя , т.е. Wed, 23 Jan 2019, как показано ниже

enter image description here [1115 ]

, и если вы закомментируете код, а затем выйдете из системы и снова войдете в систему, она покажет вам время истечения на Session, например

enter image description here

Вам просто нужно использовать следующие настройки в конфигурации

'session' => [
    // this is the name of the session cookie used for login on the frontend
    'name' => 'advanced-frontend',
    'cookieParams' => [
        'httpOnly' => true,
        'lifetime' => 7 * 24 * 60 * 60
    ],
],

Если это все еще не работает, выйдите из системы, попробуйте удалить все куки один раз выбрав опцию Delete all, как на изображении ниже.

https://i.imgur.com/49GkznS.png?2

и это будет работать.

Примечание: вам следует изменить 7 в 'lifetime' => 7 * 24 * 60 * 60, на количество дней, в течение которых вы хотите сохранить сеанс

9
задан dda 27 July 2015 в 17:15
поделиться

6 ответов

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

Мы делаем это для images/pdfs/mpegs и т.д. в CMS, который мы имеем на работе путем создания папки для файла, названного от безопасного от URL имени файла и хранения имени папки в дб. Легко только выписать URL его на уровне представления затем.

8
ответ дан 4 December 2019 в 06:49
поделиться

Вы могли использовать функцию LOAD_FILE MySQL, чтобы хранить файл, но все еще необходимо повиноваться значению max_allowed_packet и тому, что файл должен быть на том же сервере как экземпляр MySQL.

3
ответ дан 4 December 2019 в 06:49
поделиться

Вы захотите проверить, что конфигурация MySQL оценивает "max_allowed_packet", который мог бы быть установлен слишком маленький, предотвратив ВСТАВКУ (который является большим саму) от случая.

Выполните следование из mysql командной строки:

mysql> show variables like 'max_allowed_packet';

Удостоверьтесь его достаточно большое. Для получения дополнительной информации об этой конфигурации опция посмотрите

MySQL max_allowed_packet

Это также влияет на mysql_escape_string () и mysql_real_escape_string () в PHP ограничение размера строкового создания.

15
ответ дан 4 December 2019 в 06:49
поделиться

Некоторые расширения PHP для MySQL имеют проблемы с LONGBLOB и типами данных LONGTEXT. Расширения не могут поддерживать потоковую передачу блоба (отправляющий блоб один сегмент за один раз), таким образом, они должны отправить весь объект сразу.

Таким образом, если предел памяти PHP или предел размера пакета MySQL ограничивают размер объекта, можно отправить на базу данных, Вы, возможно, должны изменить некоторую конфигурацию или на PHP или на MySQL для разрешения этого.

Вы не сказали, какое расширение PHP Вы используете (существуют по крайней мере три для MySQL), и Вы не показали ни одного кода, который Вы используете для регистрации блоба на базу данных.

4
ответ дан 4 December 2019 в 06:49
поделиться

Лучший ответ должен использовать реализацию, которая лучше и также работает вокруг той проблемы. Можно прочитать статью здесь. Хранилище 10 МБ, 1000 МБ, не имеет значения. Реализация разделяет файл на блоки/сокращает во многие мелкие кусочки и хранит их в нескольких строках.. Это помогает с загрузкой и выбирающий, таким образом, память также не становится проблемой.

4
ответ дан 4 December 2019 в 06:49
поделиться

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

Если это верно, необходимо было бы изменить конфигурацию MySQL max_allowed_packet

0
ответ дан 4 December 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: