Výpis složek a souborů v PHP – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Výpis složek a souborů v PHP – PHP – Fórum – Programujte.comVýpis složek a souborů v PHP – PHP – Fórum – Programujte.com

 

Mara
~ Anonymní uživatel
31 příspěvků
10. 8. 2010   #1
-
0
-

Ahoj, potřebuju vypsat soubory a složky z FTP tak, že když kliknu na složku, otevře se tato složka a vypíše se její obsah atd. Nechci do každé složky a podsložky dávat znova soubor ze skriptem, jak to můžu vyřešit? Díky za info.

Nahlásit jako SPAM
IP: 78.102.61.–
liborb
~ Redaktor
+18
Guru
10. 8. 2010   #2
-
0
-

Stejně jako se to řeší jinde, tj. budeš mít v tvém případě skript, který bude vypisovat adresáře a soubory v aktuálním adresáři. Po kliknutí na nějaký z těch vypsaných adresářů se tomu skriptu předá nový aktuální adresář, který bude složen z původního + jméno kliknutého adresáře :)

Nahlásit jako SPAM
IP: 85.207.166.–
Mara
~ Anonymní uživatel
31 příspěvků
10. 8. 2010   #3
-
0
-

To liborb : Teoreticky taky vím jak na to, ale nevím, jak to udělat. Zkoušel jsem to předávat, ale to mi fungovalo jen na jednu podslozku. V PHP zacinam a delam si fotogalerii na stranky a tohle je zatim vec, na kterou nedokazu prijit.

Nahlásit jako SPAM
IP: 78.102.61.–
liborb
~ Redaktor
+18
Guru
10. 8. 2010   #4
-
0
-

Předáváš skriptu parametry a je jedno jak. Na začátku mu nepředáváš nic -> kořenový adresář. Uděláš jeho výpis a jména adresářů budou odkazy, které budou mít nastavený ten předávaný parametr. Nebo může předávat těch parametrů víc (aktuální adresář + nový adresář) apod. Těch možností je určitě víc. Rozhodující je, aby si při procházení stále přidával a nezapomínal na to, že potřebuješ "úplnou cestu".

Nahlásit jako SPAM
IP: 85.207.166.–
Mara
~ Anonymní uživatel
31 příspěvků
10. 8. 2010   #5
-
0
-

To liborb : Mohl by jste ukázat příklad?

Nahlásit jako SPAM
IP: 78.102.61.–
z_moravec
~ Redaktor
+3
Posthunter
10. 8. 2010   #6
-
0
-

Budeš mít skript vypis.php.

Bez parametru vypíše obsah rootu, pokud budeš chtít do složky foto, tak mu předáš parametr:
vypis.php?dir=foto

Pro složku foto/dovolena
vypis.php?dir=foto/dovolena

Ve výpisu bude odkazy na adresáře dělané ve tvaru:
vypis.php?dir=slozka

Nahlásit jako SPAM
IP: 147.251.29.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Mara
~ Anonymní uživatel
31 příspěvků
10. 8. 2010   #7
-
0
-

To z_moravec : Já to potřebuji takto, mám složku fotky, v ní bude soubor index s tim PHP skriptem a taky treba slozka rok 2010 a v ni složka Příroda s fotkama a ja potřebuji aby ten skript v indexu zobrazil složky a když tu složku otevřu, tak aby zobrazil podsložky a posléze soubory.

Nahlásit jako SPAM
IP: 78.102.61.–
z_moravec
~ Redaktor
+3
Posthunter
10. 8. 2010   #8
-
0
-

A na co se ptáš? Jak udělat ten výpis nebo jak předávat skriptu cestu ke složce? Výpis adresáře najdeš v php manuálu (opendir), předání cesty jsem ti ukázal v minulém příspěvku.

Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
10. 8. 2010   #9
-
0
-

To nefunguje, lepe řečeno nevím, jak jít do podsložky podsložek, jak mám nechat skripem vygenerovat odkaz vypis.php?dir=foto/dovolena .

Nahlásit jako SPAM
IP: 78.102.61.–
z_moravec
~ Redaktor
+3
Posthunter
10. 8. 2010   #10
-
0
-

V tom případě doporučuju nejdřív nastudovat php a pak se teprve pokoušet programovat.

http://linuxsoft.cz/php

Taky je dobré si najít nějakou opensource php galerii a podívat se jak to je řešené.

Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Maro
~ Anonymní uživatel
16 příspěvků
10. 8. 2010   #11
-
0
-

To z_moravec : To je opravdu tak slozite mi rict, jak mám ten odkaz generovat??? vim jak by se to delalo, kdyby uz v te slozce nebyly zadne slozky, to bych to delal takto ?dir=$slozka, ale toto nefunguje pokud tam jsou delsi slozky (protoze to neprenasi uz adresu te predchozi slozky. To je jedina vec co potřebuji vyřešit.

Nahlásit jako SPAM
IP: 78.102.61.–
z_moravec
~ Redaktor
+3
Posthunter
10. 8. 2010   #12
-
0
-

Složité to není, ale pokud nezvládneš tak jednoduchou věc jako je předat parametr skriptu, tak nemá cenu se pouštět do složitějších věcí. PHP je extrémně jednoduchý jazyk, ale i tak je potřeba se trochu věnovat studiu. Ten seriál na linuxsoftu je jeden z nejlepších studijních materiálů v češtině.

<?php

echo '<a href="vypis.php?dir=' . $cestaKeSlozce . '">' . $nazevSlozky . '</a>';
?>

Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
KIIV
~ Moderátor
+43
God of flame
10. 8. 2010   #13
-
0
-

To Maro : neni to tak slozite..
Ale za hodinu te tu mame znova - tentokrate s necim podobnym a takhle furt dokola..
Snazi se te donutit at to vyresis sam - dal ti popis jak to resit a i cim to resit - mas vse co potrebujes a pokud to nedokazes tak se do toho ani nepoustej.
Muzes si dat i na cas - neni potreba to mit hned (proste si to rozmyslet, projit si referencni prirucku co to PHP umi a co se ti bude hodit).
Pokud to chces vyresit nabidni cenu a urcite se nas tu najde hromada co to zvladne (samozrejme platba predem)

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Maro
~ Anonymní uživatel
16 příspěvků
10. 8. 2010   #14
-
0
-

To KIIV : Aha, je to tak jednoduché a proto nikdo neporadí... Jinak pokud jsme už napsal (a funguje) vkládání složek (alb) a fotografií a přidávání popisku ze souboru, tak myslím, že tohle je poslední maličkost na kterou nemohu přijít.

Nahlásit jako SPAM
IP: 78.102.61.–
z_moravec
~ Redaktor
+3
Posthunter
10. 8. 2010   #15
-
0
-

A co konkrétně nevíš? Prostě vygeneruješ odkaz v HTML a za název souboru dáš otazník a cestu k té složce.

Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Maro
~ Anonymní uživatel
16 příspěvků
10. 8. 2010   #16
-
0
-

To z_moravec : To umím, ale nevím, jak když pomocí tohoto skriptu otevřu složku a v ní bude další složka, tak jak tu další složku otevřít.

Nahlásit jako SPAM
IP: 78.102.61.–
KIIV
~ Moderátor
+43
God of flame
10. 8. 2010   #17
-
0
-

aby nebylo snadnejsi pouzit directoryIndex

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Maro
~ Anonymní uživatel
16 příspěvků
10. 8. 2010   #18
-
0
-

To KIIV : ten mi nevyhovuje, celý skript mám již hotový, jen nevím, jak stavět dál tu cestu, pokud jdu do podadresářů.

Nahlásit jako SPAM
IP: 78.102.61.–
KIIV
~ Moderátor
+43
God of flame
10. 8. 2010   #19
-
0
-

smeruj furt sam na sebe akorat pridas <a href="script.php?cesta=dir1/subdir" > subdir </a> a cestu vytahnes z $_GET['cesta'] ..... samozrejme si musis hlidat aby nezadali ../../ a podobne

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
z_moravec
~ Redaktor
+3
Posthunter
10. 8. 2010   #20
-
0
-

To Maro : Přesně jak píše KIIV. Nemusíš do té složky chodit, volej pořád ten samý soubor v rootu a pouze pomocí něj vypisuj obsah dané složky.

Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Maro
~ Anonymní uživatel
16 příspěvků
10. 8. 2010   #21
-
0
-

To z_moravec : Už asi vím, jak to myslíte. Zkusím.

Nahlásit jako SPAM
IP: 78.102.61.–
Maro
~ Anonymní uživatel
16 příspěvků
10. 8. 2010   #22
-
0
-

To Maro : Jenze já do té složky musím jít, jinak mi ji to nevypíše. Já mpotřebuji aby to bylo plně dynamické, ať dám jakekoliv složky a podsložky, tak aby to vypsalo

Nahlásit jako SPAM
IP: 78.102.61.–
KIIV
~ Moderátor
+43
God of flame
10. 8. 2010   #23
-
0
-

To Maro : proc by to nemelo vypsat?
musi jet: opendir('./path/to/files')

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Maro
~ Anonymní uživatel
16 příspěvků
10. 8. 2010   #24
-
0
-

To KIIV : Ano to vypíše, ale já potřebuju vypsat složky a pak nějakou složku kliknutím vybrat a vypsat ji a tak dale, dokud budou jeste nejaké podsložky.

Nahlásit jako SPAM
IP: 78.102.61.–
KIIV
~ Moderátor
+43
God of flame
10. 8. 2010   #25
-
0
-

v tom ti nic nebrani

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
z_moravec
~ Redaktor
+3
Posthunter
10. 8. 2010   #26
-
0
-

Složku i soubory adresuj relativně, tzn. vůči adresáři, ve kterém je uložen ten php skript.

A znovu doporučuju ten manuál, když si přečteš alespoň ty díly, které se týkají práce se soubory a složkami, tak ušetříš sobě i jiným hodně času,

Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
RePRO0
Super člen
10. 8. 2010   #27
-
0
-

Ona tato problematika jde udělat i rekurzí. :-)

Nahlásit jako SPAM
IP: 83.240.104.–
Software: C; C++; C#; Pascal; Delphi; Java Webdesign: PHP; MySQL; CSS; jQuery; Ajax; Javascript; OOP
z_moravec
~ Redaktor
+3
Posthunter
10. 8. 2010   #28
-
0
-

Rekurzí se dá udělat kde co, ale tady by to asi moc užitečné nebylo. Pokud by chtěl vypsat najednou obsah všech adresářů a podadresářů, tak jo. Ale na správce souborů to moc rozumné není.

Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Maro
~ Anonymní uživatel
16 příspěvků
10. 8. 2010   #29
-
0
-

Už jsem asi na to přišel, pomůže mi toto?

<?
echo getcwd();
?>

přes getcwd() seženu cestu a tu budu vkladat jako cestu k souboru. Tak?

Nahlásit jako SPAM
IP: 78.102.61.–
z_moravec
~ Redaktor
+3
Posthunter
11. 8. 2010   #30
-
0
-

To Maro : Proč se ptáš, to rovnou vyzkoušel a uvidíš.

Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
liborb
~ Redaktor
+18
Guru
11. 8. 2010   #31
-
0
-

To Maro : Řekl bych, že máš stále problém s pochopením principu. Ty nemusíš být "fyzicky" v tom adresáři, aby si mohl vypsat jeho obsah, nebo-li nebudeš měnit current directory. Nevím, jestli děláš ve woknech nebo tuňákovi, ale řekněme, že ve woknech :). Řekněme, že by si chtěl něco takového udělat s pomocí příkazu dir. Příkaz dir dokáže vypsat obsah adresáře a "finta" je v tom, že bez parametrů vypisuje obsah aktuálního adresáře, ale s parametrem vypisuje obsah zadaného adresáře.

Měl by si skript, který by si prvně zavolal bez parametrů (např. výpis disku C:). On by ti vypsal soubory a také adresáře. Byl by tam třeba i adresář MojeFotky. Takový adresář by byl "klikací odkaz", který by tomu tvému skriptu předával právě ten parametr, který by mu oznamoval, kde se má provést další výpis. A kupodivu by ten parametr název toho adresáře resp. úplná cesta k němu.

Takže vypisuješ obsah C:, našel si adresář MojeFotky, takže do do parametru toho odkazu dáš "součet" cesty aktuálně vypisovaného adresáře a jména nalezeného adresář, nebo-li C:\MojeFotky. Takový parametr by se po kliknutí na ten odkaz předal tomu skriptu a byl by to tvůj aktuálně vypisovaný adresář, takže v programu by si udělal dir $jméno_adresáře. Samozřejmě by to našlo zase adresáře, třeba adresář 2010. Takže by si udělal to samé - sečetl by si řetězce -> $jméno_adresáře + 2010 = C:\MojeFotky\2010 - to by byl parametr toho nově nalezeného adresáře.

Nemění se "fyzický" aktuální adresář - getcwd mi bude vracet pořád to samé. Mění se pouze aktuálně vypisovaný adresář, který si stále předávám jako parametr. To, co dostaneš na vstupu toho skriptu jako adresář, kde se má provést výpis, použiješ dále na tvorbu cesty parametrů další podadresářů.

Nahlásit jako SPAM
IP: 85.207.166.–
Maro
~ Anonymní uživatel
16 příspěvků
11. 8. 2010   #32
-
0
-

Už jsem to pochopil a vytvořil jsem toto:



<?php



$slozka = $_GET["slozka"];

if ($slozka == NULL)
{
$cesta = './';
}

else
{
$cesta = $cesta + '/' + $slozka;
}

$sl = opendir($cesta);

while ($soubor = readdir($sl))
{
echo "<a href='?slozka=$soubor'>$soubor</a> ";
}


?>



