Autor | Zpráva | ||
---|---|---|---|
martanius Profil |
#1 · Zasláno: 1. 6. 2014, 13:41:07
Zdravím, mám takový problém. Hned ze začátku řeknu že jsem v PHP úplný začátečník, sice jsem již měl tu čest s podobným programovacím jazykem jako PHP, ale přímo v PHP jsem ještě nic moc nedělal.
Mám na webu písmena od A do Z a chtěl bych to, že když někdo klikne třeba na A tak se mu zobrazí odkazy na .html soubory ze složky pages podle abecedy, takže například takto : Abba Acer Adidas Afrika Antilopa atd.... Vyhledávání jsem zkoušel, ale nic z témat co jsem našel mi moc nepomohlo. Zatím jsem se dozvěděl jen to, že se na to používá funkce scandir() a je třeba mít PHP 5+, když jsem to tedy zkusil objevil se mi error "undefined function scandirt()", potm jsem to tedy ještě zkoušel přes funkci opendirt(), kteá by prý měla fungovat i na starších verzích PHP, ale u ní se mi objevila spousta hlášek jako je : Warning: OpenDir: Invalid argument (errno 22) in c:\apache\htdocs\index.php on line 3 Warning: Supplied argument is not a valid Directory resource in c:\apache\htdocs\index.php on line 4 Warning: Supplied argument is not a valid Directory resource in c:\apache\htdocs\index.php on line 4 a takhle to pokračuje dalších x řádků. Ta funkce vypadá takto : <?php $dir = "/pages"; $dh = opendir($dir); while (false !== ($filename = readdir($dh))) { $files[] = $filename; } sort($files); print_r($files); rsort($files); print_r($files); ?> Děkuji za pomoc :) |
||
juriad Profil |
"undefined function scandirt()"
Je tam překlep v názvu funkce scandir. Pokud skutečně máš tak staré PHP, máš nějaký důvod, neupgradovat? Verzi PHP zjistíš třeba: <?php echo 'Current PHP version: ' . phpversion(); ?> Cesta, kterou zadáváš funkci opendir nejspíš má být jen "pages", aby to našlo adresář c:\apache\htdocs\pages . S tím lomítkem to totiž nejspíš hledá c:\pages .
Tato chyba pak způsobí, že se ten adresář neotevře a to způsobí ty další chyby. |
||
Micruss Profil |
#3 · Zasláno: 1. 6. 2014, 13:58:01
Dej to lomítko $dir = "pages/"; (nakonec) jinak taky nechápu, proč tam máš "scandirT"
|
||
martanius Profil |
#4 · Zasláno: 1. 6. 2014, 16:05:28
Jo, sry, to scandirT byl jen muj preklep.
Jen, ted me napadlo jestli chci pouzit tu spravnou funkci. Rád bych totiž aby to ve výsledku vypadlo jako tohle : http://www.kfilmu.net/dvdobaly.php?sekce=vyber&pismeno=a, takový seznam s hypertextovými odkazy. Děkuji za odpovědi. |
||
juriad Profil |
#5 · Zasláno: 1. 6. 2014, 16:18:57
foreach (scandir('pages') as $file) { # ve $file bude název souboru # tyto tři řádky zajistí, že se nebudou zobrazovat soubory . a .. na Linuxu # na Windows asi chceš podobnou podmínku pro Thumb.db if ($file == '.' || $file == '..') { continue; } # chceš vypsat odkaz <a href="/pages/$file">$file</a> echo "<a href=\"/pages/$file\">$file</a>"; # proč zpětná lomítka? Protože uvozovky. } |
||
martanius Profil |
Super, děkuji.
Ještě kdyby se to nepojmenovalo podle názvu souboru, ale podle té hodnoty v <title> u nalezeného souboru ? Tzn. že když se ve složce pages nacházejí třeba HTML soubory auto autodráha tak by ten hypertextový odkaz nebyl pojmenován auto.html a autodráha.html, ale podle <title>název</title> u každého souboru ? Potřeboval bych totiž aby tam byla diakritika a mezery. Mockrát děkuji za odpovědi :) |
||
Keeehi Profil |
Místo
scandir("pages") použijte glob("pages/a*") .
EDIT: koukám, že se dotaz změnil, nebo jsem to špatně přečetl. if (substr($file,-5) == ".html") { $data = file_get_contents($file); preg_match('~<title>(.*?)</title>~i',$data,$matches); if (!empty($matches[1])) { $name = $matches[1]; } else { $name = $file; } } else { $name = $file; } echo "<a href=\"/pages/$file\">$name</a>"; |
||
martanius Profil |
#8 · Zasláno: 1. 6. 2014, 17:04:47
Můžu poprosit o celý script ? Nějak mi to nejde, buď dělám něco špatně a nebo nevím kam mám ten script vnořit.
|
||
Keeehi Profil |
#9 · Zasláno: 1. 6. 2014, 17:06:30
Je to náhrada za řádek 8 v scriptu co posílal juriad v [#5].
|
||
juriad Profil |
martanius:
To není úplně dobrý nápad; musel bys prečíst každý soubor a vytáhnout z něj kus textu. Při větším počtu souborů to může být dost výkonově náročné. $content = file_get_contents($file); if (preg_match('#<title>(.*)</title>#i', $content, $title)) { $title = $title[1]; # nalezen; zajímá nás ta část, kterou jsme si označili závorkami } else { $title = $file; # nenalezen; název souboru postačí } echo "<a href=\"$file\">$title</a>"; Ale nejsem si jistý, že je to, co chceš. Pokud chceš mít stránku pro každý film, tak se to řeší tak, že se vytvoří jediná stánka a ta zobrazuje informace o tom filmu, který dostane jako parametr. Nevzniká tedy soubor pro každý film zvlášť. Keeehi: Nejspíš přeskakuješ. :) K písmenkům se teprve dostaneme. martanius napřed potřebuje zprovoznit obyčejný výpis souborů. A v tom globu rovnou můžeš kontrolovat koncovku souboru; a asi by to chtělo rozšířit na [aA] (ignorování velikosti) a zobecnit na $_GET['pismeno'] s nějakou ochranou.
|
||
Časová prodleva: 10 let
|
0