[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Меню навигации
zucler
Всем привет!

Я пытаюсь написать скрипт, который бы создавал динамически обновляемый лист директорий. Я новичек в PHP (это мой первый скрипт), отсюда возникает множество вопросов и проблем. Я даже не уверен, верно ли я выбрал алгоритм действий.

На данном этапе, мой скрипт не делает практически ничего из того, что от него требуется :D И чем дальше я над ним работаю, тем больше мне кажется, что я выбрал не правильный алгоритм. Не могли бы вы мне подсказать или помочь закончить этот скрипт)

Список проблем:
    1. Я знаю, что пока он отображает только папки. Это не беда

    2. Если выбрать папку, он будет отображать список вложенных файлов под всеми папками, а не только под выбранной.

    3. Он проверяет только один под-уровень директорий. Можно ли следуя моему алгоритму сделать так, чтобы он проверял любой уровень? (пример: папка/подпапка/подпапка/подпапка/подпапка а на данный момент он проверяет только: папка/подпапка)

Вообщем главный вопрос, смогу ли я впринципе закончить скрипт, если буду действовать выбранным мною алгоритмом. Я просто даже не представляю, как сделать, чтобы он проверял подподпод папки. Конечная цель – создать страничку, с навигацией в одной части и iframe тэгом в другой. Т.е. скрипт бы проверял все директории и составлял список файлов и папок и затем открывал бы их в iframe,

Если у кого-то есть готовое решение, я был бы очень признателен.

Сорри, что комменты на английском, могу перевести, если надо)

Заранее, спасибо!

P.S. чтобы скрипт заработал, обязательно назовите его index.php

        <?php
error_reporting( E_ALL & E_STRICT );
read(".");

// This function reads the directory specified, creating an array with all files and folders.
function read($path) {
if ($dir = opendir($path)) {
while (false !== ($file = readdir($dir))) {
if ($file != "." && $file != ".." && $file != ".DS_Store") { // These files will not be displayed
array($m_list[] = $file); // Creates a list of all objects.
}
}
}

closedir($dir);
$n=0; // n represents the $key value of a particular folder inside $m_list array.
foreach ($m_list as $m_object) {
if (is_dir($m_object)) { // Check if current object is a directory.
$dir_link = $m_object;
$headers[] = array($m_object => "index.php?s=". $n); // Assign a unique link for each of the folders.
$sublist[$n] = subdir($m_list, $dir_link); // Acquire the list of all objects inside a folder.
}
$n++;
}
display($headers, $sublist); // Display the results.
}

// This function aquires a complete list of all objects inside a folder and links to them.
function subdir($m_list, $dir_link) {
$path = $dir_link;
if ($dir = opendir($path)) {
while (false !== ($file = readdir($dir))) {
if ($file != "." && $file != ".." && $file != ".DS_Store") {
$sublist[$file] = "/".$dir_link."/".$file; // For example if file me.html was inside main/sub/ folder then the value will be main/sub/me.html
}
}
}

closedir($dir);
return ($sublist);
}

//This function displays the results
function display($headers, $sublist) {
$s = $_GET['s']; // Aqcuire a sequence number of a folder the user wants to display.
foreach ($headers as $count) {
foreach ($count as $key => $value){
echo "<a href = $value>$key</a><br>";
if ($s != null && $s >= 0) { // Check if this folder should be expanded.
foreach ($sublist as $one => $two) {
if ($one == $s) {
foreach ($two as $kkey => $vvalue) {
echo "<ul><a href = $vvalue>$kkey<a><br></ul>";
}
}
}
}
}
}
}

?>







Спустя 20 минут, 57 секунд (4.03.2011 - 05:00) inpost написал(а):
zucler
надо, чтобы функция обошла все папки и подпапки, для этого внутри функции проверяй, является ли полученный результат от readdir - папкой, если да - то вызывай саму себя. Вообщем рекурсией можно обойти все папки и взять все файлы.
А есть ещё функция glob, почитай про неё.

Спустя 4 часа, 44 минуты, 12 секунд (4.03.2011 - 09:44) zucler написал(а):
Да, я так и хотел сделать, изначально. Но я чето недопер, как саму себя вызвать в данном контексте. Можешь привести пример кода плз?

Про функцию прочитаю, спасибо!

Спустя 11 минут, 11 секунд (4.03.2011 - 09:55) Семён написал(а):
Вот самое лучше решение!
http://lmgtfy.com/?q=%D0%94%D0%B5%D1%80%D0...D0%BE%D0%BA+php

Спустя 2 дня, 16 часов, 48 минут, 55 секунд (7.03.2011 - 02:44) zucler написал(а):
Цитата (Семён @ 4.03.2011 - 06:55)
Вот самое лучше решение!
http://lmgtfy.com/?q=%D0%94%D0%B5%D1%80%D0...D0%BE%D0%BA+php

Спасибо, реально помогло biggrin.gif Оказывается, я просто не правильно гуглил))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.