2009-12-26 50 views
0

如果單擊視圖,你可以打開瀏覽器,文件,如何在PHP中正確實現一般的Mime類型?

我已經試過:

readfile('test.jpg'); 

,但似乎在Firefox失敗。

+0

您可以定義「它失敗「?比如,你是否收到錯誤信息?文件是否存在(並在當前目錄中)? – 2009-12-26 13:28:29

+0

它給了我很多雜亂的字符,而不是一個圖像。 – user198729 2009-12-26 13:30:16

回答

1

只要提供一個鏈接到該文件,瀏覽器將完成其餘的。如果這個文件存儲在你的服務器上,你可能正在尋找一個腳本,將它暴露給外部世界。這個腳本應該設置正確的MIME類型,然後readfile應該做到這一點。

<?php 
header('Content-type: image/gif'); 
readfile('/path/to.your/file.gif'); 
exit(); 
+0

如果該文件是.pdf,該怎麼辦?是否有一個通用的解決方案? – user198729 2009-12-26 13:31:48

+1

搜索MIME類型。 – deerchao 2009-12-26 13:49:01

2

如果你想獲得的MIME類型的文件時,你至少有兩種選擇,在PHP中:

第一種是使用(廢棄)功能mime_content_type

返回MIME 格式的內容類型,如text/plainapplication/octet-stream


第二是使用新的擴展Fileinfo(可作爲PECL擴展爲PHP < 5.3,和集成在PHP> = 5.3);該finfo_file功能似乎是你需要的一個:

返回的文件名參數的 內容的文字說明,或 FALSE如果發生錯誤。

和給定的例子(引用)

$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension 
foreach (glob("*") as $filename) { 
    echo finfo_file($finfo, $filename) . "\n"; 
} 
finfo_close($finfo); 

給出了這樣的輸出:

text/html 
image/gif 
application/vnd.ms-excel 

哪種對應的到你需要使用的是什麼Content-type您的應用程序可能需要發送的HTTP標頭;-)

+0

如果有很多併發用戶,你可能會考慮以某種方式緩存結果,因爲MIME魔法模式測試不是「最便宜」的功能;-) – VolkerK 2009-12-26 14:40:19

+0

finfo_open無法加載魔法數據庫,php 2.5 – user198729 2009-12-26 15:44:22

+0

嗯,有一些你必須把它放在正確的位置(我嘗試了幾次,這不是那麼容易設置,但不是**也很難)。有一些關於http://www.php.net/manual/en/function.finfo-open.php的信息可能會引導你更進一步。 – 2009-12-26 15:53:48