Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Переход из одной папки в другую .
 
 автор: Rutmens   (23.08.2010 в 15:26)   письмо автору
 
 

Вот набросал код .
$a = getcwd();
$dir = opendir ($a);
while ($file = readdir($dir))
{
    if ($file == '.' || $file == '..') continue;
    print "<br><a href='$file'>".$file."</a>";
}
closedir ($dir);

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

  Ответить  
 
 автор: Slo_Nik   (23.08.2010 в 16:02)   письмо автору
 
   для: Rutmens   (23.08.2010 в 15:26)
 

как я понял, Вы хотите получить содержимое каталогов и подкаталогов.
Если так, то зачем вам надо препывать итерацию цикла?
уберите continue, проверяйте $file не на равенство, а на НЕ равенство, тогда вам не будет выводить в список " . " и " .. ".
Оформите всё это как функцию и проверяйте, является ли $file каталогом, если да, вызывайте функцию снова.
Что бы не было зацикливания, проверяйте условие while на FALSE.

  Ответить  
 
 автор: Rutmens   (23.08.2010 в 16:24)   письмо автору
 
   для: Slo_Nik   (23.08.2010 в 16:02)
 

Я тоже не полностью понял ваш ответ .. но обьясню немнго по точнее что я хочу .
Этот код вывод у меня папку .
sesion/ в ней лежат другие папки .
Вот мне нужно когда я перехожу чтобы выводились другие папки .
sesion / dd /
mm/
И так далии только sesion небыло взади .. только будет возрастатть URL адрес .

  Ответить  
 
 автор: Slo_Nik   (23.08.2010 в 17:18)   письмо автору
 
   для: Rutmens   (23.08.2010 в 16:24)
 

вот Ваш код

<?php 
$a 
getcwd(); 
$dir opendir ($a); 
while (
$file readdir($dir)) 

    if (
$file == '.' || $file == '..') continue; 
    print 
"<br><a href='$file'>".$file."</a>"

closedir ($dir);
?>

$a = getcwd(); - получаем полный путь к текущему каталогу

$dir = opendir ($a); - получаем дескриптор, позволяющий читать содержимое каталога $a

while ($file = readdir($dir)) - в цикле выводим его содержимое, функция readdir() возвращает FALSE если достигнут конец каталога. что бы прочитать весь каталог пишем так
while (($file = readdir($dir)) !== FALSE)
Теперь проверяем, что нам вернула readdir() и если это файл, то выводим его имя
if(is_file($a."/".$file)){
echo $file." - это файл!!!<br>";
}

Если же readdir() вернула нам каталог и он не равер текущему или родительскому,
if(is_dir($a."/".$file) && $file != '.' && $file != '..')
выводим имя каталога echo "<h5>".$file." - это каталог!!!</h5>";
а для того, что бы получить содержимое этого каталога, нам надо оформить это всё функцией и рекурсивно вызвать оную :)
всё вместе это выглядит так

<?php 
$a 
getcwd();    
/* объявляем функцию */
function full_dir_all($a){
  
$dir opendir ($a); 
  while ((
$file readdir($dir)) !== FALSE) {
    if(
is_file($a."/".$file)){
    echo 
$file." - это файл!!!<br>";
    }
    else if(
is_dir($a."/".$file) && $file != '.' && $file != '..'){
      echo 
"<h5>".$file." - это каталог!!!</h5>";
              
/* рекурсивно вызываем функцию */
      
full_dir_all($a."/".$file);
     }
    
  } 
 
closedir ($dir);
}
echo 
full_dir_all($a);
?>

  Ответить  
 
 автор: Rutmens   (27.08.2010 в 15:58)   письмо автору
 
   для: Slo_Nik   (23.08.2010 в 17:18)
 

Спасибо ... за подробное описание .. чуть погодя тестану .

  Ответить  
 
 автор: Rutmens   (27.08.2010 в 21:38)   письмо автору
 
   для: Rutmens   (27.08.2010 в 15:58)
 

Вообщем чуток не то ты мне дал ... мне нужно вот как тут .
http://satupload.biz/
Там подгружаеться папки из каталога ifles если перейти в папку Cards то соответственно будет выводить что в нутри папки кардс и какие файлы .
А у тебя в коде он просто за один присест всё выводит . А мне нужно как раз с переходами и чтобы ссылка передовалась через гет .

  Ответить  
 
 автор: Slo_Nik   (28.08.2010 в 00:38)   письмо автору
 
   для: Rutmens   (27.08.2010 в 21:38)
 

я Вам дал пример, а Ваша задача довести его до ума, по Вашим потребностям.

  Ответить  
 
 автор: Rutmens   (28.08.2010 в 01:05)   письмо автору
 
   для: Slo_Nik   (28.08.2010 в 00:38)
 

Ну всё равно спасибо ! буду ковырять . завтра тогда уже .

  Ответить  
 
 автор: Slo_Nik   (28.08.2010 в 01:29)   письмо автору
 
   для: Rutmens   (28.08.2010 в 01:05)
 

может моя подсказка Вам поможет, попробуйте использовать $_GET, а в нём передавать имя каталога...

  Ответить  
 
 автор: Rutmens   (28.08.2010 в 10:41)   письмо автору
 
   для: Slo_Nik   (28.08.2010 в 01:29)
 

Ну я так и хочу .. только я не пойму как .. чтобы юрл выростала .. если переходит в папку upload то юрл былбы такой www.site.ru/upload/ ну а если в папке есть еще папка TEST и перейти далее то получаеться юрл вот такого типа www.site.ru/upload/test/ и так далие .

  Ответить  
 
 автор: slo_nik   (28.08.2010 в 10:47)   письмо автору
 
   для: Rutmens   (28.08.2010 в 10:41)
 

я попробовал сделать, вроде получилось.
убрал getcwd()б заменил на "./", рекурсивный вызов функции и использовал $_SESSION.
$_SESSION это для того, что бы можно было наращивать URI

  Ответить  
 
 автор: Rutmens   (28.08.2010 в 12:21)   письмо автору
 
   для: slo_nik   (28.08.2010 в 10:47)
 

Во спасибо ! тебе !!!! самое главное понять куда копать .. ща буду мутить .

  Ответить  
 
 автор: Slo_Nik   (28.08.2010 в 12:25)   письмо автору
 
   для: Rutmens   (28.08.2010 в 12:21)
 

а что понимать? У Вас уже почти готовое решение, надо только убрать лишнее и оформить имя каталога как ссылку.
ну ещё надо $_SESSION запустить и передать требуемые параметры.
А функции передавать уже не один параметр, имя каталога, но и имя каталога занесённого в сессию, это для формирования строки запроса.

  Ответить  
 
 автор: Rutmens   (28.08.2010 в 12:41)   письмо автору
 
   для: Slo_Nik   (28.08.2010 в 12:25)
 

Да просто я не такой еще спец в ПХП , и ной раз сутки сиддишь и тупишь как правильно составить тот или иной код . А когда тебе помогут или найдешь решение вот тогда думаешь .. там решать то не чего было .

  Ответить  
 
 автор: Slo_Nik   (28.08.2010 в 12:53)   письмо автору
 
   для: Rutmens   (28.08.2010 в 12:41)
 

как придумаете свой вариант - покажите, сравним :), только ради интереса...

  Ответить  
 
 автор: Rutmens   (28.08.2010 в 13:07)   письмо автору
 
   для: Slo_Nik   (28.08.2010 в 12:53)
 

Ок . но чуть погодя я просто не дома .

  Ответить  
 
 автор: Rutmens   (28.08.2010 в 18:38)   письмо автору
 
   для: Rutmens   (28.08.2010 в 13:07)
 

Написал вот такой код .. но всё равно не айс .
<?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); 
?>

Я просто еще не догоняю как работает функция рекурсивно ..

  Ответить  
 
 автор: Slo_Nik   (28.08.2010 в 19:41)   письмо автору
 
   для: Rutmens   (28.08.2010 в 18:38)
 

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

<?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>
?>

Думаю, что не очень путано объяснил :)

  Ответить  
 
 автор: Rutmens   (28.08.2010 в 20:30)   письмо автору
 
   для: Slo_Nik   (28.08.2010 в 19:41)
 

Спасибо вам ! но чем больше я вкуриваю тем больше у меня вопросов ..
Если не трудно скиньте готовый код . Я думаю после такого доклада и примера всё встанет на свои места .

  Ответить  
 
 автор: Slo_Nik   (28.08.2010 в 20:37)   письмо автору
 
   для: Rutmens   (28.08.2010 в 20:30)
 

>но чем больше я вкуриваю тем больше у меня вопросов ..
например?

  Ответить  
 
 автор: Rutmens   (28.08.2010 в 20:54)   письмо автору
 
   для: Slo_Nik   (28.08.2010 в 20:37)
 

К примеру зачем в конце точка "."
$catalog = isset($_GET['catalog']) ? $_GET['catalog'] : ".";

  Ответить  
 
 автор: Slo_Nik   (28.08.2010 в 21:23)   письмо автору
 
   для: Rutmens   (28.08.2010 в 20:54)
 

>К примеру зачем в конце точка "."

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

Это не точка, а строка содержащая точку. Смысл е ней такой же, как и в проверке if($file != "." && $file != "..") , что означает текущий каталог.
Получается, что если не будет передано ни каких параметров через $_GET, то переменная $catalog будет содержать в себе имя текущего каталога, в котором расположен данный скрипт. Иначе переменной $catalog будет присвоено значение, которое передано в $_GET

  Ответить  
 
 автор: Rutmens   (28.08.2010 в 23:48)   письмо автору
 
   для: Slo_Nik   (28.08.2010 в 21:23)
 

Slo_Nik Спасибо за все .. вообщем я сдаюсь ..
P.S Меня уже этот код бесит не могу допетрить полность . . пойду другой форум штурмовать чтобы решили мне проблему .

  Ответить  
 
 автор: Slo_Nik   (28.08.2010 в 23:53)   письмо автору
 
   для: Rutmens   (28.08.2010 в 23:48)
 

Показывайте что сделали.

  Ответить  
 
 автор: Rutmens   (28.08.2010 в 23:58)   письмо автору
 
   для: Slo_Nik   (28.08.2010 в 23:53)
 

Вот что .. сразу скажу что я все переудалял по переставлял . вот что осталось .
$catalog = isset($_GET['catalog']) ? $_GET['catalog'] : ".";
function full_dir_all($catalog){  
  $dir = opendir ($catalog);   
  while (($file = readdir($dir)) !== FALSE) {  
     if(is_dir(!$file)){  
      echo "<a href=index.php?$catalog=$file/>".$file."<a><br>";  
      }  
  }   
 closedir ($dir);  
}  
echo full_dir_all($catalog); 

От этого кода не какого толку я сразу говорю .

  Ответить  
 
 автор: Slo_Nik   (29.08.2010 в 00:32)   письмо автору
 
   для: Rutmens   (28.08.2010 в 23:58)
 

Попробуйте объяснить сами себе вот эту строку if(is_dir(!$file)). В этой строке я не вижу смысла. Получается, что..... блин, даже сформулировать не могу :):). Вы пытаетесь проверить, является ли файл директорией, но в тот же момент файла нет.

В этой строке Вы сделали две ошибки echo "<a href=index.php?$catalog=$file/>".$file."<a><br>"
ссылка пишется так <a href=''>ссылка</a> и какому параметру Вы присваиваете значение $catalog ? Если Вам нужет элемент массива $_GET['catalog'], то надо делать так <a href='index.php?catalog=$file'>Имя каталога.</a>
В самом начале скрипта пишите error_reporting(E_ALL);, то есть выставляете уровень ошибок на полную.
Потом пишите print_r($_GET); это даст Вам возможность визуально контролировать, что находится в массиве $_GET.
После этого вставьте свой код, исправте ошибки и у Вас выведет список директорий в текущем каталоге.
Когда всё получится можно будет двигаться дальше. Этот код выводит список файлов, только надо исправить ошибки.

  Ответить  
 
 автор: Rutmens   (29.08.2010 в 01:13)   письмо автору
 
   для: Slo_Nik   (29.08.2010 в 00:32)
 

