0

私のアプリケーションは、http get 要求を介して urlencoded または base64encoded 文字列を送信します。文字列には、ほとんどが php ファイルからダウンロードされる画像データが含まれていますが、php が urlencoded または base64encoded の文字列から画像をダウンロードする方法がわかりません。助けてくださいみんな…迷ってる

4

1 に答える 1

2

ユーザーに画像を提供する

// we assume $imageData is PNG
$image = urldecode($imageData);
// or
$image = base64_decode($imageData);

// in case of force download change Content-Type: image/png to
// application/octet-stream and Content-Disposition: inline to attachment
header('Content-type: image/png');
header('Content-Disposition: inline; filename=' . md5($image) . '.png');
header('Content-Length: ' . strlen($image));

echo $image;
exit;

問題は、知らない場合に正しい Content-Type を検出することです。ただし、ブラウザはそれ自体で自動検出できるはずです。

キャッシュに関するいくつかの注意事項
PHP はヘッダーを暗黙的に送信するため、取得したデータがブラウザーでキャッシュされるのを防ぎます。これらのヘッダー (Cache-Control、Expires、Pragma) を手動で設定することをお勧めします。適切に機能させるには、すべての画像を一意の URL で提供する必要があります。また、セッションを開始しないようにしてください。パブリック アクセスを使用して頻繁にアクセスされる Web サイトでは、冗長なセッション ファイルで Web サーバーを簡単にあふれさせることができます。

画像をファイルに保存する

$image = urlencode($imageData);
// or
$image = base64_decode($imageData);

if (!file_put_contents('abs/path/to/save/file.png', $image)) {
    throw new Exception('Image could not be saved');
}
于 2012-06-13T17:34:48.833 に答える