Drupal CMSに保存された画像データの印刷セッションに問題があります。結果ページはアップロードされたイメージデータではなく6バイトのコンテンツを取得します。セッション保存ファイルの内容をPHPでオクテットストリームとして出力する方法は?
コードを記憶する画像は、次のとおりです。
// 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;
私は解決策として、以下のことを行うにはしたくない:
- ストアアップロードされたファイルの一時的な場所で、それを提供しています。私が欲しいもの、別の
から
更新されたコード:
// 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;
しかし、静止画コンテンツが表示されません。画像コンテンツの文字の一部は、アップロードされた画像コンテンツと元の画像コンテンツとを比較したときに、他のものに変換される。
コンテンツ長のヘッダーを追加することもできますが、コードは見た目がよくなります。デバッグのために、ディスクに保存されているセッションを調べる必要があります。[シリアライズされたライブラリ](https://github.com/ktomk/Serialized)には[セッションファイルビューアの例](https://github.com)があります。/ktomk /シリアライズ/ blob/master/examples/03-session/example-viewer。PHP)。魅力のように動作します。 – hakre
@hakre - コメントありがとうございます。コンテンツ長のヘッダー値を追加しました(投稿が編集されました)が、一部の内部文字が他の文字に変換されるため、静止画像は表示されません。 –
さて、あなたはここで幾分迷っています。 'Content-Length'は提案だけでした。間違った答えから間違ったコード例をコピーしました。コンテンツの長さをスキップして、問題の元の原因がストレージレイヤーとそのインターフェイスにあるおそらく見つかるまでスキップします。通常、セッションデータにはbase64を使用する必要はありません。PHPはバイナリデータを文字列の中で非常にうまくサポートします。 – hakre