我正在构建一个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文件。你们知道那个错误来自哪里或者我怎么能避免它?这对我来说真的很奇怪。
答案 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;
查找文件查看手册:
此函数将返回与搜索模式匹配的文件的名称。 使用提取路径,您现在可以链接到该文件。
$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;
}