Kaip gauti php klaidas?

Aš patikrinau savo PHP ini failą, rodomos klaidos ir E_ALL klaidos E_ALL . Paleidžiau „Apache“ žiniatinklio serverį.

Šias eilutes aš netgi įdėjau į mano scenarijaus viršuje, o netgi nesuprantuu paprastų analizavimo klaidų. Pvz., Aš skelbiu kintamuosius su "$" , o ne uždarysiu pareiškimus ";" . Tačiau visi mano scenarijai rodo tuščią puslapį apie šias klaidas, bet noriu matyti klaidos mano naršyklėje.

 error_reporting(E_ALL); ini_set('display_errors', 1); 

Ką daryti?

1512
27 июня '09 в 22:09 2009-06-27 22:09 „Abs“ yra nustatytas birželio 27 d., 09:09 2009-06-27 22:09
@ 26 atsakymai

Jis visada veikia man:

 ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); 

Tačiau PHP to nepadaro, norėdamas aptikti analizavimo klaidas - vienintelis būdas parodyti šias klaidas yra pakeisti php.ini su šia eilute:

 display_errors = on 
2891
29 янв. atsakymą pateikė Fancy John sausio 29 d 2014-01-29 14:25 '14, 14:25 2014-01-29 14:25

Jūs negalite sugauti analizavimo klaidų, kai įjungiate vykdymo klaidų išvestį, nes ji analizuoja failą prieš tai, kai faktiškai atlieka ką nors (ir kadangi ji susiduria su klaida per tą laiką, ji nieko nedarys). Jums reikės pakeisti tikrąją serverio konfigūraciją, kad būtų įjungtas display_errors ir naudojamas tinkamas klaidų ataskaitų lygis. Jei neturite prieigos prie php.ini, galite naudoti .htaccess ar panašias paslaugas, priklausomai nuo serverio.

Šis klausimas gali suteikti papildomos informacijos.

139
27 июня '09 в 22:14 2009-06-27 22:14 atsakymą pateikė Michael Madsen, birželio 27 d., 09:14, 2009-06-27 22:14

Php.ini“ :

 display_errors = on 

Tada iš naujo paleiskite žiniatinklio serverį.

126
08 янв. Atsakymą pateikė user1803477 Jan 08 2013-01-08 12:27 '13, 12:27, 2013-01-08 12:27

Jei norite rodyti visas klaidas, turite:

1. Paimkite šias eilutes PHP skriptu, kurį skambinate iš naršyklės (paprastai index.php ):

 error_reporting(E_ALL); ini_set('display_errors', '1'); 

2. (a) Įsitikinkite, kad šis scenarijus neturi sintaksės klaidų.

arba ar

2. (b) Nustatyti display_errors = On į jūsų php.ini

Priešingu atveju, jis net negali paleisti šių dviejų eilučių!

Galite patikrinti, ar sintaksės klaidos jūsų scenarijuje vykdomos (komandų eilutėje):

 php -l index.php 

Jei įtraukiate scenarijų iš kito PHP scenarijaus, jis parodys sintaksės klaidas įtrauktame scenarijuje. Pavyzdžiui:

index.php

 error_reporting(E_ALL); ini_set('display_errors', '1'); // Any syntax errors here will result in a blank screen in the browser include 'my_script.php'; 

my_script.php

 adjfkj // This syntax error will be displayed in the browser 
87
29 янв. atsakymas, kurį pateikė andre Jan 29 2014-01-29 12:52 '14, 12:52 AM 2014-01-29 12:52

Kai kurie interneto prieglobos paslaugų teikėjai leidžia pakeisti PHP nustatymus .htaccess faile.

Galite pridėti šią eilutę:

 php_value display_errors 1 

Turėjau tą pačią problemą, kaip ir jūs, ir šis sprendimas jį išsprendė.

41
18 мая '13 в 18:01 2013-05-18 18:01 atsakymas pateikiamas Kalhua gegužės 18 d., 13 val ., 13 val. 2013-05-18 18:01

