Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] listowanie katalogu na dysku
Forum PHP.pl > Forum > PHP
flashion
witam serdecznie,
chciałem się zapytać, czy jest możliwość napisania takiego kodu w php, aby wyświetlał nazwy plików znajdujących się w danym katalogu na dysku twardym?

pozdrawiam
darko
Funkcje: opendir, readdir, closedir Przykład nawet w manualu:
  1. $dir = "/etc/php5/";
  2.  
  3. // Open a known directory, and proceed to read its contents
  4. if (is_dir($dir)) {
  5. if ($dh = opendir($dir)) {
  6. while (($file = readdir($dh)) !== false) {
  7. echo "filename: $file : filetype: " . filetype($dir . $file) . "\n";
  8. }
  9. closedir($dh);
  10. }
  11. }

za: http://php.net/manual/en/function.opendir.php
flashion
coś mi nie śmiga, może źle wpisuję ścieżkę?

Kod
<?php
$dir = "file:///c:/totalcmd/";

// Open a known directory, and proceed to read its contents
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            echo "filename: $file : filetype: " . filetype($dir . $file) . "\n";
        }
        closedir($dh);
    }
}
?>
darko
Nie pamiętam jak to było na windzie, spróbuj bez tego: file:///
a jak nie pomoże to poodwracaj slashe
a jak to nie pomoże to zostaw to: file:/// i poodwracaj slashe smile.gif dry.gif
Burned
Ludzie, przestańcie się męczyć z tym opendir itd
Do tego służy funkcja glob
flashion
Kod
<?php
foreach (glob("file:///c:/totalcmd/") as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
}
?>


zwraca
Warning: Invalid argument supplied for foreach()...
i nic poza tym
Kruq
  1. $dir="c:/totalcmd/";
  2. echo $dir;
  3. $filesArray=glob($dir."*");
  4.  
  5. $line.=print_r($filesArray, true);
  6. $line.="<hr>";
  7.  
  8. for($i=0;$i<count($filesArray);$i++) {
  9. $line.=$filesArray[$i]."<br/>";
  10. }
  11.  
  12. echo $line;


Spróbuj tak , przerobiony przykład z manuala ...
Burned
A bez file"// ?
flashion
Kod
<?php
$dir=$_SERVER['cokolwiek wpisze'];
    echo $dir;
    $filesArray=glob($dir."*");

    $line.=print_r($filesArray, true);
    $line.="<hr>";

    for($i=0;$i<count($filesArray);$i++) {
        $line.=$filesArray[$i]."<br/>";
    }

    echo $line;
?>

otrzymuje liste plikow katalogu ze skryptem
@burned: próbowałem tak i tak
Kruq
Cytat(flashion @ 15.01.2010, 20:36:19 ) *
Kod
<?php
$dir=$_SERVER['cokolwiek wpisze'];


zamiast tego wprowadz swoaj sciezke jaka chcesz .. poprawilem ... swoj post

Sprawdź jeszcze raz mój poprzedni post ...

U mnie działa wszystko ładnie .. katalogi i pliki ładnie wyświetlane ...
jak chcesz same pliki to w lini 3 daj *.* zamiast samej *
flashion
efekt:
http://fesol.unl.pl/shark/cvvv.php

załóż sobie taki folder na dysku i zobacz czy idzie.
Kruq
  1. $dir = ("c:/totalcmd/");
  2.  
  3. $filesArray=glob($dir."*.*");
  4.  
  5. for($i=0;$i<count($filesArray);$i++) {
  6.  
  7. $line=$filesArray[$i]."<br/>";
  8.  
  9. echo $line;
  10. }


Teraz mi wszystko ładnie działa z tym katalogiem co chcesz.

Oczywiście zakładam , że masz tam jakieś pliki, foldery c, cokolwiek w c:/totalcmd

  1. $dir = ("c:/totalcmd/");
  2. //echo $dir;
  3. $filesArray=glob($dir."*");
  4.  
  5. if (empty ($filesArray)){
  6. echo "Pusty katalog";
  7. } else {
  8. for($i=0;$i<count($filesArray);$i++) {
  9. $line=$filesArray[$i]."<br/>";
  10. echo $line;
  11. }
  12. }

A tutaj masz z ifem na pusty katalog..powinno teraz być ok, pomogłem ?
flashion
niestety nie, powoli sam tracę cierpliwość do tego ;/
Kod
<?php    $dir = ("c:/totalcmd/");
    //echo $dir;
    $filesArray=glob($dir."*.*");

    if (empty ($filesArray)){
        echo "Pusty katalog";
    }  else {
        for($i=0;$i<count($filesArray);$i++) {
            $line=$filesArray[$i]."<br/>";
            echo $line;
        }
    }?>


