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;
to najde správnou $path (t.j. slozka-prvni nebo slozka-druha, ale kopanec je v $nazev[1], který má stejný název prvního souboru u všech záznamů. Tzn., že po spuštění celého scriptu se do souboru.xml uloží
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
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
TomasJ:
hurá, zachránce, to už je zoufalost...
Uvozovky odstraněny (php se učím) a doplnil jsem to takto:
echo $file;
break;
a nevypíše to nic. Je to možné?
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
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";
Dovolil jsem si přehodit ti uvozovky s apostrofy abys nemusel spojovat řetězec :)
---------------------------------------------------------------------------------------------------------------------------------------
Kdo by se náhodou divil, proč jsem to sem psal, ptal se jak dostane název souboru do proměnné $vystup.
Milkys
Profil
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: