- проблем с readdir и glob
WT форуми -> PHP MySQL ASP.NET -> проблем с readdir и glob
Създайте нова тема Напишете отговор 
Автор Съобщение
alirius
Нов
Нов

Регистриран на: 17/06/2008 6:28 pm

Support: 0
Bonus: 0
Мнения: 39
Мнение 19/03/2017 3:36 pm     проблем с readdir и glob Отговорете с цитат


Здравейте,
проблема ми е следния , трябва да накарам php да чете от директория и всяка нейна под директория за .xml файлове пробвах следното.

function readDirs($path) {
    $dirHandle = opendir($path);
    while ($item = readdir($dirHandle)) {
        $newPath = $path . DIRE . $item;
        if (is_dir($newPath) && $item != '.' && $item != '..') {
            //$newPaths = $newPath . "/";
            return $newPath;
            readDirs($newPath);
        }
    }
   // return readDir();
}

function read_files($allf) {
    return readDirs("books");

    $allf = readDirs();
    echo "<table style='width:100%' border=1> <tr>"
    . "<th> Author </th> <th> Book </th> <th> Date Updated </th></tr>";
    foreach (glob("{$allf}*.xml") as $filename) {
        $xml_file = file_get_contents($filename, FILE_TEXT);
        $xml = simplexml_load_string($xml_file);
        $bookname = (string) $xml->name;
        $bookauthor = (string) $xml->author;
        $bookdate = date("F d Y H:i:s.", filemtime($filename));
        echo ' <tr><th> ' . $bookauthor . " </th>";
        echo '<th>' . $bookname . '</th>';
        echo '<th>' . $bookdate . '</th> </tr>';
    }
}
Малко помощ Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
anonimen
Активен
Активен

Регистриран на: 11/06/2012 8:07 pm

Support: 139
Bonus: 277
Мнения: 1242
Мнение 19/03/2017 4:35 pm      Отговорете с цитат


Тук има няколко примерa - http://stackoverflow.com/questions/1860393/recursive-file-search-php
Там ползват jpg за разширение, ти просто ще го смениш с xml.

В php имаш вграден клас за рекурсивна обработка на директории - http://php.net/manual/bg/class.recursivedirectoryiterator.php

A иначе приемрна грешка в твоя код е, че правиш return преди readDirs, т.е. второто не се вика никога:

return $newPath;
readDirs($newPath);
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
raiden
Активен
Активен

Регистриран на: 08/12/2006 10:13 am

Support: 179
Bonus: 444
Мнения: 2121
Мнение 20/03/2017 10:04 am      Отговорете с цитат


Според мен по-лесно е без рекурсивния итератор:

PHP code:
<?php
function listDirContents($path) {
$path = realpath($path);
$files = array();
try {
$scanner = new DirectoryIterator($path);
foreach($scanner as $node) {
$fpath = $path."/".$node->getFilename();
if($node->isDir() && !$node->isDot()) { //Листва всички директории без . и ..
$files = array_merge($files, listDirContents($fpath)); //Рекурсивно ги добавя към масива
} else if(!$node->isDot() && pathinfo($fpath,PATHINFO_EXTENSION)=='xml') { //Ако файла е XML, правиш каквото правиш, аз ползвам SimpleXMLElement за обработка. $fpath съдържа пътя до файла
}
}
return $files;
} catch (Exception $e) {
//Exception handling
}
}
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
Страница 1 от 1


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети