Abdul Rahman Ответов: 1

Как выполнить поиск изображений и перейти в определенный каталог?


Мне нужно искать все изображения в папках и их подпапках, и если найденные изображения {с расширением png jpeg gif}, нужно скопировать [не перемещать] их в определенную папку.
Кто-нибудь может мне помочь? Я уже пробовал этот код.
Спасибо

Что я уже пробовал:

<?php

$dir_path = "folder/";
$extensions_array = array('jpg','png','jpeg');

if(is_dir($dir_path))
{
    $files = scandir($dir_path);
    
    
    for($i = 0; $i < count($files); $i++)
    {
        if($files[$i] !='.' && $files[$i] !='..')
        {
            // get file name
            echo "File Name -> $files[$i]<br>";
            
            // get file extension
            $file = pathinfo($files[$i]);
            $extension = $file['extension'];
            //$extension = pathinfo($info->getFilename(), PATHINFO_EXTENSION);
            echo "File Extension-> $extension<br>";
            
           // check file extension
            if(in_array($extension, $extensions_array))
            {
            // show image
            echo "<img src='$dir_path$files[$i]' style='width:100px;height:100px;'><br>";
            }
        }
    }
}

1 Ответов

Рейтинг:
0

Jochen Arndt

Вы должны реализовать рекурсивный поиск файлов, который может быть выполнен с помощью PHP: RecursiveDirectoryIterator - руководство пользователя[^]. В рамках итерации проверьте соответствие расширений (что также можно сделать с помощью фильтра) и используйте РНР: копия - руководство пользователя[^] функция.

Я предлагаю попробовать это самостоятельно, используя документацию PHP, чтобы повысить свои навыки. В противном случае вы можете найти много примеров в интернете при разбиении проблемы и поиске каждой части: рекурсивный поиск файлов, проверка соответствия расширения файла (строки) элементу из списка и копирование файла.

Пример: Рекурсивный поиск файлов (PHP) - переполнение стека[^].


Abdul Rahman

Спасибо за ваш ответ. Но когда я попробовал вот так, то ничего не вышло ... пожалуйста, помогите..

<?php
$это = новый recursivedirectoryiterator упакован("D:/xampp/htdocs/Tests/search_images_inDirectory/folder");
$display = Array ( 'jpeg', 'jpg' );

$дест = 'D:/xampp/htdocs/Tests/search_images_inDirectory/imgs';
foreach(new RecursiveIteratorIterator($it) as $file)
{
if (in_array(strtolower(array_pop(explode('.', $file))), $display))
эхо-файл . " \северный";
copy($file, $dest);

}
?>

Jochen Arndt

Что значит "он терпит неудачу"?

Однако ваш код будет копировать каждый файл, потому что команда copy() находится вне условия проверки расширения, и вам нужно создать полный путь назначения для назначения копирования:
$destpath = $dest + "\" + basename($file);

Abdul Rahman

//copy(): первый аргумент функции copy() не может быть каталогом //
Это ошибка, которую я получаю.

Jochen Arndt

Вероятно, это связано с ошибкой, о которой я упоминал в своем предыдущем посте. Так и должно быть
if (in_array(strtolower(array_pop(explode('.', $file))), $display)) {
echo $file . " \n";
copy($file, $dest);
}

Скобки отсутствуют в вашем коде, так что copy() вызывается для каждый найденный файл, включая имена каталогов.

Abdul Rahman

он повторяет все файлы..Но я не могу скопировать эти изображения в другую указанную папку..
я дал папку назначения, как вы сказали..
$destpath = $dest + "\" + basename($file);..
но команда копирования не работает..
связано ли это с версиями php? я использую 5.6
Спасибо за все ваши ответы.

Abdul Rahman

<?php
$это = новый recursivedirectoryiterator упакован("D:/xampp/htdocs/Tests/search_images_inDirectory/folder");
$display = Array ( 'jpeg', 'jpg' );

foreach(new RecursiveIteratorIterator($it) as $file)
{
$дест = 'D:/xampp/htdocs/Tests/search_images_inDirectory/imgs/';

if (in_array(strtolower(array_pop(explode('.', $file))), $display))
эхо-файл . " \северный";

$destpath = $dest + "/" + basename($file);
//copy($file, $dest);
//move_uploaded_file($file, "$destpath");
if (!move_uploaded_file($file, "destpath")) {
Эхо "провалилось.";
}
еще{
Эхо "успеха";
}

}
?>

Это последний код, который повторяет все файлы изображений..но не копирует в путь назначения..

Jochen Arndt

Команда copy() требует, чтобы
- источник-это полный путь к существующему файлу (например, c:\folder\file.ext)
- у вас есть доступ на чтение к исходному файлу
- пункт назначения-это полный путь (например, c:\other-folder\file.ext)
- каталог назначения (полный путь без имени файла) существует
- у вас есть доступ на запись в каталог назначения

Поэтому распечатайте оба параметра и проверьте, применимо ли вышеизложенное.

Abdul Rahman

Все вопросы разрешения в порядке. Я чертовски смущен, почему эта функция copy() не работает.
Спасибо за ваши Промт-ответы.