| 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: 11 let
|
|||
0