[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Каталог для чтения
Rutmens
Вот набросал код .
$a = getcwd();
$dir = opendir ($a);
while ($file = readdir($dir))
{
if ($file == '.' || $file == '..') continue;
print "<br><a href='$file'>".$file."</a>";
}
closedir ($dir);

Он выводит мне папку сесион и я по ней перехожу и далее не чего не происходит . Я так понял нужно вставить chdir но вот и вопрос куда ? и вообще код рабочий или я точно не туда еду .



Спустя 42 минуты, 15 секунд (23.08.2010 - 15:00) waldicom написал(а):
Анализировать, что передано через $_GET и открывать именно ту директорию.
Только это опасно

Спустя 27 минут, 58 секунд (23.08.2010 - 15:28) Basili4 написал(а):
$dir=opendir(isset($_GET['Path'])?$_GET['Path']:getcwd());
while ($file = readdir($dir))
{
if ($file == '.' || $file == '..') continue;
if (is_dir($file))
print "<br><a href='".$_SERVER['SCRIPT_NAME']."?Path=".$file."'>".$file."</a>";
else
print "<br>".$file;
}
closedir ($dir);

Спустя 18 минут, 26 секунд (23.08.2010 - 15:46) Rutmens написал(а):
Цитата (waldicom @ 23.08.2010 - 12:00)
Анализировать, что передано через $_GET и открывать именно ту директорию.
Только это опасно

Почему опасно ? ты про иньекцию ? то тогда вообще не чего не передовать ? user posted image

Спустя 4 минуты, 59 секунд (23.08.2010 - 15:51) Rutmens написал(а):
Цитата (Basili4 @ 23.08.2010 - 12:28)
$dir=opendir(isset($_GET['Path'])?$_GET['Path']:getcwd());
while ($file = readdir($dir))
{
    if ($file == '.' || $file == '..') continue;
    if (is_dir($file))
    print "<br><a href='".$_SERVER['SCRIPT_NAME']."?Path=".$file."'>".$file."</a>";
    else
    print "<br>".$file;
}
closedir ($dir);

Проверил всё работает как часы !!!
Но заметил одну ошибку .. он в папку заходит .. и выводит что в нутри , а в другой папке есть ещё папка и на этом всё .. нету перехода .
Подскажи как подсчитать предыдушая была папка ... чтобы к примеру переход был такого типа .
Пример .
test | papca | moloko |
И так далие видно что я прошол по папкам ..

Спустя 26 минут, 33 секунды (23.08.2010 - 16:18) Basili4 написал(а):
<?php
$ds=isset($_GET['Path'])?$_GET['Path']:getcwd();
$dir=opendir($ds);
chdir($ds);
while ($file = readdir($dir))
{
if ($file == '.' || $file == '..') continue;
if (is_dir($file))
print "<br><a href='".$_SERVER['SCRIPT_NAME']."?Path=".$file."'>".$file."</a>";
else
print "<br>".$file;
}
closedir ($dir);

?>

Спустя 13 минут, 2 секунды (23.08.2010 - 16:31) silius написал(а):
Rutmens
если тебе надо url типа http://your_site/test/papca/moloko, то лучше делай динамикой

Или я тебя не правильно понял?

Спустя 4 дня, 4 часа, 13 минут, 5 секунд (27.08.2010 - 20:44) Rutmens написал(а):
Поточнее можно ?

Спустя 1 день, 2 часа, 19 минут, 51 секунда (28.08.2010 - 23:04) Rutmens написал(а):
Вот я набросал такой код .
<?php   
$a = $_SERVER['DOCUMENT_ROOT']."/papca/";
#$a=(isset($_GET['file']))?$_GET['file']:false;
/* объявляем функцию */

function full_dir_all($a){
$dir = opendir ($a);
while (($file = readdir($dir)) !== FALSE) {
if(is_dir($a."/".$file) && $file != '.' && $file != '..'){
echo "<a href=$file/>".$file."<a><br>";
/* рекурсивно вызываем функцию */
full_dir_all($_SESSION['$a']."/");
}

}

closedir ($dir);
}
echo full_dir_all($a);
?>

А вот что мне с другого форума написали .
------------------------------------
Я Вам написал, что убрал рекурсивный вызов функции, Вы же собираетесь работать с каждым каталогом по отдельность, так зачем делать рекурсию?
Теперь делаем так

<?php  
echo $_SERVER['DOCUMENT_ROOT']."/papca/<br>";
// увидим C:/Sites/home/localhost/www/papca/
echo getcwd();
// увидим C:\Sites\home\localhost\www
?>



Зачем тут путь от корня сайта? Заменим это всё просто ".", что в моём понимании будет указывать на текущий каталог
Имя каталога будем передавать через $_GET

<?php  
$catalog = isset($_GET['catalog']) ? $_GET['catalog'] : ".";
?>



Вот эту переменную, $catalog, и передадим функции и удалим из кода рекурсивный вызов самой функции.
Получим то, что Вы хотели получить - содержимое каталога с файлами и подкаталогами.
Проверяем, если файл является каталогом, то оформляем его имя в виде ссылки

<?php  
echo "<a href='?catalog="$file."'>".$file."</a> (каталог)</h4>";
// Получится, что то вроде этого
// <a href='?catalog=cat_name'>cat_name</a>

?>


Если файл является файлом, то просто выведем его имя.
Но что бы переходить по ссылке, надо её дополнить именем текущего каталога. Для этого понадобится сессия, массив $_SESSION. Вот в неё и надо будет занести имя каталога в который надо попасть.

<?php
$_SESSION['cat_next'] = $catalog;
$ses_sion = isset($_SESSION['cat_next']) ? $_SESSION['cat_next']."/" : "";
?>



Переменная $ses_sion будет дополнять строку запроса.
<?php  
echo "<a href='?cat=".$ses_sion.$file."'>".$file."</a> (каталог)</h4>";
// Получится, что если перейти по ссылке, то увидим
// <a href='?catalog=cat_name/cat_name1'>cat_name1</a>

?>

Вот весь вывод .. но я не допетриваю как это всё собрать .. помогите очень нужно решаю эту проблему не один день . sad.gif
Быстрый ответ:

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