2015-04-24 49 views
0

可以在PHP中使用file_put_contents擴展文件嗎?PHP file_put_contents獲取文件擴展名/類型

我想從一個服務器使用php下載文件的循環,但每個文件有不同的類型,我想知道是否有辦法瞭解每個文件的擴展名?

代碼示例:

<?php 

    $url = 'http://www.domain.com/file/123'; 
    $fopen = fopen($url, 'r'); 
    file_put_contents("filename", $fopen); 
    fclose($fopen); 

?> 

我怎麼能找出什麼類型的文件,因爲如果我把它只有名字變得不切實際?

+0

@deceze:Nips,我站得更正...這是我從我開始編寫PHP 10年以來從未真正閱讀過的一些文檔:-P –

+0

http://stackoverflow.com/questions/10456113/php-check-file-extension-in-upload-form這就是你要找的。 – Ifch0o1

+0

@ Ifch0o1不,不是。 – deceze

回答

0

我知道你的問題是你不知道爲這個文件放置什麼擴展名。一旦你保存文件,那麼你可以檢測MIME類型和擴展這樣

$fi = new finfo(FILEINFO_MIME,'/path/filename'); 
$mime_type = $fi->buffer(file_get_contents($file)); 

一旦你找到MIME類型,那麼你可以將其重命名。當然,請記住,這需要從HDD中獲得額外的IO。

0

通過HTTP 可能傳輸的文件必須在Content-Disposition HTTP標頭的名稱。如果沒有,那麼應該是一個Content-Type HTTP頭,它至少告訴你該文件的MIME類型;你可以將它映射到一個文件擴展名,並且需要自己編寫一些文件名。如果兩者都不存在,那麼你是獨立的。

第一步是在下載HTTP正文之前閱讀HTTP頭。 curl擴展可以做到這一點,get_headers可以做到這一點(雖然需要額外的往返),或其他基於socket的HTTP庫可以做到這一點(我推薦這個,你想讓一個 HTTP請求,獲得訪問頭文件,但不是將整個文件讀入內存)。四處尋找一個可以爲你做到這一點的圖書館,這是一個廣泛的話題。