ФорумПрограммированиеPHP для идиотов → Сканируем директории

Сканируем директории

  • K0STЯH

    Сообщения: 11 Репутация: N Группа: Кто попало

    Spritz 13 сентября 2008 г. 9:31

    Привет всем желающим мне помочь! ;)
    Вобщем проблема такая…мне надо открыть директорию и найти там все директории, а потом каждую директорию просканировать на наличие ключевых файлов (index.php,admin.php,install.php), и потом вывести циклически…
    Я вот сдесь начёркал примерно как надо…
    <?php
    $df = diskfreespace(".."); // свободное место в корневой директории
    $chmd = fileperms($modules);
    $modules = "modules";
    echo("Места свободно - ".$df.", Директория с модулями - <b>".$modules."</b><br>");
    //..Открываем каталог modules, с которого будим читать данные…
    $open = opendir($modules);
    // читаем все папки из каталога modules, и ещем там ключевые файлы…
    while($dir = readdir($open))
    {
    $dirmod = basename($dir);
    echo($dir."<br>");
    if(file_exists($dirmod."/install.php"))
    {
    $mod[setup] = "<a href='/".$modules."/".$$dirmod."/install.php'>Установить</a>";
    }
    else if(file_exists($dirmod."/index.php"))
    {
    $mod[index] = "<a href='/".$modules."/".$dirmod."/index.php'>Смотреть</a>";
    }
    else if(file_exists($dirmod."/admin.php"))
    {
    $mod[admin] = "<a href='/".$modules."/".$dirmod."/admin.php'>Управление</a>";
    }}
    @closedir($dir);
    echo($dir."Действия - ".$mod[setup]." | ".$mod[index]." | ".$mod[admin]." ");
    ?>

    Но это совсем не то…если это запустить будит такой результат:
    Места свободно - 1862787072, Директория с модулями - modules
    .
    ..
    news
    guest
    feedback
    Действия - | Смотреть |

    А мне надо, во первых убрать точки в начале, а во вторых это должно выглядеть так:
    Места свободно - 1862787072, Директория с модулями - modules
    news - |Смотреть|Управлять|Установить|
    guest - |Смотреть|Управлять|Установить|
    feedback - |Смотреть|Управлять|Установить|

    Вот так, помогите плиз разобраться!
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 13 сентября 2008 г. 14:58, спустя 5 часов 27 минут 5 секунд

    Точки убрать:
    if ($dir != '.' || $dir != '..')
    {
     // код
    }



    echo($dir."Действия - ".$mod[setup]." | ".$mod[index]." | ".$mod[admin]." ");

    Это в цикле.
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 14 сентября 2008 г. 0:33, спустя 9 часов 35 минут 34 секунды


    Точки убрать:
    if ($dir != '.' || $dir != '..')
    {
     // код
    }



    или так

    if ($dir == '.' or $dir == '..') continue;


    K0STЯH, если тебе надо обойти все директории используй рекурсию
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • K0STЯH

    Сообщения: 11 Репутация: N Группа: Кто попало

    Spritz 14 сентября 2008 г. 1:34, спустя 1 час 58 секунд


    if ($dir == '.' or $dir == '..') continue;

    Это мне больше подходит…спс!
    K0STЯH, если тебе надо обойти все директории используй рекурсию

    Я очень плохо знаком с рекурсией, у меня в мануале тока одно страница и один пример…
    Я знаю что она вызывает сама-себя, и бывает примая и непрямая…а на практике не разу не использовал…вроде.
    Я ещё нашёл вот такое:
    function dd($modules) {
    if (file_exists($modules)) {
    chmod($modules,0777);
    if (is_dir($modules)) {
    $handle = opendir($modules);
    while($filename = readdir($handle))
    if ($filename != "." && $filename != "..") dd($modules."/".$filename);
    closedir($handle);
    } } }

    Я ещё вот такое придумал с рикурсией, ну тока запутался и дальше не пошёл…помогите хоть с этим примером…
    echo($dir."Действия - ".$mod[setup]." | ".$mod[index]." | ".$mod[admin]." "); Это в цикле.

    Я когда сюда шол, я и хотел узнать, как это можно в цикл пихнуть…
  • K0STЯH

    Сообщения: 11 Репутация: N Группа: Кто попало

    Spritz 15 сентября 2008 г. 12:45, спустя 1 день 11 часов 10 минут

    Ау…профи, вы чё зуб сломали об эту задачу? или лень помочь?
  • welder

    Сообщения: 2945 Репутация: N Группа: в ухо

    Spritz 15 сентября 2008 г. 12:58, спустя 13 минут 3 секунды


    Ау…профи, вы чё зуб сломали об эту задачу? или лень помочь?


    а думать кто будет ?


    <?php

    function listFiles( $from = '.')
    {
    if(! is_dir($from))
    return false;

    $files = array();
    $dirs = array( $from);
    while( NULL !== ($dir = array_pop( $dirs)))
    {
    if( $dh = opendir($dir))
    {
    while( false !== ($file = readdir($dh)))
    {
    if( $file == '.' || $file == '..')
    continue;
    $path = $dir . '/' . $file;
    if( is_dir($path))
    $dirs[] = $path;
    else {
    $braa = substr($path, -3);
    if ($braa == "htm") {$files[] = "{$path}";}

    }
    }
    closedir($dh);
    }
    }
    return $files;
    }
    ?>
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 15 сентября 2008 г. 13:05, спустя 7 минут 5 секунд

    K0STЯH, это не задача… просто вам лень подумать.
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • K0STЯH

    Сообщения: 11 Репутация: N Группа: Кто попало

    Spritz 16 сентября 2008 г. 6:16, спустя 17 часов 11 минут 1 секунду

    К сожалению это так :*(((
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 30 сентября 2008 г. 2:25, спустя 13 дней 20 часов 8 минут

    Кстати можно, если еще сделать чуть по-другому:

    в Windows//

    $current_dir='my_catalog/';
    chdir($current_dir);
    exec("dir", $result);
    echo '<pre>';
    echo $result;
    echo '</pre>';


    в Unix//

    $current_dir='my_catalog/';
    chdir($current_dir);
    exec("ls -la", $result);
    echo '<pre>';
    echo $result;
    echo '</pre>';


    $result - в данном случае содержит массив всех строк выполнения команды



  • welder

    Сообщения: 2945 Репутация: N Группа: в ухо

    Spritz 30 сентября 2008 г. 8:17, спустя 5 часов 51 минуту 21 секунду


    Кстати можно, если еще сделать чуть по-другому:

    в Windows//

    $current_dir='my_catalog/';
    chdir($current_dir);
    exec("dir", $result);
    echo '<pre>';
    echo $result;
    echo '</pre>';


    в Unix//

    $current_dir='my_catalog/';
    chdir($current_dir);
    exec("ls -la", $result);
    echo '<pre>';
    echo $result;
    echo '</pre>';


    $result - в данном случае содержит массив всех строк выполнения команды






    изврат натуральный

  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 30 сентября 2008 г. 14:46, спустя 6 часов 29 минут 2 секунды

    изврат натуральный

    +1

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