Nano Hash - криптовалюты, майнинг, программирование

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

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

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

Последним шагом является обработка их кредитной карты.

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

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

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

15.04.2009

Ответы:


1

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

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

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

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

15.04.2009
  • Что делать, если регистрация не удалась? Как бы вы узнали, какое изображение удалить, так как это может быть изображение, связанное с другим экземпляром php? 06.11.2014

  • 2

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

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

    16.04.2009

    3

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

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

    15.04.2009
  • Все файлы в массиве $_FILES удаляются по завершении выполнения PHP-скрипта, т.е. все загруженные файлы теряются, если вы не переместили их в другое место. 06.07.2012

  • 4

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

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

    15.04.2009

    5

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

    6

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

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

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

    25.03.2012

    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);
    

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

    Браузер покажет это изображение с помощью:

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

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

    10.07.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..