Autor Zpráva
hynek123456
Profil
Ahoj,
jakým příkazem vypnu zobrazování chyb? děkuji.
lionel messi
Profil
hynek123456:
Na začiatku skriptu:
<?php
    ini_set('display_errors', 'Off');
    error_reporting(0);
Moderátor Joker: Varování: Toto sice technicky je odpověď na uvedenou otázku, ale mělo by se to používat jen pokud skutečně dobře víte, co děláte.
Ve většině případů je to chybně, skutečný problém to nevyřeší a naopak to další problémy způsobí. Viz diskuse níže.
alebo v php.ini (globálnom konfiguračnom súbore PHP):
display_errors = Off 
error_reporting = 0
hynek123456
Profil
Děkuji :)
juriad
Profil
hynek123456:
Měj však na paměti, že pro vývoj webu bys měl vždy mít zobrazovaní chyb zapnuté. Jen na produkčním serveru ho pak vypnout.
Zakázat zobrazení chyb není jejich řešení.
hynek123456
Profil
no, asi takhle, dělal jsem fotogalerii na tlačítka, aby se ty fotky posunovali, ale jelikož jsem amatér tak jsem si vymyslel vlastní způsob který určitě nebyl nejlepší. Bylo to na principu, že kliknu na fotku (to byli takové šipky) a ona se přičte hodnota do proměnné. Fotky se jmenovali "fotogXX" a místo XX, byla proměnná která se měnila ale potřeboval jsem vyřešit problém a to takový, že když proměnná nabude větší hodnoty než je max. číslo fotky, zobrazují se jen čtverečky. Tak jsem to udělal tak že jsem udělal podmínky, když je to větší než to max. číslo (ručně nastavené, protože se web se měnit nebude) fotky, tak se tomu vrátí předchozí hodnota a stránka se refresne... no, funguje to jak chci, ale hází mi to tam chybu když se dostanu na konec. Každopádně mi to nějak nejde, je to takhle správně?

                            <a name="home3"></a>
                            <h1>Fotogalerie</h1>
                            <?php
                            $cislo = 1;
                            if(isset($_GET['cislo'])){
                                $cislo = (int)$_GET['cislo'];
                            }
                            $cislo1 = $cislo + 1;
                            if($cislo < 0) {
                                $cislo = 0;
                                $cislo1 = $cislo + 1;
                                header('location:index.php');
                            }
                            if($cislo > 45) {
                                $cislo = 45;
                                $cislo1 = $cislo + 1;
                                header('location:index.php');
                            }
                            ?>
                            <div id="galerie">
                                <a href="?cislo=<?php echo $cislo - 1;?>#home3"><img src="sipkyproweb.png" id="sipka1"></a>
                                <img src="foto/fotog<?php echo $cislo;?>.jpg" id="fgal0">
                                <img src="foto/fotog<?php echo $cislo1;?>.jpg" id="fgal1">
                                <a href="?cislo=<?php echo $cislo + 1;?>#home3"><img src="sipkyproweb2.png" id="sipka2"></a>
                            </div>



Tady je to jak to mám, tamto je staré, je to tady dobře?

                            <a name="home3"></a>
                            <h1>Fotogalerie</h1>
                            <?php
                            $cislo = 1;
                            if(isset($_GET['cislo'])){
                                $cislo = (int)$_GET['cislo'];
                            }
                            $cislo1 = $cislo + 1;
                            if($cislo < 0) {
                                $cislo = 0;
                                $cislo1 = $cislo + 1;
                                header('location:index.php');
                                ini_set('display_errors', 'Off');
                                error_reporting(0);
                            }
                            if($cislo > 45) {
                                $cislo = 45;
                                $cislo1 = $cislo + 1;
                                header('location:index.php');
                                ini_set('display_errors', 'Off');
                                error_reporting(0);
                            }
                            ?>
                            <div id="galerie">
                                <a href="?cislo=<?php echo $cislo - 1;?>#home3"><img src="sipkyproweb.png" id="sipka1"></a>
                                <img src="foto/fotog<?php echo $cislo;?>.jpg" id="fgal0">
                                <img src="foto/fotog<?php echo $cislo1;?>.jpg" id="fgal1">
                                <a href="?cislo=<?php echo $cislo + 1;?>#home3"><img src="sipkyproweb2.png" id="sipka2"></a>
                            </div>
mimochodec
Profil
hynek123456:
Není to správně. Na začátku stránky si načti $cislo = (int)$_GET['cislo'];, pak ošetři případné vybočení z mezí (if($cislo < 0) { $cislo = 0;}) a obdobně pro horní mez. Pak vypiš to, co teď je od ř. 24.
Toto v podstatě už děláš. Čeho chceš dosáhnout zařazením toho přesměrování?
hynek123456
Profil
o to nejde, kód mi funguje, teď potřebuju příkaz aby to nevypisovalo tu chybu
juriad
Profil
Problém je v té funkci header, kterou voláš v místě, kde to není dovolené (uprostřed stránky). Celý skrpt bych udělal jinak.
1) Nepřesměrovávat, pokud je hodnota chybná - prostě se zobrazí obrázky stejně jako by nebyla zadána vůbec.
2) Nezobrazovat šipky v případě, že jsme na konci.Nebo tedy zobrazit, ale ne funkční šipky.