Gali būti, kad visi „klaidos pranešimų“ arba „rodymo klaidų“ nustatymai, atrodo, neveikia PHP 7. Taip yra dėl to, kad pasikeitė klaidų apdorojimas. Vietoj to, pabandykite:

 try{ // Your code } catch(Error $e) { $trace = $e->getTrace(); echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line']; } 

Arba iš karto išimkite išimtis ir klaidas (tai nėra suderinama su PHP 5):

 try{ // Your code } catch(Throwable $e) { $trace = $e->getTrace(); echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line']; } 
32
28 марта '16 в 22:26 2016-03-28 22:26 atsakymą pateikė Frank Forte kovo 28 d., 16 val. 22:26 2016-03-28 22:26

Tai veiks:

 <?php error_reporting(E_ALL); ini_set('display_errors', 1); ?> 
27
05 мая '14 в 16:23 2014-05-05 16:23 atsakymą pateikė Mahendra Jella gegužės 05 d. 14 d. 16:23 2014-05-05 16:23

Naudoti:

 ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); 

Tai yra geriausias būdas jį rašyti, bet sintaksės klaida suteikia tuščią išvestį, todėl naudokite konsolę, kad patikrintumėte sintaksės klaidas. Geriausias būdas ištaisyti PHP kodą yra naudoti konsolę; atlikite šiuos veiksmus:

 php -l phpfilename.php 
26
04 мая '16 в 22:14 2016-05-04 22:14 Atsakymą pateikia „ Abhijit Jagtap “ gegužės 16 d. 16 val. 14:14 2016-05-04 22:14

Įdiekite ją savo index.php faile:

 ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); 
16
26 сент. atsakymą pateikė „ Sumit Gupta 26“ sep. 2017-09-26 15:32 '17, 15:32 2017-09-26 15:32

Sukurti failą, pavadintą php.ini , aplanke, kuriame yra jūsų PHP failas.

Į php.ini vidų pridėkite šį kodą (pateikiu paprastą klaidos kodą):

 display_errors = on display_startup_errors = on 
15
31 марта '15 в 21:38 2015-03-31 21:38 atsakymas pateikiamas „ NavyaKumar“ kovo 31 d. 15 val. 21:38 2015-03-31 21:38

Čia yra PHP scenarijus:

 <?php ini_set("display_startup_errors", 1); ini_set("display_errors", 1);  error_reporting(E_ALL); echo(abc);  ?> 

Išsamesnį PHP klaidų paaiškinimą rasite PHP klaida - error_reporting () .

13
11 янв. Atsakymą pateikė B.Balamanigandanas sausio 11 d. 2016-01-11 15:37 '16 at 15:37 2016-01-11 15:37

Jei, nepaisant visų pirmiau pateiktų atsakymų (arba negalite redaguoti php.ini failo), vis tiek negalite gauti klaidos pranešimo, pabandykite sukurti naują PHP failą, kuriame bus klaidų ataskaita, ir tada įtraukite problemos failą. pavyzdžiui:

 error_reporting(E_ALL); ini_set('display_errors', 1); require_once('problem_file.php'); 

Nors viskas yra teisingai nustatyta php.ini , tai buvo vienintelis būdas sugauti vardų klaidą. Mano tikslus scenarijus yra:

 //file1.php namespace a\b; class x { ... } //file2.php namespace c\d; use c\d\x; //Dies because it not sure which 'x' class to use class x { ... } 
11
24 апр. atsakymą pateikė jxmallett balandžio 24 d 2015-04-24 05:55 '15 at 5:55 2015-04-24 05:55

Naudodami „PHP“ kaip „Apache“ modulį, galime pakeisti konfigūracijos nustatymus naudojant „Apache“ konfigūracijos rinkmenų (pvz., „Http..conf“) ir „.htaccess“ direktyvas. Norėdami tai padaryti, jums reikės „AllowOverride Options“ arba „AllowOverride All“.

Patikrinkite

http://funbird.co.uk/blog/tech-articals/linux-tech-articals/enabled-error-display-php-via-htaccess

10
28 янв. atsakymas duotas mike 28 sausio. 2014-01-28 18:41 '14, 18:41 2014-01-28 18:41

Jūs galite padaryti kažką panašaus:

Pagrindiniame indekso faile nustatykite šiuos parametrus:

  ini_set('display_errors', 1); ini_set('display_startup_errors', 1); 

Tada, remiantis jūsų reikalavimais, galite pasirinkti, ką norite rodyti:

Dėl visų klaidų, įspėjimų ir pranešimų:

  error_reporting(E_ALL); OR error_reporting(-1); 

Dėl visų klaidų:

  error_reporting(E_ERROR); 