Slo_Nik я понимаю куда вы всё клоните , но вы поймите я только может 3 месяца сижу и прогерю на ПХП . и то работа и дела свои .. получаеться в свободное времмя я уделяю разработке своему сайту .
Но тут получаеться что проблему мою не рещают , а задают больше задачу и получаеться я сижу и рещаю . Я только недавно вкурил как работает функция и то не до конца . ООП вообще толком не знаю ..
Я к примеру разбираюсь не плохо в САТ-ТВ (Спут.ТВ) и к примеру заходит человек и спрашивает мне нужно настроить тарелку куда её крутить ?
Я - Скачайте программу Satellite Antenna Alignment .
Он - И что с ней делать ?
Я - Забейте координаты .
Он - Какие ?
Я - Ваши !
ОН - В смысле ? поточнее .
Я - Координаты широта , долгота .
ОН - А где их взять ?
Я - В интернете .
ОН - А где ?
Я - Где вы живетё ?
Он - Рязань ул. Пупова
Я - 53.07 , 43.01 (Это так пример )
Он - А куда вбивать ? не могу найти .
Можно так продолжать до бесконечности .. А было проше его зарание спросить где живет и выставить уже готовые координаты .
А там уже дело техники , компас в руки и крутить .. но это уже другой вопрос .
P.S Поймите мне нужен готовый ответ , а там по мере проблем я уже сам разберусь и если будут какие затруднения я спрошу .

  Ответить  
 
 автор: Slo_Nik   (29.08.2010 в 01:58)   письмо автору
 
   для: Rutmens   (29.08.2010 в 01:13)
 

>ООП вообще толком не знаю ..
Этот код ни какого отношения к ООП не имеет.

>Но тут получаеться что проблему мою не рещают

Насколько я понял, этот форум не для решения проблем, а для помощи в решении проблем. В основном тут общаются люди, которые хотят чему то научиться, научиться задавать вопросы и отвечать на них, научиться писать скрипты и разбираться в чужих скриптах и т.д. Решают проблемы на других сайтах, фриланс - сайтах, но естественно не за "спасибо", а за определённую плату.

>получаеться в свободное времмя я уделяю разработке своему сайту .

получить готовое решение и разработать свой сайт это две разные вещи. Вы хотите за неделю или даже меньше получить хороший сайт? Я в этом сомневаюсь.
Мне не жалко дать Вам готовое решение, дело в другом. Исходя из своего опыта я понял, что готовые решения это плохо. Вы просто берёте, копируете код и радуетесь, но до того момента, пока этот код перестаёт работать. А дальше что? Искать пипла, который Вам будет исправлять поломки или ошибки сайта, вместо того, что бы самому это сделать?

Ваш пример про тарелку... Ладно, пропустим.

Теперь по Вашей проблеме.
Я Вам привёл пример рекурсивного обхода каталога. Вы написали, что Вам это не подходит. В остальных сообщениях я Вам написал не только где этот скрипт живёт, не только дал координаты, но и показал, где их вбить. Вы не внимательно прочитали предыдущие сообщения и как результат разрушили весь код и наделали кучу ошибок(в последнем варианте), хотя до этого не было таких ошибок.
Решите для себя, Вы хотите понять как работает этот код, не вдаваясь в тонкости работы некоторых функций или просто хотите его скопировать и забыть о нём, пусть работает как есть?

  Ответить  
 
 автор: Rutmens   (29.08.2010 в 03:00)   письмо автору
 
   для: Slo_Nik   (29.08.2010 в 01:58)
 

