Autor Zpráva
JurkQo
Profil
Dobrý deň, mám takýto script:
<?php

    $handle = opendir("Videa");
    while (false !== ($file = readdir($handle))) {
            $filesall[] = $file;
}
        closedir($handle);

    for($i=0;$i<=count($filesall)-1;$i++){
        if(($filesall[$i] !== ".") && ($filesall[$i] !== "..")) {
            $files[count($files)]=$filesall[$i];
        }
    }




    for($i=0;$i<=count($files)-1;$i++){
    $files = $files[$i]." ";
   $rozdelene = explode(" ", $files);
   $Ok = $rozdelene[0]."%20".$rozdelene[1];
    printf("<A HREF=\"Videa/%s\">%s</A>",$ok ,$ok);
        echo("<br>");
;
    }




?>
No a mohol by som vedieť prečo mi to nefunguje?V tejto funkcii vypisujem odkazy na každý priečinok v adresári Videa, ale keď je v názve adresáru medzera tak to nefunguje pretože medzera je %20...
Tori
Profil
JurkQo:
$files[count($files)]
V PHP stačí $files[] = .... Koukněte na funkce rawurlencode / rawurldecode, to řešení přes explode je zbytečné (a spoléhá na to, že bude v názvu max.jedna mezera). Druhý cyklus (od ř.9) je navíc, tutéž kontrolu můžete provádět už před ř.5. A pokud jen vypisujete seznam souborů/složek, tak i ty řádky 22-23 bych dala do prvního cyklu.
crash01
Profil
Proč tak složitě?
<?php
$cesta = 'Videa';

$adresar = dir($cesta);
while ($soubor = $adresar->read())
{
    if($soubor != '.' and $soubor != '..' and ! is_dir($cesta.'/'.$soubor))
    {
        echo '<a href="'.$cesta.'/'.$soubor.'">'.$soubor.'</a>';
    }    
}
JurkQo
Profil
Script:
<?php
$cesta = '../Videa';
 
$adresar = dir($cesta);
while ($soubor = $adresar->read())
{
    if($soubor != '.' and $soubor != '..' and ! is_dir($cesta.'/'.$soubor))
    {
        echo '<a href="'.$cesta.'/'.$soubor.'">'.$soubor.'</a>';
    }    
}
?>
Chyba:
Warning: dir(../Videa): failed to open dir: No such file or directory in /DISK2/WWW/studiodirt.tk/www/PHP/Videa.php on line 4 Fatal error: Call to a member function read() on a non-object in /DISK2/WWW/studiodirt.tk/www/PHP/Videa.php on line 55
Tori
Profil
JurkQo:
Tohle jste předtím měl zrovna dobře: while (false !== ($soubor = readdir($adresar)))

crash01
Porovnání $filename !== false je pojistka pro složky/soubory s názvem "0".
JurkQo
Profil
A funkciu rawurlencode som trochu nepochopil, mohol(mohla) by si mi napísať príklad


Tori:
Nechápem( Programujem 2 roky a zatiaľ sa v tom tak nevyznám(mám 13))
crash01
Profil
JurkQo:
Warning: dir(../Videa): failed to open dir: No such file or directory in /DISK2/WWW/studiodirt.tk/www/PHP/Videa.php on line 4 Fatal error: Call to a member function read() on a non-object in /DISK2/WWW/studiodirt.tk/www/PHP/Videa.php on line 55
Chyba naznačuje, že hledaný adresář neexistuje. Jaká je zhruba adresářová struktura?

Tori:
Porovnání $filename !== false je pojistka pro složky/soubory s názvem "0".
Na to jsem zapomněl :) Díky

Takže i s ošetřením URL:

<
<?php
$cesta = '../Videa';
 
$adresar = dir($cesta);
while (false !== ($soubor = $adresar->read()))
{
    if($soubor != '.' and $soubor != '..' and ! is_dir($cesta.'/'.$soubor))
    {
        echo '<a href="'.rawurlencode($cesta.'/'.$soubor).'">'.$soubor.'</a>';
    }    
}
?
Tori
Profil
JurkQo:
Až teď jsem si všimla: na ř.19 ($files = $files[$i]." ";) - pokud název souboru neobsahuje mezeru, tak ji přidáváte na konec, tam by mohl být problém. Potom na ř.21-22 - názvy proměnných rozlišují velká písmena (na rozdíl od např. názvů funkcí), takže $Ok a $ok jsou dvě různé proměnné. rawurlencode by byla užitečná, pokud názvy souborů mohou obsahovat i další problémové znaky, třeba diakritiku:
echo '<a href="'.rawurlencode($soubor).'">'.$soubor.'</a>';
Jinak hledání fráze "výpis souborů" tady na diskusi najde celkem dost výsledků, např. Řazení výpisu souborů
JurkQo1
Profil *
Tak mohli by ste mi dať celý kód?

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: