Почему substr ($ fileinfo-> getFilename (), '- 3-sml')! == false не работает?

1

Моя цель - перенести первый файл, содержащий -3-sml в имени файла от temp до b2. Что делает мой код, так это перемещение каждого файла на b2. Почему это и что менять?

$name = "";
$dname = "";
$dir = new DirectoryIterator('temp/');
foreach ($dir as $fileinfo) 
{
    if (!$fileinfo->isDot()) 
    {
        if (substr($fileinfo->getFilename(),'-3-sml') !== false) 
        {
            rename("temp/".$fileinfo->getFilename(), "b2/".$fileinfo->getFilename());
            $name = $fileinfo->getFilename();
            $dname = "http://domain.com/b2/".$fileinfo->getFilename();
            break;
        }
    }
}

EDIT: я попробовал

if (substr($fileinfo->getFilename(),'-3-sml') !== false) 
{
    echo $fileinfo->getFilename()."<br>";
    continue;
    rename("temp/".$fileinfo->getFilename(), "b2/".$fileinfo->getFilename());
    $name = $fileinfo->getFilename();
    $dname = "http://oneitis.mygrabrede.de/b2/".$fileinfo->getFilename();
    break;
}

и кажется, что substr($fileinfo->getFilename(),'-3-sml') !== false не фильтрует ничего, поэтому каждое имя файла проходит. Зачем?

EDIT: Решение: оно должно быть strpos не substr.

Теги:

2 ответа

1

Если вам нужно переместить только первый соответствующий файл, вы можете использовать glob и получить доступ к первому элементу array, то есть:

$origin_path = "/somepath/temp";
$dest_path = "/somepath/b2";

$files = glob("$origin_path/*-3-sml*");
$fileName = basename($files[0]);
if(!is_dir("$dest_path")){
    mkdir("$dest_path", 0777);
    rename($files[0],"$dest_path/$fileName" );
}else{
    rename($files[0],"$dest_path/$fileName" );
}

Если вам нужно выполнить поиск внутри нескольких подпапок, используйте эту рекурсивную функцию glob:

function rglob($pattern='*', $flags = 0, $path='')
{
    $paths=glob($path.'*', GLOB_MARK|GLOB_ONLYDIR|GLOB_NOSORT);
    $files=glob($path.$pattern, $flags);
    foreach ($paths as $path) { $files=array_merge($files,rglob($pattern, $flags, $path)); }
    return $files;
}

и перейти от

 $files = glob("$origin_path/*-3-sml*");

в

 $files = rglob("$origin_path/*-3-sml*");
0

Измените substr() на strpos() Substr для поиска подстроки

Strpos вернет позицию определенной строки

Ещё вопросы

Сообщество Overcoder
Наверх
Меню