Autor | Zpráva | ||
---|---|---|---|
Milkys Profil |
Hezký bílý podvečer,
Může mi prosím někdo zkušenější poradit co s tím dál? Takto mi to dělá co má tzn. najde 1. soubor ve složce. V "dalsi-slozka" jsou složky pojmenované např. "slozka-prvni" obsahující např."soubor1.jpg", "soubor15.jpg", "foto19.jpg", "dalsifoto.jpg" a "slozka-druha" obsahující např."foto24.jpg", "nazev-souboru.jpg", "foto29.jpg". $path = "slozka/dalsi-slozka/slozka-prvni"; if (is_dir("$path")) { if ($slozka = opendir("$path")) { while (false !== ($file = readdir($slozka))) { if ($file != "." && $file != "..") { $nazev[] = $file; } } if (empty($nazev)) { $vystup .= 'image="Složka existuje, ale je prázdná"'.$endline; } else { $vystup .= 'image="'.$path.'/'.$nazev[1].'"'.$endline; } closedir($slozka); } } else { $vystup = 'image="Složka neexistuje"'.$endline; } Ovšem když jsem tuto vrchní část kodu po otestování (dělalo to co potřebuji - vystup = slozka/dalsi-slozka/slozka-prvni/dalsifoto.jpg;) vložil do scriptu, (níže je uvedená jen část, domnívám se, že dostačující) tak zde $vystup .= 'image="'.$path.'/'.$nazev[1].'"'.$endline; slozka/dalsi-slozka/slozka-prvni/dalsifoto.jpg slozka/dalsi-slozka/slozka-druha/dalsifoto.jpg a já potřebuji, aby tam bylo: slozka/dalsi-slozka/slozka-prvni/dalsifoto.jpg slozka/dalsi-slozka/slozka-druha/foto24.jpg Chápeme se? Níže je výtvor co mě zlobí: <?php //....před tím je SELECT a následuje: while ($row = mysql_fetch_object($result)) { $id = $row->id; $path = "slozka/dalsi-slozka/$id"; if (is_dir("$path")) { if ($slozka = opendir("$path")) { while (false !== ($file = readdir($slozka))) { if ($file != "." && $file != "..") { $nazev[] = $file; } } if (empty($nazev)) { $vystup .= 'image="Složka existuje, ale je prázdná"'.$endline; } else { $vystup .= 'image="'.$path.'/'.$nazev[1].'"'.$endline; } closedir($slozka); } } else { $vystup .= 'image="Složka neexistuje"'.$endline; } } //...no a pak $vystup ukládám do souboru.xml. ?> Pro upřesnění while na začátku mi ty záznamy prochází a podle id je rozlišuji. Zná někdo nějakou vychytávku jak se to má dělat? Děkuji předem za reakce. |
||
Milkys Profil |
#2 · Zasláno: 16. 2. 2012, 22:49:42
Takže takto to funguje, jediná vada je ta, že to vypíše všechny soubory ($file) z příslušné složky. A já potřebuji vypsat jen jeden.
<?php // před tímto SELECT .... while ($row = mysql_fetch_object($result)) { $id = $row->id; $path = "slozka/dalsi-slozka/$id"; if (is_dir("$path")) { if ($slozka = opendir("$path")) { while (false !== ($file = readdir($slozka))) { if ($file != "." && $file != "..") { echo $file; } } } } } ?> |
||
TomasJ Profil |
Za tím
echo $file; zavolej break;
EDIT: A můžeš odstranit zbytečné uvozovky na řádcích 7 a 8 :) |
||
Milkys Profil |
#4 · Zasláno: 16. 2. 2012, 23:10:58
TomasJ:
hurá, zachránce, to už je zoufalost... Uvozovky odstraněny (php se učím) a doplnil jsem to takto: echo $file; break; |
||
TomasJ Profil |
Žádnou chybu ti PHP nehlásí?
while (false !== ($file = readdir($slozka))) { bych upravil na while(($file = readdir($slozka))===true) { ale asi to mít vliv nebude... break; zastaví cyklus takže by to mělo vypsat první a zastavit...
|
||
Milkys Profil |
TomasJ:
bez chyb a upozornění. Prostě se nic nevyechuje. |
||
Jan Tvrdík Profil |
#7 · Zasláno: 16. 2. 2012, 23:23:29
Milkys:
A když ten break zase smažeš, tak to funguje normálně? Zkus místo echo $file zavolat var_dump($file) .
|
||
Milkys Profil |
Jan Tvrdík:
ano, po smazaní break; to funguje jako předtím - vypíše to za sebou všechny názvy souborů z každé složky. Po zavolání var_dump($file); to vypíše: string(číslo-délka stringu) "jmeno_souboru.jpg" string(číslo-délka stringu) "dalsi-jmeno... string(číslo-délka stringu) "jmeno_souboru-zdruhe-slozky.jpg" string(číslo-délka stringu) "dalsi-jmeno... Přemýšlel jsem o explode, ale po rozsekání je každý soubor nulté pole... Fakt nevím, od oběda jsem se tímhle zasekal. |
||
Jan Tvrdík Profil |
Milkys:
Zvláštní. Funkce readdir z nějakého důvodu vrací prázdný řetězec. Buď můžeš upravit tu podmínku if ($file != "." && $file != ".." && $file != "") { nebo zkusit použít scandir: <?php // před tímto SELECT .... while ($row = mysql_fetch_object($result)) { $id = $row->id; $path = "slozka/dalsi-slozka/$id"; if (!is_dir($path)) continue; $files = scandir($path); foreach ($files as $file) { if ($file !== '.' && $file !== '..') { var_dump($file); break; } } } |
||
Milkys Profil |
Jan Tvrdík:
vypadá to, jsme na správné cestě. Je to dobré. DĚKUJI. |
||
TomasJ Profil |
Místo
echo $file; dáš $nazev_souboru = $file;
Pak tam kde ověřuješ jestli je $nazev_souboru prázdná či nikoliv, hodíš
$vystup.="image='$path/$nazev_souboru'$endline"; --------------------------------------------------------------------------------------------------------------------------------------- Kdo by se náhodou divil, proč jsem to sem psal, ptal se jak dostane název souboru do proměnné $vystup .
|
||
Milkys Profil |
#12 · Zasláno: 17. 2. 2012, 00:20:10
Potvrzuji, že jsem se na to ptal, jen TomasJ byl hodně rychlý.
Nakonec jsem to vyzkoušel a nepočítal jsem s tím, že to bude takovej fofr. Proto jsem to smáznul. Ještě jednou děkuji. Dobrou noc. |
||
Časová prodleva: 12 let
|
0