Autor | Zpráva | ||
---|---|---|---|
Orlando Profil * |
#1 · Zasláno: 8. 3. 2012, 17:34:55
Ahoj, na začátku stránky php mám tohle
error_reporting(E_ALL); ini_set("display_errors", 1); Jde to místo zobrazení na display, uložit do proměnné kterou bych si vypsal níže? Děkuji za řešení. |
||
aqua Profil |
#2 · Zasláno: 8. 3. 2012, 17:57:54
Zkus toto:
function FCE_errorLog($errno, $errstr, $errfile, $errline){ echo "<b>Chyba:</b> [$errno] $errstr<br />"; echo " Na radku: $errline v souboru <strong>".basename($errfile)."</strong><br />"; } set_error_handler("FCE_errorLog",E_ALL); error_reporting(E_ALL | E_STRICT); |
||
Orlando Profil * |
#3 · Zasláno: 8. 3. 2012, 18:32:51
Obávám se, že echo neřeší muj dotaz :-(
|
||
aqua Profil |
#4 · Zasláno: 8. 3. 2012, 18:39:02
Co brání tomu, to celé obalit DIVem a pomocí CSS jej zobrazit kdekoliv na stránce. Pokud tedy dotazu rozumím správně.
|
||
Orlando Profil * |
#5 · Zasláno: 8. 3. 2012, 18:52:23
Můj dotaz zněl: Jde to místo zobrazení na display, uložit do proměnné kterou bych si vypsal níže?
Co má společného css s naplněním proměnné :-) Potřebuji s tím dále pracovat... |
||
candiess Profil |
Orlando:
„Jde to místo zobrazení na display, uložit do proměnné kterou bych si vypsal níže?“ A co takhle místo echa si to hodit např do objektu a nebo zapisovat do souboru, session.... Nejlepší budeš mít udělat si objekt: <?php class err { var $main = ""; function add($str="") { $this->main.=$str; } function out() { return $this->main; } } //no a pak jak mát tu funkci.. $err = new err(); function FCE_errorLog($errno, $errstr, $errfile, $errline){ $err->add("<b>Chyba:</b> [$errno] $errstr<br />"); $err->add("Na radku: $errline v souboru <strong>".basename($errfile)."</strong><br />"); } ?> Je to surový kód, dále si to uprav podle libosti :) |
||
DarkMeni Profil |
#7 · Zasláno: 8. 3. 2012, 18:57:12
Do proměnné to můžeš uložit, když ji v tom kódě, co napsal aqua zavoláš globalem.
<?php set_error_handler('error_logging'); error_reporting(E_ALL); $error_log = array(); function error_logging($number, $report, $file, $line){ global $error_log; $error_log[] = array( 'fullreport' => "Error [$number]: $report.\nLocation: $file (line: $line).", 'errorno': => $number ); return true; } echo $a; //Vygeneruje chybu, $a není nikde v kódě nadefinovaný var_dump($error_log); ?> |
||
candiess Profil |
#8 · Zasláno: 8. 3. 2012, 18:57:45
EDIT: no a pak si ten error vytáhneš do proměnné přes $vystup = $err->out();
|
||
Tori Profil |
Orlando:
Můžete to ukládat do session (tak budete vědět i o chybách, ke kterým došlo např.mezi zpracováním údajů z formuláře a přesměrováním). Nebo si napsat třídu a ukládat to do členské proměnné - zároveň s tím můžete přidat i další metodu jako exception handler. Anebo logovat do souboru a občas do něj kouknout (nebo ho nechat vypsat někde na stránce). Nevím, jestli to je jen pro vás (= preferovala bych logování do souboru), nebo to mají vidět i uživatelé. candiess tak pozdě, pardon. Akorát by se jako error handler mohla rovnou registrovat metoda err::add(). |
||
Keeehi Profil |
#10 · Zasláno: 8. 3. 2012, 18:58:06
Orlando:
aqua měl na mysli nejspíše pozicování -> zobrazení kdekoliv na stránce. Jinak aqua ti ukázal způsob, jak "přesměrovat" výpis chyby do uživatelem definované funkce. To co si s tím v té fu aquakci uděláš, je už jen tvoje věc. aqua to rovnou vypisuje, ale předělat to na ukládání do proměnné snad není problém. |
||
candiess Profil |
#11 · Zasláno: 8. 3. 2012, 19:03:35
Tori:
Abych řekl pravdu, nemám vůbec praxi se zápisem tohoto typu, preferuji -> :) |
||
Keeehi Profil |
Případně se dá převést error na exception a hrát si pak s tím.
Důležitá je však funkce set_error_handler() . Zpracování je už pak na Orlandovi. Způsobů je hodně.
|
||
Orlando Profil * |
#13 · Zasláno: 8. 3. 2012, 19:28:00
Asi jsem začal od špatného konce, možná bude lepší napsat, co přesně potřebuji, je tady spoustu odborníků, a jistě mají lepší řešení než já.
1) Potřebuji zachytit veškeré úrovně chyb, E_ERROR, E_WARNING, E_PARSE, E_NOTICE atd.. atd.. atd.. 2) Veškeré takto "odchycené" chyby potřebuji na konci celého scriptu odeslat emailem 3) žádný výpis se nesmí dostat na screen Děkuji. |
||
candiess Profil |
#14 · Zasláno: 8. 3. 2012, 19:49:20
Orlando:
Tak zapoj hlavu, my udělali řešení a práce s proměnnýma přece není tak těžká, natož když vygoogliš funkci mail() tak si pohodově pošleš mejl kam potřebuješ.. Budu pracovat s tím mým objektem: - f-ci + objekt máš vytvořeno výše - pak jen $data = $err->out(); $message = "Chybové hlášení: ".$data; mail($mejla,$subject,$message); |
||
Keeehi Profil |
candiess:
Řekl bych, že uvnitř funkce tvůj objekt neexistuje, jelikož $err uvnitř a vně funkce jsou jiné proměnné. Toto je funkční: class Err { private static $instance; private $message; private function __construct() { self::clear(); } public static function getInstance() { if (!isset(self::$instance)) { self::$instance = new Err; } return self::$instance; } public function add($text) { $this->message .= $text; } public function get() { return $message; } public function clear() { $this->message = ""; } } Jediný rozdíl oproti používání tvojí funkce je to, že se objekt nevytváří pomocí new ale pomocí tohoto: $err = Err::getInstance(); + je potřeba vytvořit instanci objektu i uvnitř té funkce. Orlando: Tímto si docela zaspamuješ email. Při každém načtení nějakého chybového scriptu se odešle email. Pokud to bude nějaký hodně používaný, to bude emailů. Doporučil bych to udělat podobně jako to je v nette. Budeš mít soubor, kam se ti boudou logovat errory. Errory se budou postupně přidávat ke konci. No a pokud se bude něco mít zapsat do toho souboru, tak pokud bude prázdný, tak se odešle upozorňující email. Tudíž: Mám prázdný soubor -> vyskytne se chyba -> zjistí se, že je soubor přázdný = pošle se email a chyba se zapíše do toho souboru -> vyskytne se další chyba -> soubor není prázdný = email se neposílá, ale chyba se do souboru zapíše; ____ Všimneš si upozorňujícího emailu -> koukneš do souboru, co bylo za chyby -> ty opravíš -> soubor vyprázdníš ==> Vše je zase připraveno a jakmile se objeví nová chyba, soubor je prázdný = odesílá se upozornění > ... |
||
Orlando Profil * |
#16 · Zasláno: 8. 3. 2012, 21:13:26
Díky všem moc za pomoc a vyčerpávající informace ;)
|
||
_construct Profil * |
#17 · Zasláno: 8. 3. 2012, 23:09:18
error_reporting(0); function shutdown(){ print_r(error_get_last()); } register_shutdown_function('shutdown'); |
||
Časová prodleva: 14 let
|
0