<?php

# tyto proměnné můžeš změnit, a pak se změní výpis galerie.
$cisloPosledniFotky = 45;
$pocetZobrazenychFotek = 2;

if (isset($_GET['cislo'])) {
  # v URL se vyskytlo atribut číslo
  # ať už to je co je, uděláme z toho int
  $cislo = (int) $_GET['cislo'];
  # zajistíme, že nebude mimo rozsah
  $cislo = max(min($cislo, $cisloPosledniFotky - $pocetZobrazenychFotek + 1), 1);
} else {
  # atribut v adrese nebyl
  # výchozí hodnota je 1
  $cislo = 1;
}
# teď je v proměnné cislo číslo v povoleném rozsahu
?>

<div id="galerie">
<?php
if ($cislo > 1) {
  # můžeme jít dolů, protože po odečtení jedničky bude číslo stále alespoň 1.
  # zobrazime sipku v odkazu
  echo '<a href="?cislo=' . ($cislo - 1) . '#home3"><img src="sipkyproweb.png" id="sipka1"></a>';
} else {
  # nebo zobrazíme jinou šipku (například šedou), která nic nedělá
  echo '<img src="zakazanasipka.png">';
}

# v cyklu zobrazíme daný počet fotek
for ($i = 0; $i < $pocetZobrazenychFotek; $i++) {
  echo '<img src="foto/fotog' . ($cislo + $i) . '.jpg" id="fgal' . $i . '">';
}

# to samé pro druhou šipku
if ($cislo < $cisloPosledniFotky - $pocetZobrazenychFotek + 1) {
  echo '<a href="?cislo=' . ($cislo + 1) . '#home3"><img src="sipkyproweb2.png" id="sipka2"></a>'
} else {
  echo '<img src="zakazanasipka2.png">';
}
?>
</div>
Joker
Profil
lionel messi [#2]:
Není vhodné na otázku „jakým příkazem vypnu zobrazování chyb?“ prostě jen napsat příkaz bez zjišťování situace a bez dalšího komentáře.

U takové otázky je prakticky jisté, že tazatelův skutečný problém se vypnutím chybových hlášek nevyřeší a naopak mu to způsobí problémy další.


Dále display_errors budiž, to odpovídá na otázku, ale error_reporting(0) je spolehlivá cesta do pekel, resp. do „Skript nefunguje a netuším proč“.

Nastavení error_reporting má být ideálně vždycky reportovat všechno (ostrý server by mohl vynechat deprecated a strict), error_reporting(0) je obvykle špatně. Vývojový server by měl chyby zobrazovat podle vkusu vývojáře (pohodlné je vypisovat do stránky), ostrý server do logu. Z toho vyplývá, že nastavovat ty direktivy run-time přímo ve skriptu není úplně snadné (skript by měl zjišťovat, jestli je na vývojové nebo produkční platformě, druhá možnost je vždycky psát do logu a vývojář to holt bude číst z logu) a nedělal bych to, pokud je jiná možnost.
Další informace viz Základní kurz 5: Hledání a oprava chyb ve skriptu

hynek123456: Tak jak to je v [#5] to nedává smysl, header location by měla uživatele přesměrovat a nastavovat hlášení chyb pak už nemá cenu (ty chyby uživatel typicky neuvidí). Zato by za header location mělo být ukončení skriptu.
hynek123456
Profil
Joker, juriad, mimochodec, lionel messi:
Tak všem moc děkuji, už je to tak jak chci, díky moc! :)
lionel messi
Profil
Joker:
Ďakujem za dopísanie odstrašujúcej poznámky k [#2], vo všetkom máš pravdu.

Není vhodné na otázku „jakým příkazem vypnu zobrazování chyb?“ prostě jen napsat příkaz bez zjišťování situace a bez dalšího komentáře.
Toho som si vedomý, ale nechcel som, aby príspevok pôsobil ako rýpanie.

Dále display_errors budiž, to odpovídá na otázku, ale error_reporting(0) je spolehlivá cesta do pekel, resp. do ‚Skript nefunguje a netuším proč‘.
Moja chyba. Myslel som si, že display_errors je v podstate to isté, čo error_reporting. Bohužiaľ som si informácie vopred neoveril, čoho výsledkom bolo funkčné, ale nebezpečné riešenie (čo je asi najhoršia kombinácia).

Další informace viz Základní kurz 5: Hledání a oprava chyb ve skriptu
Práve na základe menej dôkladného prečítania uvedeného článku som si obe direktívy pomiešal (dokumentáciu ohľadne tejto problematiky som neštudoval). Viem presne, prečo k omylu prišlo a mal by som preto jeden návrh. Nebolo by vhodnejšie v zmienenom texte doplniť formuláciu: „První je error_reporting. To určuje, které chyby se budou zobrazovat.“ zhruba takto: „To určuje, které chyby se budou zobrazovat (případně zapisovat do logu podle hodnot dalších direktiv).“?

Ospravedlňujem sa za omyl, v budúcnosti budem pri písaní príspevkov dôslednejší.

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: