Autor Zpráva
wwwirtuoz
Profil
da sa pomocou PHP nejako urobit, aby sa vypisaly setky subory v danom adresari
(a popr. aby boli aj klikatelne) ??

a da sa urobit aj nie len jedneho adresara, ale struktura ?
(nemusi byt klikacia (+,- ...) ale aby sa vypisali a otvorily aj vsetky podadresare)

bez pouzitia FTP

ked ano tak ako ??
dakujeem
thingwath
Profil *
Vypsat obsah adresáře lze třeba takto (zkopíroval jsem kód vlastního skriptu), ten if je tam kvůli skrytým souborům a adresářům . ..
Klikatelnost vyrobíte tak, že je místo do seznamu jako já dáte do odkazu, otázka je, kam mají ty odkazy vést

$dirs = scandir ('models/')
foreach ($dirs as $x) {
if (!preg_match ('/^\..*/', $x)) {
print '<li>'.$x.'</li>';
}
}


Strukturu bude nejlépe vypsat nějakou rekurzí, uděláte to jako funkci, dovnitř foreach dáte ověření na adresář a případně zavoláte onu funkci pro ten adresář.
wwwirtuoz
Profil
ten if je tam kvůli skrytým souborům a adresářům
aby sa skryte subory zobrazili alebo nezobrazili ??
bral by som skvor zobrazit
thingwath
Profil *
aby se nezobrazily, nechci je, pro opačné stačí podmínku smazat
thingwath
Profil *
Tedy přesněji, skrytými soubory se myslí soubory začínající tečkou (neplést s jiným řešením pomocí filesystému na windows). Takže i adresáře současný adresář (.) a nadřazený (..).
llook
Profil
Je dobré pamatovat také na to, že scandir načítá i adresáře "." a "..", tedy aktuální a nadřazený adresář.
Jo a v PHP >= 4.3.0 lze využít i funkci glob.
wwwirtuoz
Profil
na klikaciu strukturu zabudnite, to je na nic.
to co napisal thingwath hore bolo dobre, len by som to chcel este nejak rozsirit, aby aj adresare v tom hlavnom adresari boli otvorene
wwwirtuoz
Profil
mmm
pise to:
Parse error: syntax error, unexpected T_FOREACH in C:\dev\www\a.php on line 4
thingwath
Profil *
Protože tam chybí za tím scandir středník, moje chyba.

ale pro účel vypsání všeho bych to napsal trochu jinak
<pre>
function listdir ($path) {
$x = scandir ($path);
foreach ($x as $y) {
print $y.'<br />';
if (is_dir ($path.'/'.$y) AND (($y != '.') AND ($y != '..'))) {
listdir($path.'/'.$y);
}
}
}

listdir ('.');
</pre>

Snad to bude fungovat, ještě by to chtělo nějak označovat adresáře a další vnořené struktury, ale to už si schopný programátor dořeší lépe :-)
pyty
Profil
thingwath
dik
funguje to jen pre adresar a podadresare v ktorom sa nachcadza subor ??
thingwath
Profil *
pracuje to pro adresář, který zadáte jako parametr pro napsanou funkci listdir, v ukázke je to aktuální adresář.
Jak říkám, chtělo by to k tomu nějaký barvičky.
pyty
Profil
mmm :-((. na localhoste mi to funguje, ale sever site.cz hlasi:
Fatal error: Call to undefined function: scandir() in /webs/1/site.cz/p/pytylog/a_edit_what.php on line 34
PS: neda sa nejak namiesto tych .. a . urobit aby bola kazda struktura pomocou <span style="padding-left: ...."> vzdy o 10 px do prava ??
ja som to skusal, ale vzdy to vyhodilo nejaku chybu
pyty
Profil
Fatal error: Call to undefined function: scandir() in /webs/1/site.cz/p/pytylog/a_up.php on line 34
pise to aj pri tom:

$dirs = scandir ('models/');
foreach ($dirs as $x) {
if (!preg_match ('/^\..*/', $x)) {
print '<li>'.$x.'</li>';
}
}

preco ???
neda sa s tym nieco urobit ??
Leo
Profil
scandir podle manualu existuje az ve verzi PHP5, pokud mate PHP4 tak mate smulu.

Jinak viz http://cz2.php.net/manual/cs/ref.dir.php

Leo
thingwath
Profil *
Tak to jsem si vůbec neuvědomil. No, v takovém případě to bude nutné nahradit přes opendir() a readdir(), nemělo by to být o nic moc složitější.
pyty
Profil
mne to potom uz vobec neide....
skusl som tak:

$dirs = opendir ('models/');
foreach ($dirs as $x) {
if (!preg_match ('/^\..*/', $x)) {
print '<li>'.$x.'</li>';
}
}


aj


$dirs = readdir ('models/');
foreach ($dirs as $x) {
if (!preg_match ('/^\..*/', $x)) {
print '<li>'.$x.'</li>';
}
}


a nic....
ako to teda urobit ??
PS: a co ten paddinng ?
neda sa nejak namiesto tych .. a . urobit aby bola kazda struktura pomocou <span style="padding-left: ...."> vzdy o 10 px do prava ??
ja som to skusal, ale vzdy to vyhodilo nejaku chybu
thingwath
Profil *
No, v tomhle pripade je to trochu jinak, viz ta dokumentace.

opendir() nam vrati directory handler a my z nej pak budeme cist jednotlive soubory

takze smycku foreach nahradime smyckou while

$dirs = opendir ('models/');
while ($x = readdir($dirs)) {
print $x;
}


Ten samy priklad je i v te dokumentaci.
pyty
Profil
thingwath
dik :-) !!!
a ako sa to da aplikovat aj na to druhe riesenie ???
function listdir ($path) { 

$x = scandir ($path);
foreach ($x as $y) {
print $y.'<br />';
if (is_dir ($path.'/'.$y) AND (($y != '.') AND ($y != '..'))) {
listdir($path.'/'.$y);
}
}
}

listdir ('.');
thingwath
Profil *
No, úplně stejně. Do $x načteme přes opendir handler adresáře $path a smyčku foreach nahradíme smyčkou while, která nám bude přes readdir() do $y načítat jednotlivé adresáře z $x, je to opravdu úplně stejné :-)
pyty
Profil
:-(( ja som asi fakt uplne sprosty !!
nice som tam pomenil a ono to uz absolutne neide...


function listdir ($path) { 

$x = opendir ($path."/");
while ($x = readdir($x)) {
print $y.'<br />';
if (is_dir ($path.'/'.$y) AND (($y != '.') AND ($y != '..'))) {
readdir($path.'/'.$y);
} }}
listdir ('a');


prosim, ako to ma vyzerat normalne ??
thingwath
Profil *
Hm, u toho while máš chybu, že návratovou hodnotu readdir() ukládáš do proměnnné $x, kterou jednak určitě přepsat nechceš. Myslím, že ji spíš chceš uložit do proměnné $y :-)
thingwath
Profil *
Druhá chyba je, že uvnitř té smyčky nechceš volat znovu readdir, ale náš vlastnoručně napsaný listdir().


function listdir ($path) {
$x = opendir ($path."/");
while ($y = readdir($x)) { <-- změna na tomto řádku
print $y.'<br />';
if (is_dir ($path.'/'.$y) AND (($y != '.') AND ($y != '..'))) {
listdir($path.'/'.$y); <-- změna na tomto řádku
} }}
listdir ('a');


Doufám, že už jsem nic nepřehlíd.
pyty
Profil
thingwath
Vrelá Vďaka !! prajem ti štastný nový rok ! :-)
Matúš Kopáč
Profil
Jak mam ale zistit kolko je v adresari suborov
Robotus
Profil *
http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=9&topic=10 095
Toto téma je uzamčeno. Odpověď nelze zaslat.