2015-07-03 194 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个可能的扩展名,所以不可能猜出哪一个是正确的... –