2015-07-03 196 views
0

我有幾個文件由於腳本中的錯誤而失去了擴展名。所以現在我有一個文件夾,裏面有很多像「image」或「123」而不是「image.jpg」或「123.pdf」的文件。通過使用finfo,我可以抓住mime類型。在PHP中也有類似的東西可以擴展,以便我可以修復它們? (它只是文件名 - 文件沒有被損壞)php:從損壞的文件中獲取文件擴展名

我當然可以創建一個包含可能文件類型的巨大數組。但是這種方法不夠「安全」,因爲有很多文件擴展名具有相同的MIME類型。

回答

0

創建新的目錄recover..

,並嘗試這個...

<?php 

$fp = opendir("files/"); 

$typeDetect = array(
    "filename" => "type", 

); 

while($file = readdir($fp)){ 
if(array_key_exists(pathinfo($file, PATHINFO_FILENAME), $typeDetect)){ 
    echo $typeDetect[pathinfo($file, PATHINFO_FILENAME)] . "<br/>"; 
    if(copy("files/" . pathinfo($file, PATHINFO_FILENAME), "recover/" . pathinfo($file, PATHINFO_FILENAME) . "." . $typeDetect[pathinfo($file, PATHINFO_FILENAME)])){ 
    echo "Success"; 
    } 
}else{ 
    echo "File not exists"; 
} 
} 

?> 

添加文件名和類型的數組$typeDetect並執行

這應該工作...

+0

有了這個apporach,我需要找到所有可能的文件名,並將它們添加到數組,對不對? (我有這麼多的可能性,這是無法完成的,我希望這可以通過一些讀取文件的php函數來完成,並告訴我哪個擴展名最適合) –

0

finfo_file ()可能會幫助你獲得損壞文件的擴展名。

參考線以下代碼:

$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); 
+0

我真的不認爲這會對我有幫助 - 請看應用程序/ excel:它有大約12個可能的擴展名,所以不可能猜出哪一個是正確的... –