PHP – сохранить изображения в данных SESSION?

Можете ли вы сохранить изображение в PHP SESSION?

У меня есть многоэтапный процесс регистрации с использованием PHP на моем сайте. На одном из этапов пользователи могут загружать логотип своей компании (изображение).

Последний шаг – обработать свою кредитную карту.

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

Таким образом, можно временно сохранить данные изображения в переменной SESSION?

Если нет, как еще люди временно хранят данные изображения в формах, прежде чем совершать эти данные?

Solutions Collecting From Web of "PHP – сохранить изображения в данных SESSION?"

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

Если это данные сеанса и у вас есть несколько шагов после загрузки, изображение будет перезагружено (в сеанс) на каждом просмотре страницы до тех пор, пока шаги не будут завершены.

Я лично рекомендовал бы против использования сеанса для хранения двоичного файла. Сохранение изображения на диске во временное место до завершения регистрации. Я бы сохранил только путь к временному файлу в сеансе. Когда трансацитон завершен, переместите его в нужное место и сделайте свои вставки db.

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

Я бы сохранил файл на диске, вы даже можете назвать его с помощью идентификатора сеанса пользователя. Тогда может быть какой-то сценарий очистки, который запускается как задание cron и удаляет изображения людей, которые никогда не получали успешную оплату.

Если вы попытаетесь сохранить изображение в сеансе, вы делаете это неправильно.

Когда файл загружается, ему присваивается временное имя в массиве $ _FILES. Я не знаю точную продолжительность жизни этих файлов, но вы могли бы захватить это имя в сеансе и отложить вызов move_uploaded_file () до тех пор, пока CC не будет проверен.

Или, вы можете сделать первый шаг CC.

Иногда нам нужно предварительно просмотреть / подтвердить страницу перед сохранением данных в базе данных. Но файл изображения на странице подтверждения немного отличается. Вы не можете сделать $_SESSION['s_name'] = $_FILES['f_name'] coz SESSION просто сохранить текстовый файл. Альтернативным способом хранения содержимого файла / двоичного значения в сеансе.

 $_SESSION['obj_image_session'] = file_get_contents($_FILES['image_name']['tmp_name']); $file= "new_file.jpg"; $fp=($file,"w"); fwrite($fp,$_SESSION['obj_image_session']); 

Если вам нужно сохранить данные, я бы предложил сохранить их как base64_encoded string. Вы можете напрямую отправлять данные изображения base64_encode в браузер.

Если бы я был в подобной ситуации, я бы скорее сохранил изображение и сохранил информацию об изображении в сеансе / db. Если по какой-то причине регистрация терпит неудачу, я отсоединил файл позже. и иногда запускать задания cron, чтобы найти недостающие ссылки с изображениями.

Но я действительно предлагаю вам придерживаться второго варианта и вообще избегать хлопот.

Да, вы можете сохранить изображение в сеансе PHP. Получите его в PHP как строку (т.е. двоичные данные), а затем вы можете поместить ее в сеанс.

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

Вы можете хранить данные изображения в сеансе в виде базового кодированного файла. На рабочем сервере у вас должно быть достаточно ОЗУ. Моему приложению потребовалось до 40 МБ из 4 изображений / приложений для обновления и изменения, прежде чем вводить mongoDB. (Базовая кодировка составляет в 1,3 раза больший размер изображения.)

  $tmpNameSS1 = $_FILES["screenshot1"]["tmp_name"]; $fp = fopen($tmpNameSS1, 'r'); $rawDataSS1 = fread($fp, filesize($tmpNameSS1)); fclose($fp); $SS1FileName = $_FILES["screenshot1"]["name"]; $encodedSS1Data = base64_encode($rawDataSS1); registry::update('sCreateSS1Name', $SS1FileName); registry::update('sCreateSS1Data', $encodedSS1Data); 

Случай будет: у вас есть несколько изображений для загрузки и проверка и клиент и сервер для размера и типа. Он быстрее извлекается из сеанса. После помещения в базу данных DB нулевой переменной, содержащей изображение.

Браузер покажет, что изображение с:

 <img src="data:image/;base64,<?php echo registry::get('sCreateSS1Data'); ?>"/> 

Вы можете обновить сеанс для изображения с пустой строкой после того, как код достигнет конца блока. Типичным случаем является обновление поля формы с проверкой и когда пользователь хочет изменить текст. Вы также хотите показать, какое изображение было загружено между этими неудачными обновлениями. Если вы хотите сохранить поездку в оба конца (желательно), сохраните данные в течение нескольких секунд в сеансе и опорожните это значение после того, как код о выходе.