我正在构建一个 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”查找文件
看看手册:
该函数将返回与搜索模式匹配的文件名。 有了您的提取路径,您现在就拥有了该文件的链接。
$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/