Visiems įspėjimams:

  error_reporting(E_WARNING); 

Visiems pranešimams:

  error_reporting(E_NOTICE); 

Daugiau informacijos rasite čia .

9
01 февр. Atsakymas duotas Binit Ghetiya 01 vasario mėn. 2017-02-01 10:33 '17 bent 10:33 2017-02-01 10:33

Kadangi šiuo metu dirbame su PHP 7, čia pateikti atsakymai nebegalioja. Vienintelis, kuris vis dar yra tvarkingas, yra tas, kurį sako Frankas Forte, kai jis kalba apie PHP 7

Kita vertus, užuot bandę sugauti klaidų su bandymu / gaudymu, galite naudoti šį triuką: naudoti įtraukti.

Čia yra trys kodai:

Failas: tst1.php

 <?php error_reporting(E_ALL); ini_set('display_errors', 'On'); // Missing " and ; echo "Testing ?> 

Vykdant šį veiksmą PHP 7 neparodys nieko.

Dabar pabandykite:

Failas: tst2.php

 <?php error_reporting(E_ALL); ini_set('display_errors', 'On'); include ("tst3.php"); ?> 

Failas: tst3.php

 <?php // Missing " and ; echo "Testing ?> 

Dabar paleiskite tst2, kuriame įdiegiamos klaidų ataskaitos, ir tada įjunkite tst3. Pamatysite:

Parsavimo klaida: sintaksės klaida, netikėtas failo pabaiga, laukiamas kintamasis (T_VARIABLE) arba $ {(T_DOLLAR_OPEN_CURLY_BRACES) arba {$ (T_CURLY_OPEN) tst3.php 4 eilutėje

9
20 мая '17 в 15:07 2017-05-20 15:07 atsakymą pateikė Peter Gegužės 20 d. 17, 15: 07-20-20 15:07

Jei kažkaip atsidursite tokioje situacijoje, kur negalite keisti nustatymo naudodami php.ini arba .htaccess , jums nepavyksta rodyti klaidų, kai PHP scenarijuose yra perskaitymo klaidų. Tada jums reikės leisti failus komandinėje eilutėje taip:

 find . -name '*.php' -type f -print0 | xargs -0 -n1 -P8 php -l | grep -v "No syntax errors" 

Jei jūsų kompiuteris užblokuotas, jis neleidžia keisti vertės per php.ini arba .htaccess , taip pat gali uždrausti keisti vertę per ini_set . Galite jį patikrinti naudodami tokį php scenarijų:

 <?php if( !ini_set( 'display_errors', 1 ) ) { echo "display_errors cannot be set."; } else { echo "changing display_errors via script is possible."; } 
9
11 янв. Atsakymas pateikiamas chiborg 11 jan. 2016-01-11 15:11 '16 at 15:11 2016-01-11 15:11

Paprastai naudoju šį kodą savo paprastame PHP projekte, kuris yra labai mažas. Jei projektas tampa didelis, rekomenduosiu:

 if(!defined('ENVIRONMENT')){ define('ENVIRONMENT', 'DEVELOPMENT'); } $base_url = null; if (defined('ENVIRONMENT')) { switch (ENVIRONMENT) { case 'DEVELOPMENT': $base_url = 'http://localhost/product/'; ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL|E_STRICT); break; case 'PRODUCTION': $base_url = 'Production URL';  error_reporting(0);  break; default: exit('The application environment is not set correctly.'); } } 
7
01 февр. Atsakymą pateikė Channelaveer Hakari 01 Feb. 2017-02-01 10:16 '17 bent 10:16 2017-02-01 10:16

Galite pridėti savo klaidų tvarkytoją, kuris gali suteikti papildomos derinimo informacijos. Be to, galite konfigūruoti, kad atsiųstumėte informaciją el. Paštu.

 function ERR_HANDLER($errno, $errstr, $errfile, $errline){ $msg = "<b>Something bad happened.</b> [$errno] $errstr <br><br> <b>File:</b> $errfile <br> <b>Line:</b> $errline <br> <pre>".json_encode(debug_backtrace(), JSON_PRETTY_PRINT)."</pre> <br>"; echo $msg; return false; } function EXC_HANDLER($exception){ ERR_HANDLER(0, $exception->getMessage(), $exception->getFile(), $exception->getLine()); } function shutDownFunction() { $error = error_get_last(); if ($error["type"] == 1) { ERR_HANDLER($error["type"], $error["message"], $error["file"], $error["line"]); } } set_error_handler ("ERR_HANDLER", E_ALL  ~E_NOTICE  ~E_STRICT  ~E_DEPRECATED); register_shutdown_function("shutdownFunction"); set_exception_handler("EXC_HANDLER"); 
6
04 июня '17 в 17:41 2017-06-04 17:41 atsakymas pateikiamas lintabá birželio 4 d. 17 d. 17:41 2017-06-04 17:41

Geriausias / paprastas / greitas sprendimas, kurį galite naudoti, jei tai yra greitas derinimas, yra apsupti kodą su išimties perėmimu. Štai ką aš darau, kai noriu išbandyti kažką greitai gamyboje.

 try { // Page code } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; } 
3
27 марта '17 в 5:31 2017-03-27 05:31 atsakymą pateikė Xakiru kovo 27 d. 17, 17:31 2017-03-27 05:31

Šis kodas turi veikti:

 error_reporting(E_ALL); 

Tačiau pabandykite redaguoti kodą telefone esančiame faile:

 error_reporting =on 
2
09 мая '17 в 6:28 2017-05-09 06:28 Wembo Mulumba atsakymas, pateiktas gegužės 09–17 d., 06:28 2017-05-09 06:28

Tiesiog parašykite:

 error_reporting(-1); 
1
13 янв. atsakymas pateikiamas jewelhuq 13 sausis 2017-01-13 21:56 '17 21:56 2017-01-13 21:56

Tai aš išmokau. Faile PHP.INI

 error_reporting = E_ALL display_errors = On 
1
27 апр. atsakymas pateikiamas Salam 27 balandžio. 2017-04-27 19:29 '17 at 7:29 pm 2017-04-27 19:29
 <?php // Turn off error reporting error_reporting(0); // Report runtime errors error_reporting(E_ERROR | E_WARNING | E_PARSE); // Report all errors error_reporting(E_ALL); // Same as error_reporting(E_ALL); ini_set("error_reporting", E_ALL); // Report all errors except E_NOTICE error_reporting(E_ALL  ~E_NOTICE); ? 

>

Kol jūsų svetainė yra gyva, failas php.ini saugumo sumetimais turėtų išjungti „display_errors“. Tačiau kūrimo aplinkoje gali būti įjungtas „display_errors“.

1
24 мая '18 в 11:48 2018-05-24 11:48 atsakymas yra atleistas nuo gegužės 24 d. 18 val. 11:48 2018-05-24 11:48

Jei įdiegėte „ Xdebug“, galite pakeisti visus nustatymus nustatydami:

 xdebug.force_display_errors = 1; xdebug.force_error_reporting = -1; 

force_display_errors

Tipas: int, Numatytoji vertė: 0, Leidimas Xdebug> = 2.3. Jei šis parametras yra 1, klaidos visada bus rodomos, neatsižvelgiant į „display_errors“ PHP reikšmę.

force_error_reporting

Tipas: int, Numatytoji vertė: 0, Įrašyta į Xdebug> = 2.3 Šis parametras yra bitmask, kaip ir klaidų ataskaitos. Šis bitmas bus logiškai ARBA su bitmasku, kurį parodo error_reporting, kad nustatytų, kurios klaidos turėtų būti rodomos. Šis parametras gali būti nustatytas tik php.ini ir leidžia priversti rodyti tam tikras klaidas, neatsižvelgiant į tai, ką programa naudoja su ini_set ().

0
19 окт. Peter Haberkorn atsakymas, pateiktas spalio 19 d 2017-10-19 08:45 '17, 08:45, 2017-10-19 08:45

Galite naudoti šį kodą:

 ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); 
0
28 марта '19 в 15:42 2019-03-28 15:42 atsakymas pateikiamas mehdi kovo 28 d. 19, 15:42 2019-03-28 15:42

„Türkçe kaynak isteyenler burdan bakabilir“: https://hataayiklayici.com/discussion/6/php-de-hatalar-nasil-goesterilir#latest

-1
01 февр. Atsakymas pateikiamas Emre BOSTAN 01 vasario 1 d. 2019-02-01 22:42 '19, 22:42 pm 2019-02-01 22:42

Žr. Kitus klausimus žyma arba užduokite klausimą