Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

PHP перебор директории ЗАЙДИТЕ УМОЛЯЮ

------ Профи (766), на голосовании 3 года назад
Здравствуйте уважаемые пользователи mail.ru. У меня проблема, мне необходимо написать код который в заданной директории будет перебирать все подпапки и находить файл md5 которого будет соответствовать переменной (это не антивирус, до них мне ещё далеко), я вроде бы сделал всё что мог но к сожалению ничего не получается. Я работаю в среде DevelNext и поэтому она поддерживает не все функции php. Вот сам код

$directory = new File('C:/Program Files/');
$list = $directory->findFiles();

foreach ($list as $value) {

if (fs::isFile($value)) {
$md5 = $value->hash('MD5');
if (in_array($md5, $signature)) {
$name = fs::name($value);
$locationfs = fs::abs($value);
alert("Файл найден");
if (fs::isDir($value)) {
$directory2 = new File($value);
$list2 = $directory2->findFiles();
foreach ($list2 as $value) {
{if (fs::isFile($value)) {
$md5 = $value->hash('MD5');
if (in_array($md5, $signature)) {
$name = fs::name($value);
$locationfs = fs::abs($value);
alert("Файл найден");
}
}
}
}
}
}
}
}
Разумеется это незаконченный код. Помогите пожалуйста кто чем может! Буду очень признателен!!!!
Дополнен 3 года назад
В самой директории файлы успешно находятся, но вот дальше....
Голосование за лучший ответ
Редис Александрович Оракул (79332) 3 года назад
получаешь список всех файлов
var x = getDirContents(''C:/Program Files/');

потом проходишь по этому списку и создаешь массив md5 хэшей из списка файлов. Потом фильтруешь массив на нужное значение

function getDirContents($dir, &$results = array()) {
$files = scandir($dir);

foreach ($files as $key => $value) {
$path = realpath($dir . DIRECTORY_SEPARATOR . $value);
if (!is_dir($path)) {
$results[] = $path;
} else if ($value != "." && $value != "..") {
getDirContents($path, $results);
$results[] = $path;
}
}

return $results;
}
------Профи (766) 3 года назад
Это всё прекрасно но мне ещё нужно чтобы скрипт заходил в подпапки каталога и выполнял аналогичные действия
Олег Барыжкин, рекурсия
[vs] Просветленный (39070) 3 года назад
Нужно делать не foreach внутри foreach, а сделать функцию которая бы сама себя вызывала для вложенных директорий. Это называется рекурсия. Типа:

function scanFolders($path) {
...
if (is_dir($value)) {
scanFolders($value) ;
}
...
}
------Профи (766) 3 года назад
Сделал рекурсию, ничего не работает
function VirusScaner ($list){
foreach ($list as $value) {
if (fs::isFile($value)) {
$md5 = $value->hash('MD5');
if (in_array($md5, $signature)) {
$name = fs::name($value);
$locationfs = fs::abs($value);
alert("Файл найден");

if (fs::isDir($value)) {
$directory = new File($value);
$list = $directory->findFiles();
print_r($list);
VirusScaner($value);
}
}
}
}
}
------ Профи (766) Олег Барыжкин, название VirusScaner по приколу если что
Похожие вопросы