Diskuze: galerie z tutoriálu

PHP PHP galerie z tutoriálu American English version English version

Avatar
exicap
Člen
Avatar
exicap:

Hoj,

v 5. dílu OOP seriálu PHP se zhotovuje galerie obrázků. Přesně takovou galerii jsem s i dle tutoriálu vytvořil i já, nicméně při spuštění mi to vyhazuje chybovou hlášku:
Fatal error: Call to a member function read() on boolean in C:\xampp\htdoc­s\galerie\tri­dy\Galerie.php on line 17

index.php:

<!DOCTYPE html>

<html lang="cs-cz">
<head>
    <meta charset="utf-8" />
    <title>Galerie obrázků</title>
</head>

<body>
<h1>Galerie obrázků</h1>
<?php
require_once('tridy/Galerie.php');

$galerie = new Galerie('obrazky', 5);
$galerie->nacti();
$galerie->vypis();
?>
</body>
</html>

Galerie.php:

<?php
class Galerie
{
    private $slozka;
    private $sloupcu;
    private $soubory = array();

    public function __constructor($slozka, $sloupcu)
    {
        $this->slozka = $slozka;
        $this->sloupcu = $sloupcu;
    }
    public function nacti()
    {
        $slozka = dir($this->slozka);

        while ($polozka = $slozka->read())
        {
            if (strpos($polozka, '_nahled.'))
                $this->soubory[] = $polozka;
        }
        $slozka->close();
    }
    public function vypis()
    {
        echo('<table><tr>');
        $pocet = 0;
        foreach ($this->soubory as $soubor) {
            $nahled = $this->slozka . '/' . $soubor;
            $obrazek = $this->slozka . '/' . str_replace('_nahled.', '.', $soubor);
            echo('<td><a href="' . htmlspecialchars($obrazek) . '"><img src="' . htmlspecialchars($nahled) . '" alt="" /></a></td>');
            $pocet++;
            if ($pocet >= $this->sloupcu)
                {
                $pocet = 0;
                echo('</tr><tr>');
                }
        }
        echo('</tr></table>');
    }
}

Neví prosím někdo co dělám špatně? Děkuji.

Editováno 12.2.2015 17:45
 
Odpovědět 12.2.2015 17:43
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na exicap
Matúš Petrofčík:

Funkcia dir(), teda u teba riadok

$slozka = dir($this->slozka);

vracia inštanciu triedy Directory, ktorej pridáva nejaké metódy (read, close...). V prípade chyby ale nevráti objekt, ale NULL ak sú nejaké zlé parametre, alebo FALSE v prípade nejakej inej chyby. Zisti si prosím čo sa po vykonaní tohto riadku nachádza v premennej $slozka.

Za ten príkaz pridaj

var_dump($slozka);
exit;

Ak tam bude objekt, tak je chyba niekde inde, ale ak tam bude FALSE alebo NULL, tak som chybu popísal vyššie.

V angličtine viac info: http://php.net/…tion.dir.php

edit: ja si myslím že máš zlú cestu k zložke.

Editováno 12.2.2015 18:09
Nahoru Odpovědět 12.2.2015 18:07
obsah kocky = r^2 ... a preto vlak drnká
Avatar
exicap
Člen
Avatar
Odpovídá na Matúš Petrofčík
exicap:

Máš pravdu, obsahem proměnné $slozka je opravdu false. Kde je ale chyba? Index.php mám normálně uložen v projektu a na stejné úrovni jako index se nachází složka obrazky a tridy. Myslím, že odkaz na složku je pak správný, není?

 
Nahoru Odpovědět 12.2.2015 19:14
Avatar
IT Man
Redaktor
Avatar
Odpovídá na exicap
IT Man:

Možná jde o to, že to otevírá soubor ve tridy. Ještě bych zkusil ../obrazky. :)

Nahoru Odpovědět 12.2.2015 19:21
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
exicap
Člen
Avatar
Odpovídá na IT Man
exicap:

To mě taky napadlo, ale ani tato úprava, případně přesunutí složky obrazky do složky tridy se zanecháním původního zápisu nepomohlo :-(.

 
Nahoru Odpovědět 12.2.2015 19:24
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na exicap
Matúš Petrofčík:

Skús tú cestu k súborom napísať inak, v indexe napr:

$galerie = new Galerie('/obrazky', 5); // podľa mňa riešenie

alebo

$galerie = new Galerie('/obrazky/', 5);

alebo

$galerie = new Galerie('./obrazky', 5);

a daj vedieť či pomohlo alebo nie.

Nahoru Odpovědět 12.2.2015 19:26
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na IT Man
Matúš Petrofčík:

Ee, ak dáš require (include) tak daný súbor sa stane súčasťou súboru, ktorý ho requiroval (includoval).

Nahoru Odpovědět  +1 12.2.2015 19:27
obsah kocky = r^2 ... a preto vlak drnká
Avatar
exicap
Člen
Avatar
exicap:

Nic. Ani jeden z těch zápisů nepomohl. Stále je obsahem false. Třeba je chyba někde jinde než v zápisu? Ovšem kde, to netuším.

edit: přidávám obrázek z IDE, třeba vám to pomůže

Editováno 12.2.2015 19:34
 
Nahoru Odpovědět 12.2.2015 19:29
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na exicap
Matúš Petrofčík:

Skúšaš to na localhoste? Hostingy na zmeny kódu niekedy reagujú s oneskorením.

Ja inde než v ceste k zložke chybu nevidím. Na php.net v ukážkach ľudia používali tvary /slozka a /slozka/

edit: možno to bude nastavením localhost serveru

Editováno 12.2.2015 19:40
Nahoru Odpovědět 12.2.2015 19:38
obsah kocky = r^2 ... a preto vlak drnká
Avatar
exicap
Člen
Avatar
Odpovídá na exicap
exicap:

http://imageshack.com/…7/Lj8NXT.jpg - takhle jsou poskládané ty složky a k tomu odkaz na ně v index.php

Jo, zkouším to přes localhost. Sám jsem z toho taky zmaten.

 
Nahoru Odpovědět 12.2.2015 20:00
Avatar
Michal Žůrek (misaz):

nevrací náhodou $slozka->read() i takové ty o adresář back, a podobné? Zkusi vy vypsat u jaké složky/položky se to zasekne.

Nahoru Odpovědět 12.2.2015 20:06
Nesnáším {}, proto se jim vyhýbám.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.