2017-07-18 8 views
0

PHPでリクエストされたサイズの画像を表示したい。Silex/Symfonyレスポンスが画像データを正しく返さない

作業コード。フレームワークなし。

<?php 

require_once __DIR__ . '/vendor/autoload.php'; 

define('BASE_SIZE', 1000); 

$original = imagecreatefrompng('image.png'); 

$size = $_REQUEST['size']; 
if($size == BASE_SIZE) { 
    $out = $original; 
} 
else { 
    $out = imagecreatetruecolor($size ,$size); 
    imagecopyresampled($out, $original, 0, 0, 0, 0, $size, $size, BASE_SIZE, BASE_SIZE); 
} 

ob_start(); 
imagepng($out, null, 9); 
$content = ob_get_contents(); 
ob_end_clean(); 

header('Content-type: image/png'); 
echo $content; 

?> 

このコードは画像を正しく示しています。そしてここに出力プレビューがあります。

Correct Output

コードを動作しません。シレックスの使用。

$app->get('/resize/{size}', function (Symfony\Component\HttpFoundation\Request $request, $size) use ($app) { 

    define('BASE_SIZE', 1000); 

    $original = imagecreatefrompng('image.png'); 

    if($size == BASE_SIZE) { 
     $out = $original; 
    } 
    else { 
     $out = imagecreatetruecolor($size ,$size); 
     imagecopyresampled($out, $original, 0, 0, 0, 0, $size, $size, BASE_SIZE, BASE_SIZE); 
    } 

    ob_start(); 
    imagepng($out, null, 9); 
    $content = ob_get_contents(); 
    ob_end_clean(); 

    $response = new Symfony\Component\HttpFoundation\Response($content, 200); 
    $response->headers->set('Content-Type', 'image/png'); 
    $response->headers->set('Content-Disposition', 'inline'); 
    return $response; 
}); 

このコードは壊れた画像を示しています。そしてここに出力プレビューがあります。

Incorrect output

そして、これはヘッダです。

のCache-Control:キャッシュなし、プライベート 接続:キープアライブ コンテンツディスポジション:インライン のContent-Type:画像/ PNG日:火、2017年7月18日午前6時15分56秒GMT サーバー:Apacheの 転送エンコード:1.1 vegur

私は答えの近くだと思う、しかし、誤った出力の最初に「<」があります: 経由チャンク。 substrで正しく削除できませんでした。

私は本当に困っています。何か案が?

答えて

0

この問題が発生するもの、の一つの先頭に余分な<があるかもしれない、サイレックスのために書かれたあなたのPHPファイルを確認してください。

+0

それだけです!どうもありがとうございます! – shot

1

sizeはGET/POSTパラメータではありません。あなたはまた、Symfony\Component\HttpFoundation\BinaryFileResponseがバイナリ(ファイル)の応答を想定している$request

$size = $request->get('size'); 

または関数の引数から

$app->get('/resize/{size}', function (Symfony\Component\HttpFoundation\Request $request, $size) use ($app) { 
    // $size = $_REQUEST['size']; // remove this 

からそれを取得する必要があります。

$path = sys_get_temp_dir() . '/qwerty'; 
imagepng($out, $path, 9); 
$response = new \Symfony\Component\HttpFoundation\BinaryFileResponse($path, 200, array('Content-Type'=>'image/png'), false, 'inline'); 
return $response; 
+0

ありがとう、私はそれが私の誤植であることは非常に残念です。コードはあなたが言った通りです。 '$ size = $ request-> get( 'size');' – shot

関連する問題