解压缩文件夹,然后在PHP中搜索特定文件

时间:2014-11-05 13:30:51

标签: php path ftp zip extract

我正在构建一个php程序,它上传一个zip文件,将其解压缩并为解压缩文件夹中的特定文件生成链接。上传和解压缩文件夹工作正常。现在我有点困惑下一步做什么。我必须解决刚解压缩的文件夹并找到其中的(唯一)html文件。然后必须生成该文件的链接。

以下是我目前使用的代码:

$zip = new ZipArchive();
if ($zip->open($_FILES['zip_to_upload']['name']) === TRUE) 
{
    $folderName = trim($zip->getNameIndex(0), '/');
    $zip->extractTo(getcwd());
    $zip->close();
} 
else 
{
    echo 'Es gab einen Fehler beim Extrahieren der Datei';
}

$dir = getcwd();
$scandir = scandir($dir);

foreach ($scandir as $key => $value)
{
    if (!in_array($value,array(".",".."))) //filter . and  .. directory on linux-systems
    {
        if (is_dir($dir . DIRECTORY_SEPARATOR . $value) && $value == $folderName)
        {
            foreach (glob($value . "/*.html") as $filename) {
                $htmlFiles[] = $filename; //this is for later use
                echo "<a href='". SK_PICS_SRV . DIRECTORY_SEPARATOR . $filename . "'>" . SK_PICS_SRV . DIRECTORY_SEPARATOR . $filename . "</a>";
            }
        }
    }
}

所以这段代码似乎正在运作。我刚刚注意到一个相当奇怪的问题。 $ zip-&gt; getNameIndex [0]函数的行为有所不同,具体取决于创建zip文件的程序。当我用7zip制作一个zip文件时,似乎都没有问题。 $ folderName包含我刚提取的主文件夹的正确名称。例如“文件夹01”。但是当我用普通的windows zip程序压缩它时,相同的文件夹(相同的结构和相同的文件),$ zip-&gt; getNameIndex [0]包含错误的值。例如“文件夹01 / images /”或“文件夹01 / example.html”。所以它似乎以不同的方式读取zip文件。你们知道那个错误来自哪里或者我怎么能避免它?这对我来说真的很奇怪。

2 个答案:

答案 0 :(得分:1)

$dir = "the/Directory/You/Extracted/To";
$files1 = scandir($dir);
foreach($files1 as $str)
{
    if(strcmp(pathinfo($str, PATHINFO_EXTENSION),"html")===0||strcmp(pathinfo($str, PATHINFO_EXTENSION),"htm")===0)
    {
        echo $str;
    }

}

获取目录中每个文件的数组,检查每个文件的扩展名是否为htm / html,然后如果为true则回显该名称。

答案 1 :(得分:1)

因为您自己指定了提取路径,所以您可以尝试使用php&#34;函数&#34; glob&#34;

查找文件

查看手册:

Glob

此函数将返回与搜索模式匹配的文件的名称。 使用提取路径,您现在可以链接到该文件。

$dir = "../../suedkurier/werbung/"
$scandir = scandir($dir);
foreach ($scandir as $key => $value)
{
  if (!in_array($value,array(".",".."))) //filter . and  .. directory on linux-systems
  {
     if (is_dir($dir . DIRECTORY_SEPARATOR . $value))
     {
         foreach (glob($dir . DIRECTORY_SEPARATOR . $value . "/*.html") as $filename) {
           $files[] = $value . DIRECTORY_SEPARATOR $filename;
        }
     }
  }
} 

匹配的文件现在将保存在数组$ files中(带子文件夹) 所以你得到的路径就像

foreach($files as $file){
  echo  $dir . DIRECTORY_SEPARATOR . $file;
}