Я создаю программу 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-файл. Когда я делаю zip-файл с 7zip, кажется, все работает без проблем. $ folderName содержит правильное имя основной папки, которую я только что извлек. Например, «папка 01». Но когда я заархивирую его с помощью обычной программы Windows zip, то в той же папке (та же структура и те же файлы, содержащие файлы) $ zip-> getNameIndex [0] содержит неправильное значение. Например, что-то вроде «папка 01 / images /» или «папка 01 / example.html». Таким образом, кажется, что zip-файл читается по-другому / неправильно. Ребята, вы знаете, откуда эта ошибка или как я могу ее избежать? Это действительно кажется мне странным.
Поскольку вы сами указываете extract-path, вы можете попробовать найти ваш файл с помощью функции 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;
}
$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, затем введите имя, если оно истинно.