3

重複の可能性:
[名前を付けて保存] ダイアログに表示されるファイル名を .php から .png に変更する方法

PHP で生成された GUI には、動的に生成された PNG 画像が表示されます。

<img src="someScript.php?dataId=xyz&width=250&height=200" alt="Chart" />

dataId画像の内容は、次の引数に基づいて動的で一意です。

<?php
header('Content-Type: image/png');
// output image based on $_GET['dataId']
?>

しかし、ユーザーが IE、Firefox、または Chrome で右クリックして名前を付けて保存しようとすると、推奨されるファイル名はsomeScript.php.png. これはユニークではなく、あまり役に立ちません。

「名前を付けて保存」ファイル名がどうあるべきかについて、ブラウザーに「ヒント」を与えるにはどうすればよいですか?

ブラウザはいつでも好きなことをすることができますが、HTTP によって設定された前例Content-Disposition: attachment; filename=<filename>は、ファイル名を示唆する何らかの方法があるかもしれないことを示唆しています。をデフォルトの のContent-Dispositionままにしたいので、この HTTP ヘッダー自体は適切ではありません。inline

4

1 に答える 1

9

このfilename引数は、次の場合にもサポートされていContent-Disposition: inlineます。

[RFC6266]: 4.3. 配置パラメーター: 'ファイル名'

パラメータ「filename」および「filename*」は、大文字と小文字を区別せずに照合され、メッセージ ペイロードを格納するためのファイル名の作成方法に関する情報を提供します。

処分タイプに応じて、この情報はすぐに (「添付ファイル」処分タイプで発生した「名前を付けて保存...」 インタラクションで) 使用されるか、または後で (たとえば、ユーザーがコンテンツの保存を決定したとき)現在表示されているページ)。

そう:

<?php
$filename = "image_" . $_GET['dataId'] . ".png";

header("Content-Type: image/png");
header("Content-Disposition: inline; filename=\"{$filename}\"");

// output image based on $_GET['dataId']
?>
于 2013-01-09T15:38:17.720 に答える