Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Mohu vypnout zobrazování upozornění na serveru?

Aktivity
Avatar
Vojtěch Staša:15.5.2020 20:35

Při tvorbě webu v PHP jsem narazil na problém zobrazování upozornění (Notice: Undefined variable...) Celkem mi vadí, když mi kód funguje, ale je tam to upozornění. Našel jsem si, že zobrazování těchto zpráv mohu vypnout na serveru (v mém případě zatím localhost) funguje to správně (chyba tam není), ale přemýšlím, jestli při nahrání na hosting se znovu nezobrazí. Chci se teda jen zeptat, jestli zpravidla mají na serverech také vypnuté zobrazování těchto chyb? Máte někdo máte zkušenosti s takovýmto řešením? Popřípadě, jak to vyřešit jinak?

Zkusil jsem:

 
Odpovědět
15.5.2020 20:35
Avatar
Odpovídá na Vojtěch Staša
Neaktivní uživatel:15.5.2020 21:41

Jsou v podstatě 2 možnosti.

  1. Měl bys mít možnost toto nastavit v administraci hostingu. Každý dobrý hosting ti tuto možnost nabídne.
  2. Pokud to nemáš v nastavení hostingu, můžeš to nastavit přímo v PHP.

Pokud chceš zobrazovat vše kromě Notice, pak:

error_reporting(E_ALL & ~E_NOTICE);

Pokud nechceš zobrazovat žádné hlášky, pak

error_reporting(0);
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
15.5.2020 21:41
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Vojtěch Staša:15.5.2020 22:23

Díky!!! Netušil jsem, že stejný příkaz jde napsat zrovna do PHP souboru. Díky moc....

 
Nahoru Odpovědět
15.5.2020 22:23
Avatar
Odpovídá na Vojtěch Staša
Neaktivní uživatel:16.5.2020 10:34

Ano, jde :)

Případně další konfiguraci PHP můžeš provádět pomocí příkazu ini_set(). Ale toto může už být limitováno hostingem a půjde ti nastavit jen něco.

ini_set ( string $varname , string $newvalue ) : string
Nahoru Odpovědět
16.5.2020 10:34
Neaktivní uživatelský účet
Avatar
Vojtěch Staša:16.5.2020 10:42

A mohl by v tom být nějaký problém? Že si ty upozornění skryji a neřeším to... Jak to děláte Vy?(profesionální programátoři)

 
Nahoru Odpovědět
16.5.2020 10:42
Avatar
Milan Turyna
Tvůrce
Avatar
Milan Turyna:16.5.2020 12:29

Při vývoji se to nechává zobrazeno aby si věděl v čem je problém a ve výsledné verzi se to skrývá a nebo jsou další systémy třeba jako Tracy v Nette která dokáže detekovat IP adresy a zobrazí se jen určitým osobám.

Jinak místo toho řešit jak to skrýt, je lepší ten kód napsat tak aby to ty varování nepsalo.
Notice: Undefined variable znamená že přistupuješ k proměnné která není definována, nemá hodnotu. Jestli chceš tak sem pošli kód a celé upozornění.

Nahoru Odpovědět
16.5.2020 12:29
Řeš pouze to, co dokážeš ovlivnit.
Avatar
Vojtěch Staša:17.5.2020 12:23

Zdroják mám tady:

<?php
require "pripojeni.php";

if (isset($_GET['page'])) $page=trim(htmlspecialchars(strip_tags($_GET['page'])));
if ($page==''){
        $page="index";    // POZOR: Máš vypnuté upozornění na serveru! Dořešit!
}
$nazev='zadny';
$text='text - nic';
$dotaz='SELECT * FROM texty WHERE urlnazev="'.$page.'"';
$vysledek=mysqli_query($conn, $dotaz);
$zaznam=mysqli_fetch_array($vysledek);

        (isset($nazev) && $nazev=$zaznam['nazev']);
        (isset($text) && $text=$zaznam['text']);
        (isset($klicovaslova) && $klicovaslova=$zaznam['klicovaslova']);
        (isset($title) && $title=$zaznam['nazev'].' ');
        (isset($metapopis) && $metapopis=$zaznam['metapopis']);

if ($nazev=="") {
  echo '<html><meta http-equiv="REFRESH" content="0;index.php?page=error404"></html>'; die();
};
?>

Jsem začátečník... proto je to tak prasácky napsané :-) A ukazuje mi to toto: Notice: Undefined variable: page in C:\xampp\htdoc­s\radio_otoka\pri­prav-obsah.php on line 5

Pozn.: tento soubor mám připojený přes require do souboru index.php. Problém ale nastává, že při načtení úvodní stránky (index.php) mám proměnnou page prázdnou. Potřeboval bych ji buď hned při načtení stránky nastavit na hodnotu index, nebo tak, jak to mám udělané teď, když je proměnná page prázdná, zobrazí index.php. U druhého řešení ale naskočí právě ten problém s Notice: Undefined variable. Tak jsem to prostě vypnul. Mám ale výčitky svědomí, že jsem něco nevyřešil, ale jen utlumil.

 
Nahoru Odpovědět
17.5.2020 12:23
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:18.5.2020 8:05

To se dela jinak. Problem nastava tady:

// ok
if (isset($_GET['page'])) $page=trim(htmlspecialchars(strip_tags($_GET['page'])));

// chyba
if ($page==''){
        $page="index";    // POZOR: Máš vypnuté upozornění na serveru! Dořešit!
}

Jde o to, ze pokud neni v adrese page=123, tak nikde pred tim radkem, kde nastava chyba, nemas $page=cokoliv.
Takze je dobre to resit takto:

$page = isset($_GET['page']) ? $_GET['page'] : '';
// a az potom nasledne si s tim page delej nejake upravy
// a ty updavy bych provadel v tomto poradi:
// trim = smaz mezery ze predu a ze zadu = zkrati se delka string, zrychly dalsi operace
// strip_tag = smaz tagy = zkrati se delka string, zrychly dalsi operace
// htmlspecialchars = nahrad specialni znaky pro zobrazeni v html kodu
// (mel bys nahradit znaky & < > " a ')
$page = htmlspecialchars(strip_tags(trim($page)));
Editováno 18.5.2020 8:06
 
Nahoru Odpovědět
18.5.2020 8:05
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:18.5.2020 9:47

Jeste mozna neznas ten zapis, tak ti napisi dalsi moznosti, jak to zapsat.

$page = isset($_GET['page']) ? $_GET['page'] : '';
$page = !isset($_GET['page']) ? '' : $_GET['page'];
if (isset($_GET['page'])) {$page = $_GET['page'];} else {$page = '';}
$page = ''; if (isset($_GET['page'])) {$page = $_GET['page'];}
//if (!isset($page)) {return;} // pokud parametr funkce neni definovan, tak funkci ukonci. Pokud mas zapis ve funkci

Kazdy z tech zapisu ma jine vyhody a nevyhody. Je dobre vzdy zvazit, jake moznosti muzou nastavat nejcasteji a po te vybrat zpusob. Nas v programovani ucili, ze

  • kdyz mas zapis if, else, tak podminka by tam mela byt takova, ktera nastava nejcasteji
  • Proti tomu je ale zapis s returnem, kde vylucujes chybove moznosti pred tim, nez se spusti zbytek programu. Muze vest ke zpomaleni pri spravnem pouziti funkce. Nicmene se to pohodlneji zapisuje a ziskas lepsi prehled o podchyceni chybovych stavu. Ale da se to take pouzit k rychlemu ukonceni cyklu ve funkci, zavolanim misto break primo return
  • Pokud naplnis $page na zacatku, muze se stat, ze pri jinem nastaveni serveru si prepises i $_GET['page']. Tusim se to jmenuje superglobalni promenne. $page = $_GET['page'] = $_POST['page'] = $_REQUEST['page'] jsou jedna promenna. Takze je lepsi zapis if-else nebo?-: .
 
Nahoru Odpovědět
18.5.2020 9:47
Avatar
Vojtěch Staša:23.5.2020 13:10

Řekl bych, že lepší je if-else. Aspoň mně to tak funguje krásně. Děkuju všem za rady!

Díky.

 
Nahoru Odpovědět
23.5.2020 13:10
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 10 zpráv z 10.