Подтвердить что ты не робот

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

Иногда нам нужно предварительно просмотреть/подтвердить страницу перед сохранением данных в базе данных. Но файл изображения на странице подтверждения немного отличается. Вы не можете сделать $_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']);

Ответ 5

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

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

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

Ответ 6

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

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

Ответ 7

Вы можете хранить данные изображения в сеансе как легко закодированные базы. На рабочем сервере у вас должно быть достаточно ОЗУ. Моему приложению потребовалось до 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'); ?>"/>

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