как вывести списком файлы из подкаталога?

Тема в разделе "Как сделать...", создана пользователем duncan, 29 окт 2012.

  1. duncan

    duncan батяр з личакова

    Регистр.:
    10 апр 2007
    Сообщения:
    1.596
    Симпатии:
    441
    PHP:
    $dir "/images";
    $files scandir($dir);
    foreach (
    $files as $var){
        if (
    is_file($var)){
       
            echo 
    "<div><img src=\"$var\" class=\"projectSlides\" alt=\"\"/></div>";
       
        }
    выведет файлы во вложенной папке

    но если есть корневая директоря www
    в ней две папки images и scripts
    в папке scripts лежит файл php
    какой код должен быть, чтобы вывело картинки из папки images?
     
  2. SolutionFix

    SolutionFix 17 лет програмлю ;)

    Регистр.:
    20 ноя 2006
    Сообщения:
    272
    Симпатии:
    318
    PHP:
    $dir "../images";
     
  3. duncan

    duncan батяр з личакова

    Регистр.:
    10 апр 2007
    Сообщения:
    1.596
    Симпатии:
    441
    на виндовсе пустая страница
     
  4. SolutionFix

    SolutionFix 17 лет програмлю ;)

    Регистр.:
    20 ноя 2006
    Сообщения:
    272
    Симпатии:
    318
    Я не понял что ты хочешь не просто "ткнуть в ошибку", а так сказать полностью сделать :)
    PHP:
    <?php
        $dir 
    "../images";
        
    $files scandir($dir);
        foreach (
    $files as $var){
            if (
    is_file("../images/$var")){
                echo 
    "<div><img src=\"../images/$var\" class=\"projectSlides\" alt=\"\"/></div>";
            }
        }
    ?>
    Вот работающий пример, в каталоге puper два подкаталога - images и script, в подкаталоге script 1 файл, содержимое его сверху
    http://solutionfix.org/puper/script/script.php
     
  5. SolutionFix

    SolutionFix 17 лет програмлю ;)

    Регистр.:
    20 ноя 2006
    Сообщения:
    272
    Симпатии:
    318
    Кстати правильней с точки зрения безопасности (выводить только файлы картинок) и изящней (imho) было бы
    PHP:
        foreach(glob('../images/*.{jpg,gif,png}'GLOB_BRACE) as $file) {
            echo 
    "<div><img src=\"$file\" class=\"projectSlides\" alt=\"\"/></div>";
        }
    Посмотреть можно там же, файл script2.php
     
    пупер нравится это.
  6. duncan

    duncan батяр з личакова

    Регистр.:
    10 апр 2007
    Сообщения:
    1.596
    Симпатии:
    441
    уважуха, все работает!
    другой вопрос -- если папка со скриптом лежит еще "глубже", то как вывести?
    например:
    [корень сайта]/folder1/folder2/index.php
    [корень сайта]/images/
     
  7. SolutionFix

    SolutionFix 17 лет програмлю ;)

    Регистр.:
    20 ноя 2006
    Сообщения:
    272
    Симпатии:
    318
    Ну соответственно и количество ../ ставь сколько там надо
    Можешь считать что "../" - это дословно "полняться на каталог выше"
    Изначально скрипт в каталоге folder2. Один раз ../ - мы в folder1. Еще один раз - мы в [корень сайта]. И теперь спускаемся в images
    То есть в приведенном тобой примере будет glob('../../images/
     
  8. duncan

    duncan батяр з личакова

    Регистр.:
    10 апр 2007
    Сообщения:
    1.596
    Симпатии:
    441
    а если местонахождение файла со скриптом точно неизвестно?
     
  9. SolutionFix

    SolutionFix 17 лет програмлю ;)

    Регистр.:
    20 ноя 2006
    Сообщения:
    272
    Симпатии:
    318
    Ну если точно известно местонахождения картинок - то указать абсолютный путь (начинается со слэша, например '/var/www....'), а при выводе преобразовывать его к url, зная в каком каталоге корень сайта.
    Но давай я предположу: у тебя твой скрипт инклюдиться, причем ты еще 100% не решил куда :) . Тогда решать в зависимости от задачи, сильно неконкретный вопрос. Могу только обратить внимание на следующие моменты.
    1) Быть может в главном скрипте можно сделать константу что-то типа WWW_ROOT, чтобы относительно нее заинклюденные скрипты знали где другие данные
    2) Быть может стоит обратить внимание на содержимое $_SERVER['SCRIPT_FILENAME'], $_SERVER['SCRIPT_NAME'], константу __FILE__, функции вычисления абсолютного пути из относительного и наоборот (basename(), realpath())
    3) Быть может стоит посмотреть в $_SERVER['REQUEST_URI'] какой именно вызван скрипт, и относительно него плясать

    Но "в общем" задача решается очень туго. То есть это получается надо скрипту сказать "найди где-то в файловой системе на сервере каталог с картинками, хз где, и преобразуй их в ссылки так, чтобы апач когда их запросят отдал именно эти картинки" :)
     
    latteo и пупер нравится это.