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.
Fórum › PHP
Výpis složek a souborů v PHP
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 :)
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.
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".
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
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.
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.
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 .
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é.
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.
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>';
?>
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)
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.
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
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.
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,
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í.
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ářů.
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?
$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
<?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);
?>
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Výpis všech složek, podsložek a souborů — založil Mutagen
Kopírování souborů/složek v C# — založil Standa
Nazvy slozek do souboru — založil lamka
Vyhledávání souborů a složek na disku — založil Martin h.
Moderátoři diskuze