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