Как напечатать содержимое сессионного файла в виде октет-потока в PHP? - PullRequest
1 голос
/ 10 января 2012

У меня проблема с печатью сохраненных данных изображения в Drupal CMS.Страница результатов получает 6-байтовый контент, а не загруженные данные моего изображения.

Код хранения изображения:

// Read content of the uploaded file
$file_content = file_get_contents($_FILES["image_field"]["tmp_name"]);
// Strore the file in the session
$_SESSION['session_image'] = $file_content;

Затем на другой странице я печатаю данные, сохраненные в сеансе.Код:

// Set content type - octet-stream
header("Content-type: application/octet-stream");
// Print the session stored image back
echo $_SESSION['session_image'];
// Exit
exit;

Я не хочу использовать в качестве решения следующие действия:

  1. Хранить загруженный файл во временном местоположениии подайте его.
  2. Измените тип содержимого на другой

Я хочу напечатать содержимое загруженного файла так, как оно есть в браузере(как поток октетов).Я очень признателен, если кто-нибудь может помочь в этом.

Обновленный код:

// Read content of the uploaded file
$file_content = file_get_contents($_FILES["image_field"]["tmp_name"]);
// Strore the file in the session
$_SESSION['session_image'] = base64_encode($file_content);

// Modified to have base64 encoded content to store so decode it here
$content = base64_decode($_SESSION['session_image']);
header("Content-Transfer-Encoding: binary");
header("Content-Length: ". mb_strlen($content, 'latin1'));
// Set content type - octet-stream
header("Content-type: application/octet-stream");
// Print content
echo $content;
exit;

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

Ответы [ 2 ]

1 голос
/ 10 января 2012

Попробуйте добавить их:

header("Content-Transfer-Encoding: binary"); 
header("Content-Length: ". mb_strlen($_SESSION['session_image'], 'latin1')); 
0 голосов
/ 11 января 2012

Содержание изображения изменено, возможно, из-за типа кодировки. При печати сеанса сохраненные данные возвращаются клиенту, некоторые символы исчезли. Это может оказать влияние из-за обработки сеанса Drupal, так как он сохраняет сеанс в базе данных.

Решением было преодоление всех проблем, состоящих в том, чтобы base64_encode и хранить. Затем извлеките контент как закодированный в base64 источник с помощью вызова ajax.

Код:

print ' img_src = "data:image/*;base64,". $_SESSION['session_image'] . '"';

В коде javascript установите значение img_src в поле img src.


Отредактировано: Найдена первопричина. Это были некоторые из модулей и связанных файлов, загруженных на сервер, с символами BOM (Byte Order Mark) в начале файлов, и это иногда приводит к появлению символов BOM для шифрования UTF-8. Наличие спецификации для потока UTF-8 не рекомендуется, и некоторые браузеры сообщают о проблемах с отображением и содержимым, особенно в IE и Chrome.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...