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