2012-03-28 112 views
1

我正在尋找一種方法來強制瀏覽器下載圖像,而不是隻顯示它。PHP強制瀏覽器下載圖像,Facebook喜歡

我已經看了很多(和深入),似乎有沒有標準的方式來做到這一點正確。

的方式Facebook的做到這一點,它與一些PHP我猜他們把參數結尾:? (DL)= 1

所以它肯定是一個PHP頁面的URL rewritting後面我猜

<a class="itemAnchor" role="menuitem" tabindex="-1" href="http://a5.sphotos.ak.fbcdn.net/hphotos-ak-ash4/327910_2733459209258_1040639162_2895571_6924037615_o.jpg?dl=1" rel="ignore"><span class="itemLabel fsm">Download</span></a> 

因此,如果您有任何線索,他們怎麼辦呢?我的線索是,他們可能做一些PHP頁面

+1

你可能想給這篇文章閱讀:http://www.ryboe.com/tutorials/php-headers-force-download 似乎正是你所追求的,只要你真的自己提供圖片。 – MichD 2012-03-28 22:35:06

+0

謝謝,我會! ;) – 2012-03-28 22:42:28

回答

6

他們只是力downloadi的頭NG使用HTTP頭,就像你與任何其他文件做:

<?php 
    $file = 'C:\\test.jpg'; 

    header('Cache-Control: public'); 
    header('Content-Description: File Transfer'); 
    header('Content-Disposition: attachment; filename='.basename($file)); 
    header('Content-Type: '.mime_content_type($file)); 
    header('Content-Transfer-Encoding: binary'); 
    header('Content-Length: '.filesize($file)); 

    readfile($file); 
?> 

X-SENDFILE

對於大文件或繁忙的Web服務器,我會建議使用X-SendFile頭代替使用readfile()函數(注意,您需要在Apache中安裝mod_xsendfile)。

header('X-Sendfile: '.$file); 
    //readfile($file); 

.htccess

正如你注意到,在一個jpg文件的Facebook網址點,而不是PHP的。 您需要在.htaccess文件中重寫URL以完成此技巧。

類似以下內容應該可以工作(請注意,您需要使用真實URL,檢查$_SERVER的內容才能這樣做)。

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteRule ^index\.php$ - [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule . /index.php [L] 
</IfModule> 
+1

你在標題中放什麼呢? – 2012-03-28 22:35:44

+0

我應該使用這個:http://tools.ietf.org/html/rfc2616#section-19.5.1作爲附件? – 2012-03-28 22:38:34

+0

ahaha你競爭有我的「接受答案」你是最快的,我會接受你的我必須等5分鐘;) 你的答案是完美的,再次感謝:) – 2012-03-28 22:44:24

2

你必須在你的header定義Content-Disposition變量:

<?php 
    header("Content-Disposition: attachment; filename='downloaded.png'"); 
?> 
1

您可以通過發送文件之前設置相應的頭文件實現這一點。具體而言,您可以將Content-Type設置爲您的內容類型爲Content-Disposition: attachment; filename=<yourfilename>

IE有一些問題;查詢this answer瞭解更多信息。

+0

好的,謝謝我明白了,我真的看着它的一個很長時間太棒了! ;) – 2012-03-28 22:41:33