Сейчас на форуме: asfa, bartolomeo, hgdagon (+6 невидимых) |
![]() |
eXeL@B —› Программирование —› Кто-нить кодил на PHP? |
Посл.ответ | Сообщение |
|
Создано: 07 июня 2006 07:59 · Поправил: alex111 · Личное сообщение · #1 Привет надо сделать что-то типа карты сайта. function myreaddir($dir)//считывает все файлы в папке в массив $files
в таком случае дерево папок получается не правильное. если в директории не одна папка. находит первую папку, в ней то-же первую, в ней ...и т.д. второй, третьеи и др. папок нет. Не хватает фантазии, как сделать правильно?,Есть какие нибудь мысли? ![]() |
|
Создано: 07 июня 2006 08:09 · Личное сообщение · #2 |
|
Создано: 07 июня 2006 08:23 · Личное сообщение · #3 |
|
Создано: 07 июня 2006 09:09 · Поправил: alex111 · Личное сообщение · #4 realcoding пишет: Пробуй Попробовать смогу только вечером. Но бегло глянув на код, кажется это не то. $dir = ""; абсолютный путь к папке на сервере
А вложеные папки? Я хочу автоматизировать процесс. Типа залил файлы на сервак а в карте они сами добавятся. ![]() |
|
Создано: 07 июня 2006 17:05 · Поправил: [HEX] · Личное сообщение · #5 alex111 Тебе же Пахан дал ссылки?! Разве так сложно зайти и посмотреть? Или все за тебя должны написать? Here is my recursive read dir function, what read dir by mask. [php] function ls($dir, $mask /*.php$|.txt$*/) { static $i = 0; $files = Array(); $d = opendir($dir); while ($file = readdir($d)) { if ($file == '.' || $file == '..' || eregi($mask, $file) ) continue; if (is_dir($dir.'/'.$file)) { $files += ls($dir.'/'.$file, $mask); continue; } $files[$i++] = $dir.'/'.$file; } return $files; } $f = ls('E:/www/mymoney/lsdu', ".php$" /*no spaces*/); [/php] примеров там уйма <? $the_array = Array(); $handle = opendir('prace/.'); while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { $the_array[] = $file; } } closedir($handle); sort ($the_array); reset ($the_array); while (list ($key, $val) = each ($the_array)) { echo "<a href=prace.php?id=$val>$val</a><br>"; } ?> ----- Computer Security Laboratory ![]() |
|
Создано: 07 июня 2006 17:52 · Личное сообщение · #6 Вот все, что тебе необходимо: function listing($dir) {
Если надо доработай ссылки ![]() |
|
Создано: 07 июня 2006 18:35 · Личное сообщение · #7 |
|
Создано: 07 июня 2006 19:46 · Личное сообщение · #8 [HEX] realcoding не работает ни один пример. Я может не так описал задачу. Например в корневой директории такая структура файлов: dir1 subdir1 subdir2 subsub1 sssub1 dir2 subdir1 ...и т.д. все примеры выводят либо dir1 dir2 либо dir1/subdir1 dir1/subdir2 Мне надо полную структуру файлов одним! запросом. ![]() |
|
Создано: 07 июня 2006 22:47 · Личное сообщение · #9 |
|
Создано: 15 июня 2006 07:37 · Личное сообщение · #10 |
|
Создано: 15 июня 2006 12:24 · Личное сообщение · #11 www.php.net/manual/ru/function.opendir.php Чуть-чуть подредактировал вариант из 2-й заметки mstabile75. Правда он все равно глючит на 21-й строке, но выдает много поддиректорий. ======================= <?php /* The below function will list all folders and files within a directory It is a recursive function that uses a global array. The global array was the easiest way for me to work with an array in a recursive function *This function has no limit on the number of levels down you can search. *The array structure was one that worked for me. ARGUMENTS: $startdir => specify the directory to start from; format: must end in a "/" $searchSubdirs => True/false; True if you want to search subdirectories $directoriesonly => True/false; True if you want to only return directories $maxlevel => "all" or a number; specifes the number of directories down that you want to search $level => integer; directory level that the function is currently searching */ function filelist ($startdir="./", $searchSubdirs=1, $directoriesonly=0, $maxlevel="all", $level=1) { //list the directory/file names that you want to ignore $ignoredDirectory[] = "."; $ignoredDirectory[] = ".."; $ignoredDirectory[] = "_vti_cnf"; global $directorylist; //initialize global array if (is_dir($startdir)) { if ($dh = opendir($startdir)) { while (($file = readdir($dh)) !== false) { if (!(array_search($file,$ignoredDirectory) > -1)) { if (filetype($startdir . $file) == "dir") { //build your directory array however you choose; //add other file details that you want. $directorylist[$startdir . $file]['level'] = $level; $directorylist[$startdir . $file]['dir'] = 1; $directorylist[$startdir . $file]['name'] = $file; $directorylist[$startdir . $file]['path'] = $startdir; if ($searchSubdirs) { if ((($maxlevel) == "all") or ($maxlevel > $level)) { filelist($startdir . $file . "/", $searchSubdirs, $directoriesonly, $maxlevel, $level + 1); } } } else { if (!$directoriesonly) { //if you want to include files; build your file array //however you choose; add other file details that you want. $directorylist[$startdir . $file]['level'] = $level; $directorylist[$startdir . $file]['dir'] = 0; $directorylist[$startdir . $file]['name'] = $file; $directorylist[$startdir . $file]['path'] = $startdir; }}}} closedir($dh); }} return($directorylist); } $files = filelist("f:/",1,1); // call the function foreach ($files as $list) {//print array // echo "Directory: " . $list['dir'] . " => Level: " . $list['level'] . " => Name: " . $list['name'] . " => Path: " . $list['path'] ."<br>"; echo $list['path'] ."<br>"; }?> ![]() |
|
Создано: 15 июня 2006 16:22 · Поправил: stalker · Личное сообщение · #12 ну вы, блин, маньяки ... без опыта программирования ![]() вот кусок одного из моих классов для создания полного snapshoot'а сайта для обновления: /* ** [update_site_snapshot] : функция создания архивированного (gz) файла с деревом сайта. ** ** [in] : $excludes - массив исключений (игнорируемые файлы и папки). ** [out] : $array - массив с данными о сайте. */ function update_site_snapshot($excludes = NULL) { $this->oSnapshot = array(); // -- получаем "снимок" сайта -- $this->recursive_bypass("callback_snapshot", $excludes ? $excludes : array()); return $this->oSnapshot; } ////////////////////////////////////////////////////////////////////// /////// // private functions /* ** [recursive_bypass] : функция "обхода" дерева сайта. ** ** [in] : $callback - функция, вызываемая при обнаружении файла или папки. ** : $excludes - исключение "элементов сайта" из рекурсии. ** : $fname - "элемент сайта" при рекурсивном вызове функции. */ function recursive_bypass($callback, $excludes, $fname = "") { if (in_array($fname, $excludes)) return; // обработка "элемента сайта" if (!empty($fname)) $this->$callback($fname); // это директория? if (is_dir(gdRoot. $fname)) { // рекурсивный спуск по директориям $dname = dir(gdRoot. $fname); while (($entry = $dname->read()) !== false) { if (($entry != ".") && ($entry != "..")) $this->recursive_bypass($callback, $excludes, empty($fname) ? $entry : $fname ."/". $entry); } $dname->close(); } } /* ** [callback_snapshot] : функция "обратного вызова" для построения "снимка сайта". ** ** [in] : $fname - "элемент сайта" который нужно обработать. */ function callback_snapshot($fname) { // это файл? if (is_file(gdRoot. $fname)) { $crc32 = 0; if (($data = file_get_contents(gdRoot. $fname)) !== false) $crc32 = dechex(crc32($data)); array_push($this->oSnapshot, array( "name" => "/". $fname, "crc32" => $crc32, "mtime" => filemtime(gdRoot. $fname) )); } // это директория? else if (is_dir(gdRoot. $fname)) { array_push($this->oSnapshot, array( "name" => "/". $fname ."/", "crc32" => 0, "mtime" => 0 )); } } будет непонятно -- задавайте вопросы ![]() ![]() |
![]() |
eXeL@B —› Программирование —› Кто-нить кодил на PHP? |