2014-06-19 54 views
0

在我的程序中,我需要從.tar文件中讀取.png文件。使用PHP檢查文件是否存在於.tar中使用PHP

我使用梨的Archive_Tar類(http://pear.php.net/package/Archive_Tar/redirected

一切都很好,如果該文件即時尋找存在的,但如果它不是在.tar文件,然後在30秒後的功能timouts。在類文檔它說,它應該解決這個或那個我可以用它來解決我的問題任何其他庫返回null如果沒有找到文件...

$tar = new Archive_Tar('path/to/mytar.tar'); 

$filePath = 'path/to/my/image/image.png'; 

$file = $tar->extractInString($filePath); // This works fine if the $filePath is correct 
              // if the path to the file does not exists 
              // the script will timeout after 30 seconds 

var_dump($file); 
return; 

有什麼建議?

回答

1

listContent方法將返回指定存檔中存在的所有文件(以及有關它們的其他信息)的數組。因此,如果您首先檢查想要提取的文件是否存在於該陣列中,則可以避免您遇到的延遲。

下面的代碼沒有優化 - 對於多個調用來提取不同的文件,例如$ files數組應該只填充一次 - 但是一個很好的方法。

include "Archive/Tar.php"; 
$tar = new Archive_Tar('mytar.tar'); 

$filePath = 'path/to/my/image/image.png'; 

$contents = $tar->listContent(); 
$files = array(); 
foreach ($contents as $entry) { 
    $files[] = $entry['filename']; 
} 

$exists = in_array($filePath, $files); 
if ($exists) { 
    $fileContent = $tar->extractInString($filePath); 
    var_dump($fileContent); 
} else { 
    echo "File $filePath does not exist in archive.\n"; 
}