Почему этот код работает только в последнем каталоге, указанном в файле dirs.txt
вместо того, чтобы работать с каждым каталогом, указанным в этом файле. Кажется, игнорировать foreach
Устав до while
цикл заканчивается.
<?php
$handle = fopen("dirs.txt", "r");
$tmpDir = "/tmp/";
if ($handle) {
while (($dir = fgets($handle)) !== false) {
foreach(glob($dir."*love*.mp3") as $file) {
if (!copy($file, $tmpDir.basename($file))) {
echo "Cant copy $file...\n";
}
}
}
} else {
}
fclose($handle);
?>
Файл dirs.txt — это новый список разделенных строк
/home/mp3/
/home/music/
/etc/find/music/
Я не вижу никакой ошибки, только последний каталог обрабатывает. Все каталоги хороши и файлы существуют внутри, и все они я могу открыть вручную. Если я удалю / etc / find / music / из файла, то / home / music / будет готов
Я подозреваю что fgets
возвращает каждую строку из вашего файла с символами новой строки, все еще прикрепленными к концу строки. Но ваша последняя строка (при условии, что вы не вводите пустую строку в конце файла) не будет содержать символа новой строки. Если это так, то, возможно, glob
Метод пытается найти файлы в пути к каталогу, который разбивается на две части символом новой строки, примерно так:
/home/mp3/
*love*.mp3
который не собирается соответствовать правильно. Итак glob
Функция возвращает пустой массив, который не дает циклу foreach работать, поэтому while
Цикл пропускает до следующей строки вашего файла, затрагивая ту же проблему до последней строки файла, которая не заканчивается символом новой строки.
Попробуйте вставить это в качестве первой строки вашего while
цикл:
$dir = trim($dir);
Это должно удалить любой символ новой строки и сделать строку пригодной для использования в glob
функция.
Других решений пока нет …