>Этот код ни какого отношения к ООП не имеет.
Я знаю так как только начинаю изучать классы .
Еще пример с ЧПУ юрлом ... я помню 2 недели ковырялся .. но не кто не мог помочь . .. то одно косяк то другое .. в конце вышло то что нужно CSS подгружать по полному адресу .. а откуда узнал заглянул в двиг дле .. вот там это и увидел . Всё просто да ужаса . .
Мне нужно собрать пока рабочий сайт на локалке , пусть он ерундовый но по мере времмени будет улучшаться. Что-то новое узнаю .. добавлю исправлю .
У меня ща каша в голове .. я классы учу . .вы мне кинули рекурсию с функцией я давай её вкуривать как она работает . .оказываеться что это не то ..

  Ответить  
 
 автор: Slo_Nik   (29.08.2010 в 03:13)   письмо автору
 
   для: Rutmens   (29.08.2010 в 03:00)
 

>Я знаю так как только начинаю изучать классы .
А основы кто будет за Вас учить? Что бы не делать вот так(передача параметров методом $_GET)

<?php 
echo "<a href=index.php?$catalog=$file/>".$file."<a><br>";
?>

тем более, что показал Вам как оформить ссылку
сначала основы php, а уж потом ООП, если я не прав, то пусть меня поправят.

  Ответить  
 
 автор: Rutmens   (29.08.2010 в 12:06)   письмо автору
 
   для: Slo_Nik   (29.08.2010 в 03:13)
 

Вы хотите сказать что вы умный ? или вам уделино малом внимания ? и хотите чтобы к вам обращались и уделяли внимание ? вы мне про то что это к ООП не как не относиться .. сначала нужно знать основы и тд . У меня книга вот .
http://www.ozon.ru/context/detail/id/2400718/
Все я говорил спасибо это от чистой души .. что вы хоть дали понять куда плыть ....
А вот что накипело .
Ну и х*ли ты из себя умного делаешь ? да подавись этим кодом и гордись ! что ты его знаешь и не делись с*ка не скем ! Я тебе про то что мне нужно глушак поменять , а ты мне строение движка сказываешь .
P.S Извенясь накипело !

  Ответить  
 
 автор: Slo_Nik   (29.08.2010 в 12:23)   письмо автору
 
   для: Rutmens   (29.08.2010 в 12:06)
 

[поправлено модератором]

  Ответить  
 
 автор: Rutmens   (29.08.2010 в 12:31)   письмо автору
 
   для: Slo_Nik   (29.08.2010 в 12:23)
 

А вот вы к чему всё это ! так бы раньше сказали бы , а дурак думаю что мне голову марочите .
А почему накипело ... да потому что вы мне уже бред расказываете !! как ссылку строить ... у меня уже сайт готов .. нужно это дописать и подгрузку файлов организовать . Но с вами я мурыжу этот вопрос уже почти неделю с 23 числа ! ну и что это такое ??
И не надо мне давать ссылки знаю где находиться фрилас и всё остальное .
P.S Да , с русским я знаю туго у меня как и ПХП .

  Ответить  
 
 автор: Slo_Nik   (29.08.2010 в 13:21)   письмо автору
 
   для: Rutmens   (29.08.2010 в 12:31)
 

Тогда перестаньте хамить, и начните всё сначала, с первого своего сообщения, я рассказал уже всё. Вам мешают только Ваш гонор и не желание разобраться в Вашей же проблеме, которая кроме как Вам больше ни кому не нужна.
И повторю последний раз, готовый код я дал в своём четвёртом сообщении, этот код требует небольших изменений. Что и как изменить я тоже сказал и даже привёл кусочки кода, которые Вам надо соединить в одно целое. А Вы даже не попытались это сделать.

  Ответить  
 
 автор: Rutmens   (29.08.2010 в 13:46)   письмо автору
 
   для: Slo_Nik   (29.08.2010 в 13:21)
 

Да почемя я не понял .. да потому что я ссесии еще не изучал . Я даже не знаю как идёт построение .. а какую я привел книгу там она в самом конце , а ООП в середине .
Ладно без сообщений .. как что не получиться отпишусь и скину код что получилось и куда не едут лыжы .

  Ответить  
 
 автор: Slo_Nik   (29.08.2010 в 14:36)   письмо автору
 
   для: Rutmens   (29.08.2010 в 13:46)
 

