За последние 24 часа нас посетили 179479 программистов и 3040 роботов. Сейчас ищут 1576 программистов ...

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

Тема в разделе "PHP для новичков", создана пользователем Romik_Maden, 31 янв 2010.

  1. Romik_Maden

    Romik_Maden Активный пользователь

    С нами с:
    31 янв 2010
    Сообщения:
    25
    Симпатии:
    0
    Адрес:
    Украина, Львов
    Как мне почитать содержимое каталога скриптом из другого каталога.
    Например: есть в корне два каталога "1" и "2" в обоих есть еще и другие. Как мне прочитать содержимое /1/5/i/ скриптом из /2/9/t/y/read.php. Скрипт почемуто не видит содержимого етого каталога. Или пишет что нет такого каталога или файла... скрипт такой:
    PHP:
    1.  
    2. $d = opendir("C:/Program Files/Apache Group/Apache2/htdocs/downloads/");
    3. $res = array();
    4. while($f = readdir($d))
    5. {
    6. if($f != "." && $f !== ".." && is_dir($f))
    7. $res[] = $f;
    8. }
    9. sort($res);
    10. foreach($res as $f=>$ff)
    11. echo "<img src=\"/logo/folder.gif\" alt=\"folder\"><a href=".$ff."> ".$ss[$f]."</a><br/>";
    12. echo "<br/>";
    13. print 'Папок - ';
    14. echo count($res);
    15.  
    Выдает ошибку что нету такого каталога, посути проблема в указании пути.
    Тот же трабл когда в 5-ю директорию инклудишь файл с корня сайта!
     
  2. Phantik

    Phantik Активный пользователь

    С нами с:
    2 июл 2009
    Сообщения:
    163
    Симпатии:
    0
    На хосте видимо register_globals=On
    а локально register_globals=Off
     
  3. Romik_Maden

    Romik_Maden Активный пользователь

    С нами с:
    31 янв 2010
    Сообщения:
    25
    Симпатии:
    0
    Адрес:
    Украина, Львов
    Phantik, пробовал не катит, еще варианты?!
     
  4. Romik_Maden

    Romik_Maden Активный пользователь

    С нами с:
    31 янв 2010
    Сообщения:
    25
    Симпатии:
    0
    Адрес:
    Украина, Львов
    Phantik, сори, вроди заработало, забыл сервер перезапустить ;)

    А по второй части вопроса есть предложения?
     
  5. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    glob
    scandir
     
  6. Romik_Maden

    Romik_Maden Активный пользователь

    С нами с:
    31 янв 2010
    Сообщения:
    25
    Симпатии:
    0
    Адрес:
    Украина, Львов
    Simpliest спасибо, ща попробую
     
  7. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    пути только правильно указывай.
     
  8. Romik_Maden

    Romik_Maden Активный пользователь

    С нами с:
    31 янв 2010
    Сообщения:
    25
    Симпатии:
    0
    Адрес:
    Украина, Львов
    так какой указывать то? Абсолют или относительный?
     
  9. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    безразницы.
    Главное правильно его указать :)

    текущая папка скрипта

    D:/Work/crm/public

    Абсолютный путь D:/Work/crm/application
    относительный путь ../application
     
  10. Romik_Maden

    Romik_Maden Активный пользователь

    С нами с:
    31 янв 2010
    Сообщения:
    25
    Симпатии:
    0
    Адрес:
    Украина, Львов
    Тоесть что C:/Program Files/Apache Group/Apache2/htdocs/ru что просто /ru/ без разницы?
     
  11. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
  12. SPOG

    SPOG Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    27
    Симпатии:
    0
    Адрес:
    Россия, 63
    1. проверь вывод названия папки ($ss[$f]), как я понимаю там должна быть просто $f:

    PHP:
    1. foreach($res as $f=>$ff)
    2. echo "<img src=\"/logo/folder.gif\" alt=\"folder\"><a href=".$ff."> ".$f."</a><br/>";
    2. для чего используешь array_merge(...)? для подсчета количества элементов массива достаточно count($res).
     
  13. Romik_Maden

    Romik_Maden Активный пользователь

    С нами с:
    31 янв 2010
    Сообщения:
    25
    Симпатии:
    0
    Адрес:
    Украина, Львов
    SPOG
    да тут не в етом проблема, проблема в правильности пути.

    Уже столько всякого почитал хоть убей не работает!

    Вот такой код
    PHP:
    1.  
    2. $ath=$_SERVER['DOCUMENT_ROOT'];
    3. echo "<br/>".$_SERVER['DOCUMENT_ROOT'] ."<br/>";
    4.  
    Возвращает мне C:/Program Files/Apache Group/Apache2/htdocs
    А когда ставлю етот путь сюда:
    PHP:
    1.  
    2. $d = opendir("C:/Program Files/Apache Group/Apache2/htdocs/downloads/");
    3. $res = array();
    4. while($f = readdir($d))
    5. {
    6. if($f != "." && $f !== ".." && is_dir($f))
    7. $res[] = $f;
    8. }
    9. closedir($d);
    10. sort($res);
    11. foreach($res as $f=>$ff)
    12. echo "<img src=\"/logo/folder.gif\" alt=\"folder\"><a href=".$ff."> ".$ss[$f]."</a><br/>";
    13. echo "<br/>";
    14. print 'Папок - ';
    15. echo count(array_merge($res));[/i]
    16.  
    Всеравно возврашает ошибку! "Warning: opendir(C:/Program Files/Apache Group/Apache2/htdocs/downoads/) [function.opendir]: failed to open dir: No such file or directory in C:\Program Files\Apache Group\Apache2\htdocs\ru\downloads\my1.php on line 9"
    Шош ето такое то! Может у меня чтото не так в конфигах забито?
     
  14. SPOG

    SPOG Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    27
    Симпатии:
    0
    Адрес:
    Россия, 63
    тут все проще чем кажется, функция is_dir($f)... ты ей передаешь только название файла/папки, без путя к нему/ней, как следствие функция ищет этот файл/папку в том же каталоге где и лежит скрипт...


    PHP:
    1.  
    2. <?php
    3. $cat = "downloads/"; // указывай со слешем на конце, лучше всего от корня сайта
    4. $d = opendir(cat);
    5. $res = array();
    6. while($f = readdir($d))
    7. {
    8. if($f != "." && $f !== ".." && is_dir($cat.$f))
    9. $res[] = $f;
    10. }
    11. closedir($d);
    12. sort($res);
    13. foreach($res as $f=>$ff)
    14. echo "<img src=\"/logo/folder.gif\" alt=\"folder\"><a href=".$ff."> ".$f."</a><br/>";
    15. echo "<br/>";
    16. print 'Папок - ';
    17. echo count($res);
    18. ?>
     
  15. Romik_Maden

    Romik_Maden Активный пользователь

    С нами с:
    31 янв 2010
    Сообщения:
    25
    Симпатии:
    0
    Адрес:
    Украина, Львов
    SPOG

    не в етом трабл, скрипт просто не видит нужного каталога, если запустит его в нужном каталоге то все читает, пишет правильные пути и названия,Ю ну и считает количество, а если из другого каталога пишет ошибку!

    ето уже пробовалось, результат - Warning: opendir
     
  16. Romik_Maden

    Romik_Maden Активный пользователь

    С нами с:
    31 янв 2010
    Сообщения:
    25
    Симпатии:
    0
    Адрес:
    Украина, Львов
    SPOG

    А нука...

    у тебя тут ошибка
    надо
    PHP:
    1.  $d = opendir($cat);
    ну и путь от корня диска
    PHP:
    1. $cat = "C:/Program Files/Apache Group/Apache2/htdocs/downloads/"; // указывай со слешем на конце, лучше всего от корня сайта
    Так работает, всем Спасибо!
     
  17. SPOG

    SPOG Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    27
    Симпатии:
    0
    Адрес:
    Россия, 63
    1. без is_dir($cat.$f) не будет правильно работать)
    2. если у тебя скрипт лежит в самой 'downloads/', то и нужно указывать папку относительно него... ('C:\Program Files\Apache Group\Apache2\htdocs\ru\downloads\my1.php')

    $cat = './'; // выведет директории в этой же папке
    $cat = '../'; // директории на уровень выше (т.е. C:\Program Files\Apache Group\Apache2\htdocs\ru\)
    $cat = '../somethindir/'; // и т.д.
     
  18. Romik_Maden

    Romik_Maden Активный пользователь

    С нами с:
    31 янв 2010
    Сообщения:
    25
    Симпатии:
    0
    Адрес:
    Украина, Львов
  19. Romik_Maden

    Romik_Maden Активный пользователь

    С нами с:
    31 янв 2010
    Сообщения:
    25
    Симпатии:
    0
    Адрес:
    Украина, Львов
    Фух...
    Разобрал:
    PHP:
    1.  
    2. <?php
    3. include ("header.tpl");
    4. $ss = array("Картинки","JAVA","Мелодии","Видео");
    5.  $root = $_SERVER['DOCUMENT_ROOT'];
    6.  $kat = "/downloads/";
    7.  $cat = "$root$kat";
    8.  $d = opendir($cat);
    9.  $res = array();
    10.  while($f = readdir($d))
    11.  {
    12.  if($f != "." && $f !== ".." && is_dir($cat.$f))
    13.  $res[] = $f;
    14.  }
    15.  closedir($d);
    16.  sort($res);
    17.  foreach($res as $f=>$ff)
    18.  echo "<img src=\"/logo/folder.gif\" alt=\"folder\"><a href=".$kat."".$ff."> ".$ss[$f]."</a><br/>";
    19.  echo "<br/>";
    20.  print 'Папок - ';
    21.  echo count($res);
    22.  include ("baners.tpl");
    23. include ("footer.tpl");
    24.  ?>
    25.  
    Ошибка была в строке 17:
    Не правильно:
    echo "<img src=\"/logo/folder.gif\" alt=\"folder\"><a href=".$ff."> ".$ss[$f]."</a><br/>";
    Правильно:
    echo "<img src=\"/logo/folder.gif\" alt=\"folder\"><a href=".$kat."".$ff."> ".$ss[$f]."</a><br/>";

    тут $ff означает только название папки, потому если не поставить перед ним относительное название каталога от корня сайта (в моем случае переменная $kat задает название каталога в корне сайта), скрипт будет возвращать не правильную ссылку на папку\, как будто все ети папки лежат в папке со скриптом.

    Еще раз всем спасибо!


    И еще вопрос ета часть скрипта ето номально?
    PHP:
    1. $root = $_SERVER['DOCUMENT_ROOT'];
    2.  $kat = "/downloads/";
    3.  $cat = "$root$kat";
    4.  $d = opendir($cat);
    Я так сделал чтоб не изменять все пути когда закину скрипты на хостинг (ведь там путь будет совсем другой), посути ето возвращает абсолютный путь к файлу или каталогу...

    Кстати таким способом можно задавать путь к файлу для функции include()
    Например:
    PHP:
    1. <?php
    2. $root = $_SERVER['DOCUMENT_ROOT'];
    3. include ("$root/header.tpl");
    4. ?>
    Кстати такой код решает проблему выяснения абсолютного пути, просто изменяешь имя папки/файла от корня сайта! 8)
     
  20. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    В некоторых случаях(серверах) его просто нет (правильного корня сайта в $_SERVER), но думаю если ты с этим столкнешься - ты справишься :)