0

この方法は、Facebook、Dropbox、MicrosoftのSkydriveなど、現在約3つのサイトで使用されています。それはこのように動作します。ダウンロードせずに画像を見たいとしましょう。そうすれば、これを実行できます。

https://fbcdn-sphotos-a.akamaihd.net/hphotos-ak-xxxx/xxx_xxxxxxxxxxxxxxx_xxxxxxxxx_o.jpg

しかし、ダウンロードしたい場合は、?dl=1を追加します

https://fbcdn-sphotos-a.akamaihd.net/hphotos-ak-xxxx/xxx_xxxxxxxxxxxxxxx_xxxxxxxxx_o.jpg?dl=1

簡単ですよね?ええと、サーバー側ではおそらく簡単ではありません。これが私の問題です。その.jpgファイルがPHPスクリプトであり、$ _ GETパラメーターが画像を指し、別のパラメーターが画像をダウンロードするかどうかを指定する場合、これを行う方法を知っています。しかし、そうではありません。

それで、私はどのような方法を試しましたか?なし。正直なところ、これがどのように機能するのかわからないので、それは私にとって魔法のようなものです。多分それはあなたが.htaccessでやっていることですか?それは私には理にかなっているように聞こえますが、しばらくグーグルした後、私が求めているものにさえ近いものは何も見つかりませんでした。

4

3 に答える 3

1

いくつかのオプションがあります。

1 つのオプションは、.jpg ファイルの代わりに PHP スクリプトを使用することです。したがって、URL は PHP ファイルを指し、PHP ファイルでは次のようにします。

header('Content-Type: image/jpeg');

if ($_GET['dl'] == 1)
    header('Content-Disposition: attachment; filename="downloaded.jpg"');

$file = $_GET["file"];
// do some checking to make sure the user is allowed to get the file specified.
echo file_get_contents($file);

別のオプションはmod_rewrite、.htaccess ファイルで使用してチェックし?dl=1、見つかった場合は、ファイルをダウンロードする PHP スクリプトにリダイレクトすることです (上記と同じ方法)。

他にも選択肢はあると思いますが、今頭に浮かんだのはこの 2 つだけです。

于 2012-09-28T12:57:53.620 に答える
0

このようなFacebookURLの応答ヘッダーを表示します。

HTTP/1.1 200 OK
Content-Type: image/jpeg
Content-Length: 5684
Last-Modified: Fri, 01 Jan 2010 00:00:00 GMT
X-Backend: hs675.ash3
X-BlockId: 157119
X-Object-Type: PHOTO_PROFILE
Access-Control-Allow-Origin: *
Cache-Control: max-age=1209600
Expires: Fri, 12 Oct 2012 13:07:08 GMT
Date: Fri, 28 Sep 2012 13:07:08 GMT
Connection: keep-alive

そして、ダウンロード応答ヘッダー:

HTTP/1.1 200 OK
Content-Type: image/jpeg
Content-Length: 5684
Last-Modified: Fri, 01 Jan 2010 00:00:00 GMT
X-Backend: hs675.ash3
X-BlockId: 157119
X-Object-Type: PHOTO_PROFILE
Content-Disposition: attachment
Access-Control-Allow-Origin: *
Cache-Control: max-age=1209600
Expires: Fri, 12 Oct 2012 13:07:17 GMT
Date: Fri, 28 Sep 2012 13:07:17 GMT
Connection: keep-alive

Content-Disposition: attachment違いのある線を見てください。

したがって、すでにPHPスクリプトから画像を提供しているので、ダウンロードパラメータが設定されている場合は、次を追加します。

header('Content-Disposition: attachment');

そして、あなたは元気でなければなりません。

于 2012-09-28T13:10:29.173 に答える
0

すべての画像を、URI パラメーターに基づいて処理する単一の PHP ファイルにリダイレクトします。

.htaccess に次のように記述します。

Options +FollowSymLinks +ExecCGI

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteCond %{REQUEST_URI} \.(jpg|png|gif)$
RewriteRule (.*)  images.php [QSA]

</IfModule>

これにより、拡張子が jpg、png、gif のファイルへのすべてのリクエストが images.php ファイルにリダイレクトされます。

images.php ファイルで ?dl=1 の存在を検索し、それによって画像の提供方法を​​決定します。

$requestedImage = $_SERVER['REQUEST_URI']
if (strpos($requestedImage,'?dl=1') !== false) {
    // serve the image as attachment
}else{
    // just print it as usual
}
于 2012-09-28T13:08:56.967 に答える