Autor | Zpráva | ||
---|---|---|---|
sonix Profil |
#1 · Zasláno: 5. 7. 2008, 22:46:46 · Upravil/a: sonix
Zdravím. Potřebuju od Vás zkušených radu, jak stáhnout více složek najednou pomocí nějakého scriptu? Pro lepší pochopení zkusim ještě trochu vysvětlit. Mám koženový adresář (root) a v něm mám více složek, a v každé té složce je pár souborů a potřebuju je stáhnou pomocí scriptu. :) Poradí někdo? Přemýšlel jsem nad tím a jediný co mě napadlo tak zjistit všechny adresáře a pak je postupně stahovat pomoci while(). Jde o to, stáhnout všechny soubory a adresáře z rootu. Takže by to mohlo ještě jít tak, že se všechny soubory přidají do archivu, a ten se pak nabídne ke stáhnutí. Prosím o pomoc rozlousknutí tohoto oříšku.
|
||
Alphard Profil |
#2 · Zasláno: 5. 7. 2008, 23:09:25
musíš se rozhodnout, jak chceš stažení provést, adresář stáhnout nelze, lze stahovat pouze soubory, nebo archiv, ve kterém mohou být zachované adresáře
PHP umí pracovat třeba se ZIP a pokud jde o princip, záleží na požadavcích, ale asi nejlepší by byla rekurzivní funkce, zvládne práci se soubory zanořenými do x adresářů |
||
sonix Profil |
#3 · Zasláno: 5. 7. 2008, 23:36:14
podle meho rozhodnuti by ta funkce, jak jsi zminoval, byla vhodna... jde o to, že v nějaké složce je například další podsložka, ve ktere jsou další adresáře atd..
|
||
Alphard Profil |
#4 · Zasláno: 5. 7. 2008, 23:42:52
jde o to, že v nějaké složce je například další podsložka, ve ktere jsou další adresáře atd..
právě proto doporučuji rekurzivní funkci, na tohle je jako stvořená... |
||
sonix Profil |
#5 · Zasláno: 6. 7. 2008, 00:04:37
jj rekurzivní fce o nich jsem někde četl... mohl by jsi mi pomoc s konstrukcí kodu?
|
||
Alphard Profil |
#6 · Zasláno: 6. 7. 2008, 00:52:29 · Upravil/a: Alphard
dám sem script vypisující rekurzivně jednotlivé adresáře a soubory, k pochopení doporučuji nejprve spustit v adresáři se složitější strukturou a prohlédnout výstup, až potom editovat :-)
snad to funguje, tu svoji archivní funkci teď nemohu najít, tak jsem v rychlosti napsal tohle <?php function vypis_soubory ($cesta = ".") { echo "<li><b>".$cesta."/</b></li>\n"; echo "<ul>"; $r = scandir ($cesta); foreach ($r as $file) { if ($file == "." || $file == "..") continue; if (is_dir ($cesta."/".$file)) vypis_soubory ($cesta."/".$file); }; foreach ($r as $file) { if ($file == "." || $file == "..") continue; if (!is_dir ($cesta."/".$file)) { echo "<li>".$file."</li>\n"; } } echo "</ul>\n"; } function schema ($cesta = ".") { echo "<ul>\n"; vypis_soubory ($cesta); echo "</ul>\n"; } schema(); ?> využívá funkci scandir(), ta je až v PHP 5, ale snad to není problém s pomocí http://cz2.php.net/zip snad nebude problém to upravit PS: sám si chci již docela dlouhou funkci na balení adresářů vytvořit, jestli ji udělám v dohledné době, tak ji sem vložím |
||
sonix Profil |
#7 · Zasláno: 6. 7. 2008, 01:09:08 · Upravil/a: sonix
dík
|
||
sonix Profil |
#8 · Zasláno: 6. 7. 2008, 01:11:04
Good work! ;-) fakt moc díky. BTW říká ti něco shell script?
|
||
Alphard Profil |
#9 · Zasláno: 6. 7. 2008, 10:18:30
BTW říká ti něco shell script?
říká, ale netuším, k čemu ti tahle informace bude :-) tady nejsme na chatu |
||
Časová prodleva: 14 dní
|
|||
sonix Profil |
#10 · Zasláno: 20. 7. 2008, 20:38:39
hoj. nenasel jsi ten script na stazeni toho stromu?
|
||
Alphard Profil |
#11 · Zasláno: 21. 7. 2008, 11:50:20
sonix
našel, ale zjistil jsem, že je to třída, na které jsem kdysi začínal s OOP na PHP 5, snad jsem neudělal nějakou chybu :-) následující script vlož ideálně do rootu, pak ho zavolej a v závislosti na počtu souborů mu dej trochu času, měl by ve stejném adresáři (root) vytvořit soubor zip.zip (název lze změnit) s archivem současného adresáře, tedy root Pozn. teoreticky by se zadáním jiné cesty jako argumentu měl balit i nadřazené adresáře, ale nejsem si jist, jak jsem ho vyladil, takže doporučuji umístit do rootu Pozn2. vyžaduje knihovnu zip (nastavuje se v php.ini), není-li k dispozici, lze očekávat chybu Fatal error: Class 'ZipArchive' not found in např. na free profituxu nefunguje <?php class Zipuj { protected $zip; public $jmeno_zipu; public $root; public function __construct ($root = ".", $jmeno_zipu = "zip.zip") { $this -> root = $root; $this -> jmeno_zipu = $jmeno_zipu; $this -> zip = new ZipArchive(); $this -> zip -> open ($this -> jmeno_zipu, ZIPARCHIVE::CREATE); self::nactiAdr ($this -> root); self::uloz (); } public function nactiAdr ($cesta) { $hn = scandir ($cesta); foreach ($hn as $file) { if ($file == "." || $file == "..") continue; if (is_dir ($cesta."/".$file)) { $this -> zip -> addEmptyDir ($cesta."/".$file); self::nactiAdr ($cesta."/".$file); } else $this -> zip -> addFile ($cesta."/".$file, $cesta."/".$file); } } public function uloz () { $this -> zip -> close (); } } $zalohuj = new Zipuj(); ?> |
||
sonix Profil |
#12 · Zasláno: 21. 7. 2008, 12:07:40
mohl by jsi mi dat ICQ nebo mail? to o cem se s tebou chci bavit sem jaksi nepatri a nechci to tu rozebirat verejne, tak se prosimte ozvy na mail kyllee@seznam.cz
|
||
Časová prodleva: 2 měsíce
|
|||
šoraj Profil |
#13 · Zasláno: 23. 9. 2008, 17:10:49
Ahoj Alphard,
měl bych dotaz, jak zabalit pomoc tveho skriptu adresář, ale bez nadřazených složek??předem děkuji za tvoji odpověď! fuńguje mi to, ale zabali to celou cestu..jsem zacatecnik, tak nevim, jak na to..dik |
||
Časová prodleva: 16 let
|
0