Блин, Вы что роман читаете? а перелистать странцы ни как? или это не даст Вам понять ООП в полном объёме? Вы написали откровенную глупость...

  Ответить  
 
 автор: Rutmens   (29.08.2010 в 15:41)   письмо автору
 
   для: Slo_Nik   (29.08.2010 в 14:36)
 

Ну первое с чего вы взяли что меня зовут Роман ? перелестать можно но не желательно . Выже сами сказали что нужно знать основы вот мы теперь будем идти по порядку как построенная книга .. думаю что её написал не Вася с деревни .
P.S Да конечно прочитаем ща .. яж написал без коментов , как довкурю отпишусь и выложу код . Проблемы не только же в коде , а есть и помимо другие .. (я не прог.) а так повсеместные .

  Ответить  
 
 автор: Slo_Nik   (29.08.2010 в 16:48)   письмо автору
 
   для: Rutmens   (29.08.2010 в 15:41)
 

Ну насмешили, так насмешили... :)
роман это не только имя человека, но и литературное произведение...

  Ответить  
 
 автор: Rutmens   (29.08.2010 в 16:57)   письмо автору
 
   для: Slo_Nik   (29.08.2010 в 16:48)
 

Хахаха .. да вы меня вообще запутали . ёеперный театр .
У меня есть в загашнике пузырь .. я думаю точно не чего делать уже не буду .. хахаха .

  Ответить  
 
 автор: Rutmens   (29.08.2010 в 17:17)   письмо автору
 
   для: Rutmens   (29.08.2010 в 16:57)
 

Смотрите если будет выводиться все через сессию .. но если я задам ЮРЛ к примеру папку .
papka/test/
То этот скрипт сработает ? какие папки в папке TEST ?
Я так понял он будет записывать проход от начала в сесию ..
к примеру первую papka далее test а вот тут уже все он должен вывести что в папке тест .

  Ответить  
 
 автор: Rutmens   (29.08.2010 в 20:30)   письмо автору
 
   для: Rutmens   (29.08.2010 в 17:17)
 

Написал вот что ..
$dir = opendir('.');
$catalog = isset($_GET['file']) ? $_GET['file'] : ".";
$_SESSION['cat_next'] = $catalog; 
$ses_sion = isset($_SESSION['cat_next']) ? $_SESSION['cat_next']."/" : "";
while (($file = readdir($dir)) !== false ) {
     if ($file == '.' || $file == '..') continue;
     if (is_dir ($file))
    echo "<a href=index.php?file=$file>".$file."</a><br>"; 
}

closedir ($dir);

Дальше не знаю куда плыть .. ссылка срабатывает точнее переход .

  Ответить  
 
 автор: Slo_Nik   (30.08.2010 в 12:23)   письмо автору
 
   для: Rutmens   (29.08.2010 в 20:30)
 

>Смотрите если будет выводиться все через сессию .. но если я задам ЮРЛ к примеру папку .
>papka/test/
Через сессию не выводится, в сессии хранятся данные.
>То этот скрипт сработает ? какие папки в папке TEST ?
Вы вообще то пробовали запустить свой скрипт?
>Я так понял он будет записывать проход от начала в сесию ..
>к примеру первую papka далее test а вот тут уже все он должен вывести что в папке тест .
В Вашем случае скрипт ни куда переходить не будет, так как функции opendir() Вы передали текущий каталог и он у Вас не меняется. Подумайте, зачем Вы создавали переменную $catalog ? Зачем написали вот эту строку $catalog = isset($_GET['file']) ? $_GET['file'] : "."; ?
А эта строка означает, что если существует $_GET['file'], то переменной $catalog присвоить значение $_GET['file'], а если $_GET['file'] не существуе, то переменной $catalog присвоить значение " . ", что означает исходный каталог, там где расположен сам скрипт. Пока Вы не нажмёте на ссылку, переменная $catalog будет иметь значение " . "
Потом Вы инициализируете переменную $ses_sion и .... ни где её не используете в Вашем коде!!! Так зачем Вы её создали? Вернее не создали, а не думая скопировали! Вы даже не читали предыдущие сообщения(а там есть как и где использовать переменную $ses_sion) и не собираетесь думать. Я за Вас должен думать?
Так вот, сначала надо инициализировать переменные, а уж потом начинать где то, как то их использовать.
Теперь вот это if ($file == '.' || $file == '..') continue;. continue здесь лишнее, а лишнее надо убрать, а если убрать, то зачем условие if ($file == '.' || $file == '..'); ? Да, условие Вы задали, но дальше что? какой код должен выполняться при выполнении этого условия? Зачем Вы в условии применили логическое "или" - ||? Это не вызовет ошибки, но код будет не совсем точно выводить список файлов и каталогов.
И самое главное, где Вы выставили уровень ошибок через error_reporting()?
Вот ещё одна подсказка, причём последняя. Дальше думайте сами, я уже всё расписал и не раз. Возвращаетесь к четвёртому сверху сообщению и построчно, проговаривая вслух каждую строчку пишите код. Вимательно смотрите и внимательно делайте.

<?php
/* выставляете уровень ошибок */
error_reporting(E_ALL);
/* инициализируем переменные */
$catalog = isset($_GET['file']) ? $_GET['file'] : ".";
$_SESSION['cat_next'] = $catalog;
$ses_sion = isset($_SESSION['cat_next']) ? $_SESSION['cat_next']."/" "";
/* это для визуального контроля, что находится в переменной $catalog */
/* вообще полезно это делать */
echo $catalog." - session<br>";
/* а вот теперь начинаете получать интересующую Вас информацию */
$dir opendir ($catalog);
  
//здесь остальной код, всё Вы найдёте выше по теме,
 //начиная от четвёртого сверху сообщения 
?>

Всё это без объявления и вызова функции, если хотите, то сделайте всё в виде функции.
Да, в этом скрипте надо ещё запустить сессии, как это сделать есть у Вас в книге, пролистайте и почитайте, ООП ни куда не сбежит :)

  Ответить  
 
 автор: Rutmens   (29.08.2010 в 01:32)   письмо автору
 
   для: Slo_Nik   (29.08.2010 в 00:32)
 

Вы мне можете готовый ответ написать ? если да то да .. если нет то нет буду на другом форуме искать ответ .

  Ответить  
 
 автор: predator   (02.09.2010 в 13:13)   письмо автору
 
   для: Slo_Nik   (28.08.2010 в 19:41)
 

Спасибо за скрипт давно думал о написании подобного
все работает как надо НО не доконца понял значиние этих строк


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


и

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


был бы признателен за ссылку или в идеале за разяснение

  Ответить  
 
 автор: predator   (02.09.2010 в 15:07)   письмо автору
 
   для: predator   (02.09.2010 в 13:13)
 

немного уточню
я хочу сделать модулю аналогичный "speedbar" (модуль который показывает текущее место положение посетителя на сайте)

[url]2010[/url] >[url] 05[/url] >[url] 01[/url]

  Ответить  
 
 автор: Slo_Nik   (02.09.2010 в 15:13)   письмо автору
 
   для: predator   (02.09.2010 в 13:13)
 


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

это значит, что если Вы нажали на имя/ссылку каталога, то этот параметр(имя каталога) присваивается переменной $catalog, а по умолчанию значение $catalog == ".", что в моём понимании означает текущий каталог, в котором расположен сам скрипт.

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

переменная $ses_sion для того, что бы можно было переходить из одного каталога в следующий, уровнем ниже. В каком месте кода используется эта переменная, Вы можете посмотреть в сообщениях выше по теме. А что бы было более наглядно, то после инициализации переменных сделайте вывод echo $catalog." - catalog<br>";, при переходе в другие подкаталоги Вы увидите как будет изменяться значение этой переменной.

скрипт расположен в каталоге first, переменная $catalog содержит  "."
переходим в каталог second, который расположен в каталоге first , переменная $catalog содержит  "./second"
переходим в каталог third, который расположен в каталоге second , переменная $catalog содержит  "./second/third"
и т.д.

Всё это достигается тем, что имя каталога сохраняется в сессии.
Ну а ссылки ни какой не существует, всё это результат переделки кода, который есть в книге М.Кузнецова и И.Симдянова в главе 13 посвящённой работе с файлами и каталогами.
код работает, но что бы его где то использовать требуется доработка.

  Ответить  
 
 автор: predator   (02.09.2010 в 15:29)   письмо автору
 
   для: Slo_Nik   (02.09.2010 в 15:13)
 

Спасибо сейчас попробую разобратся.
а пока: внутри функции function full_dir_all($a) переменная $ses_sion ничего не возвращяет (т.е. пусто) методом научного тыка зделал вот так, но понимаю что это не верно

<?php
$catalog 
= isset($_GET['catalog']) ? $_GET['catalog'] : ".";
$_SESSION['cat_next'] = $catalog
$ses_sion = isset($_SESSION['cat_next']) ? $_SESSION['cat_next']."/" "";
$a $catalog;
/* объявляем функцию */ 

function full_dir_all($a) { 
[
b]$ses_sion = isset($_SESSION['cat_next']) ? $_SESSION['cat_next']."/" "";[/b]
  
$dir opendir ($a); 
  
  while ((
$file readdir($dir)) !== FALSE) { 
    
    if(
is_file($a."/".$file)){ 
    echo 
"<a href='".$ses_sion.$file."'>".$file."</a> - это файл<br></td></tr>"
    } 
    else if(
is_dir($a."/".$file) && $file != '.' && $file != '..'){ 
 
  
//  echo "<a href='?catalog=".$file."'>".$file."</a> (каталог)</h4> - это каталог!!!<br></h5>"; 
  
echo "<a href='index.php?catalog=".$ses_sion.$file."'>".$file."</a> (каталог)</h4></td></tr><br>";
              
/* рекурсивно вызываем функцию */ 
    //  full_dir_all($a."/".$file); 
     

  }  
 
closedir ($dir); 

echo 
full_dir_all($a); 
?>

  Ответить  
 
 автор: Slo_Nik   (02.09.2010 в 16:21)   письмо автору
 
   для: predator   (02.09.2010 в 15:29)
 

самой первой строкой должно быть error_reporting(E_ALL);
Впишите и посмотрите, что не так.
Зачем $a?

  Ответить  
 
 автор: predator   (02.09.2010 в 16:49)   письмо автору
 
   для: Slo_Nik   (02.09.2010 в 16:21)
 

убрал $a вместо нее сразу $catalog.
С включенным "error_reporting(E_ALL)" писало
Notice: Undefined variable: ses_sion in ........................... но сейчас разберался с кодом, что-то менял ошибка исчезла, видимо гдето ошибся

  Ответить  
 
 автор: predator   (02.09.2010 в 17:05)   письмо автору
 
   для: predator   (02.09.2010 в 16:49)
 

нашел
ели я убираю строку
$ses_sion = isset($_SESSION['cat_next']) ? $_SESSION['cat_next']."/" : "";

т.е. я присвоил значение переменной $ses_sion дважды... вне функции а второй раз уже внутри функции
если внутри функции значение не предать то получается
Notice: Undefined variable: ses_sion in (насколько я понял по поведению и ошибке внутри функции данная переменная не содержит ничего)
надеюсь не сильно вас запутал )

  Ответить  
 
 автор: Slo_Nik   (02.09.2010 в 17:18)   письмо автору
 
   для: predator   (02.09.2010 в 17:05)
 

ну так передайте в функцию два параметра function full_dir_all($сatalog, $ses_sion)
хотя функцией удобно оформлять когда нужно вызвать функцию рекурсивно, а так можно и без функции обойтись.
$ses_sion не содержит ни чего, пока Вы находитесь в каталоге по умолчанию, если переходите на уровень ниже, то тогда переменная получает значение равное имени каталога в который Вы перешли.

p.s. Вы не запутали, просто я уже запарился от этой темы после общения с Rutmens

  Ответить  
 
 автор: Rutmens   (02.09.2010 в 22:48)   письмо автору
 
   для: Slo_Nik   (02.09.2010 в 17:18)
 

Slo_Nik Вот и я к тможе .. что эта тема меня тоже достала .. ладно буду пробывать чуть пойже увы дела.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования