PHP - сохранить изображения в данных SESSION?
Можно ли сохранить изображение в PHP SESSION?
У меня есть многоэтапный процесс регистрации с использованием PHP на моем сайте. На одном из этапов пользователи могут загружать логотип своей компании (изображение).
Последний шаг - обработать свою кредитную карту.
Итак, прежде чем писать какие-либо изображения на веб-сервер и местоположение изображения в базе данных, я хочу убедиться, что их кредитная карта действительна и обрабатывается.
Таким образом, можно временно сохранить данные изображения в переменной SESSION?
Если нет, то как еще люди хранят данные изображений в формах перед публикацией этих данных?
Ответы
Ответ 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'); ?>"/>
Вы можете обновить сеанс для изображения с пустой строкой после того, как код достигнет конца блока. Типичным случаем является обновление поля формы с проверкой и когда пользователь хочет изменить текст. Вы также хотите показать, какое изображение было загружено между этими неудачными обновлениями. Если вы хотите сохранить поездку в оба конца (желательно), сохраните данные в течение нескольких секунд в сеансе и опорожните это значение после того, как код о выходе.