taki kod wrzuciłem do lista.php i wysłałem na serwer.
odpalam i... "Pusty katalog"
( http://sab.cba.pl/lista.php ) <- działa tobie?

próbowałem z file, slashami, innym serwerem, innym folderem, inna przegladarka.
co mogę robić źle? dodam, ze nie kodze w php na co dzien, wiec moze to byc cos banalnego.

pozdrawiam
darko
Cytat(flashion @ 16.01.2010, 02:20:22 ) *
niestety nie, powoli sam tracę cierpliwość do tego ;/
taki kod wrzuciłem do lista.php i wysłałem na serwer.
odpalam i... "Pusty katalog"

To jeszcze się z tym męczysz? dry.gif Skoro wysłałeś na serwer, to dlaczego podajesz ścieżkę: c:/totalcmd/ questionmark.gif
flashion
a jak być powinno?
darko
spróbuj:
$dir = "/";
albo
$dir = $_SERVER["DOCUMENT_ROOT"];

Przede wszystkim usuń te nawiasy ( )
flashion
skąd serwer będzie wiedział, o jaki mi folder chodzi?
chyba sie nie rozumiemy: chcę, aby po wejściu na http://sab.cba.pl/lista.php przez przeglądarkę, skrypt zwrócił mi listę plików z podanego folderu na moim dysku twardym. jest taka możliwość i jeśli tak, to jak to zrobić?
Burned
PHP jest server side - co za tym idzie nie ma dostępu do maszyny klienta. Wszystkie operacje na plikach w php wykonujesz na komputerze na którym jest skrypt.
Nie da się zrobić tak jak to sobie wymyśliłeś w PHP. Ogólnie ciężko mi wyobrazić, żeby jakikolwiek skrypt grzebał w systemie plików użytkownika tak po prostu. Po co Ci lista plików na komputerze klienta - co chcesz zrobić? Może jest lepszy sposób na to.
darko
To nawet ze względów bezpieczeństwa nie jest łatwe/do napisania, chciałbyś, żeby, przeglądając strony w necie, ktoś przeglądał, co masz na dysku twardym? Ja nie. Czyli podsumowując: skrypt jeśli nie będzie zawierał błędów, wyświetli w podanej lokalizacji listę plików znajdujących się na serwerze, a nie u Ciebie na dysku twardym. Chyba że odpalisz sobie na localhost winksmiley.jpg to co innego.
flashion
tak właśnie myślałem, ale poprzednimi postami rozbudziliście moją nadzieję. winksmiley.jpg
piszę flasha (osadzonego w html), aplikacja ma za zadanie pobrać z dysku pliki txt, odczytać ich zawartość i na podstawie ich porozsyłać żądania do zewn. skryptów (nie moich) i wyświetlić wyniki. problem tkwi w tym, że mimo to użytkownik podaje ścieżkę do folderu z tymi plikami, mają one różne nazwy. Chciałem je wyświetlić we flashu i dać userowi wybór, którego użyć.
poza tym wybrany plik musi zostać skopiowany do jakiegoś innego folderu, ponieważ jest używany jednocześnie przez inną aplikację, a flash wyrzuca błędy przy otwieraniu.
właściwie, całość moich skryptów (flasha + reszta plików) mogę udostępnić do ściągnięcia, aby user mógł sobie otworzyć go z dysku. mógłbym też zrobić okienko "przeglądaj" już z samego flasha do wyboru tych plików txt. tylko cała rzecz z tym kopiowaniem. flash raczej nie może tego zrobić. i tu moje pytanie: czy da sie to jakos inaczej wykombinowac? najlepiej z pomocą przeglądarki (flash musi być osadzony).
darko
Można to osiągnąć na co najmniej 2 sposoby:
1. wystawiasz na ftp publiczy folder, do którego można zapisywać, użytkownicy mogą tam wrzucać swoje pliki przez dowolnego klienta ftp, następnie odczytujesz jego zawartość za pomocą skryptu i wyświetlasz listę plików do wyboru
2. udostępniasz jakiś formularz, za pomocą którego użytkownik może przesłać plik lub pliki na serwer, uploadujesz je, kopiujesz do odpowiedniej lokalizacji i dalej tak samo jak w pkc-ie 1.-szym - pokazujesz listę wybranych plików i dalej już robisz co tam potrzeba
Kruq
Cytat(flashion @ 16.01.2010, 14:45:43 ) *
tak właśnie myślałem, ale poprzednimi postami rozbudziliście moją nadzieję. winksmiley.jpg
piszę flasha (osadzonego w html), aplikacja ma za zadanie pobrać z dysku pliki txt, odczytać ich zawartość i na podstawie ich porozsyłać żądania do zewn. skryptów (nie moich) i wyświetlić wyniki. problem tkwi w tym, że mimo to użytkownik podaje ścieżkę do folderu z tymi plikami, mają one różne nazwy. Chciałem je wyświetlić we flashu i dać userowi wybór, którego użyć.
poza tym wybrany plik musi zostać skopiowany do jakiegoś innego folderu, ponieważ jest używany jednocześnie przez inną aplikację, a flash wyrzuca błędy przy otwieraniu.
właściwie, całość moich skryptów (flasha + reszta plików) mogę udostępnić do ściągnięcia, aby user mógł sobie otworzyć go z dysku. mógłbym też zrobić okienko "przeglądaj" już z samego flasha do wyboru tych plików txt. tylko cała rzecz z tym kopiowaniem. flash raczej nie może tego zrobić. i tu moje pytanie: czy da sie to jakos inaczej wykombinowac? najlepiej z pomocą przeglądarki (flash musi być osadzony).



nie można tak było od razu biggrin.gif ... no cóż , starając się pomóc Tobie , sam się czegoś nauczyłem .. guitar.gif
flashion
problem udało się ominąć już w samym flash'u.
wielkie dzięki za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.