Autor | Zpráva | ||
---|---|---|---|
TomasJ Profil |
#1 · Zasláno: 19. 2. 2010, 02:15:26
Dobrý den.
Nejsem zrovna začátečník, ale něco se mi občas taky nepovede. A proto píšu o radu. Potřeboval jsem si udělat Download souborů, pomocí proměnné(ID) např. www.adresa.cz/download.php?id=2 , nebo samotnou stránku, kde by byly vypsány soubory, a po kliknutí na některý, by se začal stahovat (já osobně mám radši variantu tuto z důvodu zabezpečení, které je pro mě touto cestou jednodušší): <form method="post" action="download.php"> <input type="radio" name="id" value="1">Soubor 1<br> <input type="radio" name="id" value="2">Soubor 2<br> <input type="hidden" name="prava" value="ano"> <input type="submit" value="Stáhnout"> </form> stránka download.php(u ní mám problém) mám např. <?php if($_POST['prava']=="ano" && $id>0) //zkontroluji, zda ma uzivatel prava, a ID souboru neni mensi nez 0 { .... } tady bych potřeboval otevřít soubor a jeho obsah bych chtěl vložit do arraye... Soubor se jmenuje, dejme tomu paths.txt a obsah by vypadal nějak takto: "cesta_k_souboru_1.mp3", "cesta_k_souboru_2.mp3" Jednoduše bych potřeboval obsah vložit do arraye tak aby vypadal array takto: $cesty = Array("cesta_k_souboru_1.mp3","cesta_k_souboru_2.mp3"); stačilo by aby platilo, že $cesty[0] == "cesta_k_souboru_1.mp3" $cesty[1] == "cesta_k_souboru_2.mp3" Dále jsem k tomu potřeboval přiřadit jména a to by byl soubor names.txt a vypadal by obdobně jako ten paths.txt ale místo adres k souborům by byly názvy ... jakože: "jmeno souboru 1", "jmeno souboru 2" Ty názvy bych si ale zvládl přiřadit... Snad jste pochopili co mám na mysli a předem děkuji za vyřešení tohoto mého problému. |
||
Raňajka Profil * |
#2 · Zasláno: 19. 2. 2010, 06:17:26
Snad tě nakopnu. Obsah souboru example.txt:
prvni_soubor_nazev.mp3,druhy_soubor_nazev.mp3 $soubory_pole = explode(',', file_get_contents('example.txt')); $soubory_pole nyní obsahují názvy souborů. $soubory_pole[0] = prvni_soubor_nazev.mp3, $soubory_pole[1] = druhy_soubor_nazev.mp3. |
||
Joker Profil |
#3 · Zasláno: 19. 2. 2010, 08:07:21
file() - načte soubor po řádcích do pole.
|
||
TomasJ Profil |
#4 · Zasláno: 19. 2. 2010, 10:36:52 · Upravil/a: TomasJ
Raňajka:
Děkuju ale ono je možné, že až budu dělat k souborům jména tak v názvu pro soubor může být obsažena čárka... může obsahovat čárku a pak by se jméno rozdělilo v půlce. Ale děkuju za snahu :) Joker: Takže je lepší když vymažu čárky, z toho obsahu souboru a dám každou adresu na nový řádek? je třeba u toho použít za každou adresou \n pro nový řádek? |
||
Joker Profil |
#5 · Zasláno: 19. 2. 2010, 10:50:12
TomasJ:
„Takže je lepší když vymažu čárky, z toho obsahu souboru a dám každou adresu na nový řádek?“ Aha, jestli to už máte oddělené čárkami, tak asi raději přes explode, viz Raňajka. Mně z té ukázky přišlo, že máte každé jméno na novém řádku. |
||
TomasJ Profil |
#6 · Zasláno: 19. 2. 2010, 11:07:42 · Upravil/a: TomasJ
Joker:
No to už je jedno jestli bude na novém řádku nebo ne... Každopádně explode použít nemohu u toho druhého souboru, který budu dělat... neboli names.txt a tam by se mohla vyskytnout čárka 2x ... Třeba takto: Název k Souboru 1, Interpret - Skladba, Název k Souboru 2, Interpret - Skladba Prostě mi nepřijde funkce explode() jako dobrá volba... Všiml jsem si že hodně lidí používá právě tuto funkci k definování typu souboru, podle koncovky... třeba: $soubor = explode(".", $path);//v tomto případě mám na mysli že $path = $REQUEST_URI; nebo třeba přímo načtená adresa k souboru(že by si to načetlo název z toho example.txt ... a pak jen použijí někam do textu: echo "Soubor je typu ".$soubor[1]; Jenže v tomto je problém, protože cesta k souboru může obsahovat . (teček) více a pak by byla pozice [1] třeba v půlce názvu. To by pak mohlo vyhodnotit typ jako .dvd kdyby název byl: Moje.dvd.4gb.iso ... Pro tohle používám filetype(); ale to tu rozebírat nebudu... Snad jste pochopil, proč chci použít to Vámi zmiňované file(); |
||
Joker Profil |
#7 · Zasláno: 19. 2. 2010, 11:36:22
TomasJ:
„tam by se mohla vyskytnout čárka 2x“ No, musíte mít nějaký jednoznačný způsob oddělení. I když nechcete všechny části, přesto může funkce explode být užitečná- pokud to bude: soubor, skladba, soubor, skladba,... prostě si jen vezmete každou druhou položku. Horší to je, pokud by se čárka mohla vyskytovat i někde v popisu a podobně... pak jí musíte nějak escapovat nebo použít jiný oddělovač, jinak ten soubor automaticky nezpracujete. „Všiml jsem si že hodně lidí používá právě tuto funkci k definování typu souboru (...)“ Ano, to co uvádíte je špatně. Jak logicky špatně, tak i vcelku nesmyslné použití explode(). 1. Přípona není text mezi první a druhou tečkou, ale text za poslední tečkou 2. Není třeba rozsekat název souboru podle teček, takže není nutné používat explode. Na zjištění textu za poslední tečkou stačí substr + strpos. |
||
TomasJ Profil |
#8 · Zasláno: 19. 2. 2010, 11:50:37
Joker:
No radši bych vyzkoušel tu fci file(); ... Jen jsem chtěl vědět zda má být za textem \n aby funkce začla číst znovu, další řádek ... |
||
TomasJ Profil |
#9 · Zasláno: 19. 2. 2010, 13:29:52
A ještě bych ocenil kdyby byl někdo tak laskavý a napsal mi jaké parametry jsou pro file() nutné ...
Stačí jen $soubor = file('example.txt'); |
||
Joker Profil |
#10 · Zasláno: 19. 2. 2010, 14:11:03 · Upravil/a: Joker
TomasJ:
„Jen jsem chtěl vědět zda má být za textem \n aby funkce začla číst znovu, další řádek“ Ano. „A ještě bych ocenil kdyby byl někdo tak laskavý a napsal mi jaké parametry“ Od toho je přece manuál, stačí tady v kódu kliknout na zvýrazněný název funkce. edit: Plus jsem na manuál odkazoval už v #3 |
||
TomasJ Profil |
#11 · Zasláno: 19. 2. 2010, 20:33:26 · Upravil/a: TomasJ
Joker:
Děkuji za radu s tím použitím funkce file();, vše funguje jak má. Moc děkuji. > „Jen jsem chtěl vědět zda má být za textem \n aby funkce začla číst znovu, další řádek“ > Ano. Zkoušel jsem to s \n i bez ... zjistil jsem že tam \n vůbec být nemusí, naopak ještě se pak tváří, že patří k cestě souboru. No takže jak jsem to vyřešil(pro ty, kteří budou chtít načítat obsah stejným způsobem jako já): Struktura souboru, ze kterého mají být načteny adresy (pojmenuji example.txt ... nečekaně): cesta_k_soubou_1.mp3 cesta_k_souboru_2.mp3 Teď samotný extrémně dlouhý(ironicky) kód: <?php $cesty_k_souborum = file('example.txt'); ?> to je vše. Abych zjistil, zda funguje správně přidal jsem ke kódu ještě tento a nechal jsem vypsat všechny řádky s pomocí funkce for() <?php for($a=0;$a<strlen($cesty_k_souborum);$a++) { echo "Řádek číslo ".$a+1. " - Obsah řádku: ".$cesty_k_souborum[$a]."<br>"; // to $a+1 je kvůli tomu aby se nevypsal řádek číslo 0 (drobnost) } ?> Výsledek mi opravdu ukázal všechny řádky... Takže Děkuji Jokerovi za dobrou radu, ale i Raňajka za snahu. Snaha se přece taky cení. Moc děkuji. |
||
Časová prodleva: 14 let
|
0