путь — Извлеките папку и затем найдите определенный файл в Переполнении стека

Я создаю программу 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-файл читается по-другому / неправильно. Ребята, вы знаете, откуда эта ошибка или как я могу ее избежать? Это действительно кажется мне странным.

2

Решение

Поскольку вы сами указываете extract-path, вы можете попробовать найти ваш файл с помощью функции 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;
}
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, затем введите имя, если оно истинно.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector