Autor | Zpráva | ||
---|---|---|---|
kuba95 Profil |
#1 · Zasláno: 28. 2. 2012, 21:45:57
Zdravím,
mám script, který mi vypisuje všechny názvy souborů ze složky a potom je uloží do html souboru. V tom scriptu se snažím dostat do složky $d, jejíž název je do scriptu posílán funkcí post. Mě se ale ta složka neotevře. Script na generování: <?php $d = $_POST['slozka'] ; $nadpis = $_POST['nadpis'] ; $title = $_POST['title'] ; $endline = "\n" ; $dir = opendir ( $d ); $output = '<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'.$endline; $output .= '<html xmlns="http://www.w3.org/1999/xhtml">'.$endline; $output .= '<head>'.$endline; $output .= '<title>'; $output .= $title; $output .= '</title>'.$endline; $output .= '<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">'.$endline; $output .= ' <script src="../js/prototype.js" type="text/javascript"></script>'.$endline; $output .= ' <script src="../js/scriptaculous.js?load=effects,builder" type="text/javascript"></script>'.$endline; $output .= ' <script src="../js/lightbox.js" type="text/javascript"></script>'.$endline; $output .= '<style type="text/css">'.$endline; $output .= ' body{ color: #333; font: 13px Verdana, sans-serif; }'.$endline; $output .= '</style>'.$endline; $output .= '</head>'.$endline; $output .= '<body>'.$endline; $output .= '<center><font face="Verdana, Arial, Helvetica, Sans-Serif" size="+1"><b>'.$endline; $output .= $nadpis.$endline; $output .= '</b></font></center>'.$endline; $output .= '<br />'.$endline; while($e = readdir($dir)) { if($e!='.' && $e!='..') { $output .= ' <a href="'.$e.'" rel="lightbox[roadtrip]"><img src="thumbs/'.$e.'" alt="" /></a>'.$endline; } } $output .= '<br />'.$endline; $output .= '</body>'.$endline; $output .= '</html>'.$endline; //code to write the $output to a file print_r($output); $f =fopen("z.html", "w"); fwrite($f, $output); fclose($f); ?> Tímto souborem tam posílám název složky: <html> <head> <meta http-equiv="Content-Language" content="cs"> <title>Zadání</title> </head> <form action="gen.php" method="post"> Složka:<br /> <input name="slozka" type="text" /><br /> Nadpis:<br /> <input name="nadpis" type="text" /><br /> Title:<br /> <input name="title" type="text" /><br /> <input type="submit" value="Odeslat" /> <input type="reset" /> </form> </body> </html> Prosím poraďte někdo... Za všechny odpovědi předem děkuji... |
||
TomasJ Profil |
Zkus místo
while($e = readdir($dir)) dát while(($e = readdir($dir))!==false) .
Pokud ani tak nepůjde, zkus ještě scandir() EDIT: Opraveno na upozornění od Tori. |
||
Tori Profil |
kuba95:
Pokud je chybně zadaná cesta (název složky), tak by opendir měla vypsat chybu (že složka neexistuje, nebo není přístupná) a vrátit false. Píše vám to nějakou chybovou hlášku? TomasJ „while(($e = readdir($dir))===true).“ Tohle selže naprosto vždy. readdir vrací řetězec nebo false, takže má být while(($e = readdir($dir)) !== false)
|
||
TomasJ Profil |
#4 · Zasláno: 28. 2. 2012, 22:25:28
Tori:
Hmm... Já myslel, že if(x!==false) a if(x===true) je to samé. Zajímavé, že mně to šlo...
|
||
Tori Profil |
TomasJ:
Možná jste použil obyčejné porovnání? x == true by tady prošlo, ale === porovnává i typ. Nicméně může se stát, že budu mít soubor s názvem složeným z nul, proto je lepší ověřovat !== false (stejně jako např. u strpos).
"00000" == false // true "0000" === false // false |
||
kuba95 Profil |
#6 · Zasláno: 29. 2. 2012, 10:23:21
Tori:
„Píše vám to nějakou chybovou hlášku?“ Ne, nic mi to nepíše, prostě to vezme soubory ze složky, ve které je ten script a ne z té, kterou tam pošlu pomocí post |
||
TomasJ Profil |
#7 · Zasláno: 29. 2. 2012, 17:43:09
kuba95:
Už jsi zkoušel co jsem psal ve [#2]? Taky to nešlo? |
||
kuba95 Profil |
#8 · Zasláno: 29. 2. 2012, 20:38:45 · Upravil/a: kuba95
Já se všem omlouvám, tento problém vůbec nenastal... Jenom jsem to špatně vyzkoušel...
Nastal mi ale jiný problém. Vypíše to všechny fotky ze složky, ale nejsou abecedně seřazeny... Snažil jsem se tam někam dát Sort($e); ale pořád mi to vypisovalo nějaký chyby...TomasJ: Jj, teď jsem to vyzkoušel, ale nic jinýho se nestalo... |
||
Davex Profil |
#9 · Zasláno: 29. 2. 2012, 20:41:35
kuba95:
„Vypíše to všechny fotky ze složky, ale nejsou abecedně seřazeny...“ Tak použij scandir() , jak ti radil [#2] TomasJ.
|
||
kuba95 Profil |
Davex:
„Tak použij scandir(), jak ti radil [#2] TomasJ.“ Když tam dam scandir, tak mi to napíše tohle: Fatal error: Maximum execution time of 20 seconds exceeded in ............ |
||
Davex Profil |
#11 · Zasláno: 29. 2. 2012, 20:52:48
kuba95:
A nahradil jsi i ten readdir() načítáním hodnot z pole, které vrátí scandir() ?
|
||
kuba95 Profil |
#12 · Zasláno: 29. 2. 2012, 20:55:25
takhle jsem to udělal:
while(($e = scandir($d))!==false) { if($e!='.' && $e!='..') { |
||
Davex Profil |
#13 · Zasláno: 29. 2. 2012, 21:40:30
kuba95:
Zkus nahlédnout do dokumentace PHP co funkce vrací jako návratovou hodnotu a zamyslet se, jak by se s tím dalo dále pracovat (malá nápověda: foreach ).
|
||
kuba95 Profil |
#14 · Zasláno: 29. 2. 2012, 21:50:05
Díky za radu... vzhledem k tomu, že s PHP moc neumim, tak jsem zkusil tohle:
while($ep = scandir($d)) foreach($ep as $e) { if($e!='.' && $e!='..') { a hle! Pokrok... Už mi to nepíše tamtu hlášku, ale tuto: Fatal error: Allowed memory size of 50331648 bytes exhausted (tried to allocate 49545230 bytes) in ............ Šel by tento problém vyřešit jiným hostingem?? |
||
Alphard Profil |
#15 · Zasláno: 29. 2. 2012, 21:59:14
Jaký problém chcete řešit s hostingem, vaši neznalost php? :-)
scandir() funguje jinak než readdir(), dávat ho jako podmínku do while cyklu je naprostá neznalost. $ep = scandir($d); foreach($ep as $e) |
||
kuba95 Profil |
#16 · Zasláno: 29. 2. 2012, 22:04:28
Alphard:
Díky mnohokrát... Už to funguje „Jaký problém chcete řešit s hostingem, vaši neznalost php? :-)“ Asi jo... spíš neznalost angličtiny. Myslel jsem že mi to říká, že hosting mi nedá tolik paměti, kolik potřebuju... „dávat ho jako podmínku do while cyklu je naprostá neznalost.“ Ano, v PHP zatím moc znalý nejsem... |
||
Časová prodleva: 12 let
|
0