php - 解压一个文件夹,然后在 PHP 中搜索特定文件

标签 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->getNameIndex[0] 函数的行为有所不同,具体取决于创建 zip 文件的程序。当我使用 7zip 制作 zip 文件时,一切似乎都可以正常工作。 $folderName 包含我刚刚提取的主文件夹的正确名称。例如“文件夹 01”。但是,当我使用普通的 Windows zip 程序对其进行压缩时,会提取相同的文件夹(相同的结构和相同的包含文件),$zip->getNameIndex[0] 包含错误的值。例如“文件夹 01/images/”或“文件夹 01/example.html”之类的内容。所以它似乎以不同的方式/以错误的方式读取 zip 文件。你们知道这个错误从何而来或者我如何避免它?这对我来说确实很奇怪。

最佳答案

因为您自己指定了提取路径,所以您可以尝试使用 php 的函数“glob”查找文件

看看手册:

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;
}

关于php - 解压一个文件夹,然后在 PHP 中搜索特定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26758474/

相关文章:

php - SELECT DISTINCT 有什么问题?

php PDO 锁表

c# - 通过 C# 确定文件路径是否有效且存在

java - Netbeans:如何自动将独立 Java 应用程序的 JAR 文件传输到远程位置

vbscript - vbs脚本通过ftp发送文件并检查/删除原始文件

php - PHP 中的 Ruby bcrypt 密码检索

javascript - 有没有 Yii 小部件 "Radio Button Set "?

Angular 默认路由器 socket

使用 glib 检查路径等效性

curl - 使用 cUrl 从 ftp 中删除文件