Problém je, že to funguje jen do jednoho podadresáře, dál už ne, může mi někdo poradit, kde je chybka?

Nahlásit jako SPAM
IP: 78.102.61.–
KIIV
~ Moderátor
+43
God of flame
11. 8. 2010   #33
-
0
-

$cesta = $cesta + '/' + $slozka;

$cesta pred timto neexistuje takze se vyplodi neco takoveho: $cesta == '/'.$slozka; a v rootu to pochopitelne neni

pak jeste:
echo "<a href='?slozka=$cesta/$soubor'>$soubor</a>";



+ je tam ta bezpecnostni dira... no dira - uplna macocha

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Maro
~ Anonymní uživatel
16 příspěvků
11. 8. 2010   #34
-
0
-

Mohl by jste mi teda napsat, jak by ten kod mel vypadat, ted nevim...

Nahlásit jako SPAM
IP: 78.102.61.–
z_moravec
~ Redaktor
+3
Posthunter
11. 8. 2010   #35
-
0
-

Nemám čas to opravovat, ale musíš vždy ověřovat všechna data, která dostaneš od uživatele. To neděláš a dá se to velmi snadno zneužít.

Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Maro
~ Anonymní uživatel
16 příspěvků
11. 8. 2010   #36
-
0
-

Mohl by sem někdo dát opravený kod, já už opravdu nevím. :smile11:

Nahlásit jako SPAM
IP: 78.102.61.–
KIIV
~ Moderátor
+43
God of flame
11. 8. 2010   #37
-
0
-



<?php

$slozka = @$_GET['slozka'];

$slozka = preg_replace('/\.+\//','',$slozka); // nahradit vse co ma 1 a vice tecek nasledovanou /
$slozka = preg_replace('/^\.+$/','',$slozka); // nahradit jednu a vice tecek na konci retezce
$slozka = preg_replace('/^\//','',$slozka); // odstranit / na zacatku (da se hodit i /\/+/ za jedno '/' - tj. //// => / a podobne )


$sl = opendir('./'.$slozka); // protoze odstranuju tecky tak na zacatku adresare je jednu potreba pridat
while ($soubor = readdir($sl)) {
if ( is_file('./'.$slozka.'/'.$soubor) ) { // pokud je to soubor nema smysl davat odkaz na zanoreni do podadresare
if ( preg_match('/\.(jpg|png|gif|tiff)$/',$soubor) ) { // zobrazuju jen .jpg / .png / .gif / .tiff (lze libovolne rozsirit)
echo "<a href='./".( $slozka == '' ? '' : $slozka."/")."$soubor'>$soubor</a>"; // pokud je $slozka prazdna tak se zbavime / na zacatku
}
} else { // jinak je to adresar
if ( $soubor == '..' ) { // specialni "zastupny" adresar - o uroven vyse
$up = preg_replace( '/[^\/]+\/*$/','',$slozka ); // odstranim posledni cast v slozka ( neco/blabla/test => neco/blabla (muze byt i ukonceno / ))
echo "<a href='?slozka=$up'>[up]</a>"; // vypsat
} elseif( $soubor != '.' ) { // pokud to neni zastupny adresar pro "aktualni" adresar
echo "<a href='?slozka=".($slozka ==''? '': $slozka."/")."$soubor'>$soubor</a>"; // vypsat (pripadne se zbavit / na zacatku pokud je $slozka prazdna)
}
}
}
closedir($sl);

?>

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Maro
~ Anonymní uživatel
16 příspěvků
12. 8. 2010   #38
-
0
-

To KIIV : Díky moc, teďka si ten kod projdu a pokusím se pochopit, jak to funguje. :smile1:

Nahlásit jako SPAM
IP: 78.102.61.–
KIIV
~ Moderátor
+43
God of flame
12. 8. 2010   #39
-
0
-

To Maro : trochu sem ti to okomentoval

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
CZechBoY+4
Věrný člen
13. 8. 2010   #40
-
0
-

To Maro : kámo v PHP se stringy(řetězce) spojují přes tečku{.} v JavaScriptu se spojují přes plus {+} jako to máš ty ;-)

Nahlásit jako SPAM
IP: 213.192.10.–
Martin
~ Anonymní uživatel
1602 příspěvků
7. 5. 2012   #41
-
0
-

#37 KIIV
Odpovídám trochu pozdě, ale narazil jsem na pěkný script, který tu vymyslel KIIV, ale mě by zajímalo, jak v tomto skriptu zařídit, aby se vypsané soubory a složky řadily dle abecedy?

Díky,

M

Nahlásit jako SPAM
IP: 213.192.12.–
z_moravec
~ Redaktor
+3
Posthunter
Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 57 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý