Ik heb mijn PHP ini-bestand (php.ini
) gecontroleerd en display_errors
is ingesteld en ook de foutrapportage is E_ALL
. Ik heb mijn Apache-webserver opnieuw opgestart.
Ik heb deze regels zelfs bovenaan mijn script gezet, en het vangt zelfs geen simpele parseerfouten op. Ik declareer bijvoorbeeld variabelen met een "$"
en ik sluit geen statements";"
. Maar al mijn scripts tonen een blanco pagina over deze fouten, maar ik wil de foutenin de uitvoer van mijn browser zien.
error_reporting(E_ALL);
ini_set('display_errors', 1);
Wat valt er nog te doen?
Antwoord 1, autoriteit 100%
Dit werkt altijd voor mij:
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
Dit zorgt er echter niet voor dat PHP parseerfouten toont – de enige manier om die fouten te tonen is door je php.ini aan te passen met deze regel:
display_errors = on
(als je geen toegang hebt tot php.ini
, dan kan het plaatsen van deze regel in .htaccess
ook werken):
php_flag display_errors 1
Antwoord 2, autoriteit 5%
Je kunt geen parseerfouten opvangen als je de uitvoer van fouten tijdens runtime inschakelt, omdat het het bestand parseert voordat het daadwerkelijk iets uitvoert (en aangezien het hierbij een fout tegenkomt, zal het niets uitvoeren). U moet de feitelijke serverconfiguratie wijzigen zodat display_errors is ingeschakeld en het juiste error_reporting-niveau wordt gebruikt. Als je geen toegang hebt tot php.ini, kun je mogelijk .htaccess of iets dergelijks gebruiken, afhankelijk van de server.
Deze vraagkan aanvullende informatie opleveren.
Antwoord 3, autoriteit 4%
In uw php.ini:
display_errors = on
Herstart vervolgens uw webserver.
Antwoord 4, autoriteit 3%
Om alle fouten weer te geven, moet u:
1. Zorg dat deze regels in het PHP-script staan dat je vanuit de browser aanroept (meestal index.php
):
error_reporting(E_ALL);
ini_set('display_errors', '1');
2.(a) Zorg ervoor dat dit script geen syntaxisfouten bevat
—of—
2.(b) Zet display_errors = On
in uw php.ini
Anders kan het die 2 regels niet eens uitvoeren!
U kunt controleren op syntaxisfouten in uw script door het volgende uit te voeren (op de opdrachtregel):
php -l index.php
Als u het script opneemtvan een ander PHP-script, dan geeft het syntaxisfoutenweer in het meegeleverde-script. Bijvoorbeeld:
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
Antwoord 5, autoriteit 2%
Bij sommige webhostingproviders kunt u PHP-parameters wijzigen in het .htaccess
-bestand.
U kunt de volgende regel toevoegen:
php_value display_errors 1
Ik had hetzelfde probleem als het uwe en deze oplossing heeft het opgelost.
Antwoord 6
Het kan zijn dat alle instellingen voor “foutrapportage” of “weergavefouten” niet lijken te werken in PHP 7. Dat komt omdat de foutafhandeling is veranderd. Probeer in plaats daarvan dit:
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'];
}
Of, om uitzonderingen en fouten in één keer op te vangen (dit is niet achterwaarts compatibel met 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'];
}
Antwoord 7
Dit werkt:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
?>
Antwoord 8
Gebruik:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Dit is de beste manier om het te schrijven, maar een syntaxisfout geeft lege uitvoer, dus gebruik de console om te controleren op syntaxisfouten. De beste manier om PHP-code te debuggen is door de console te gebruiken; voer het volgende uit:
php -l phpfilename.php
Antwoord 9
Stel dit in in uw index.phpbestand:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Antwoord 10
Maak een bestand met de naam php.iniin de map waar uw PHP-bestand zich bevindt.
Voeg binnen php.ini de volgende code toe (ik geef een eenvoudige fout bij het weergeven van code):
display_errors = on
display_startup_errors = on
Antwoord 11
Omdat we nu PHP 7 gebruiken, zijn de hier gegeven antwoorden niet meer correct. De enige die nog in orde is, is die van Frank Forte, zoals hij het heeft over PHP 7.
Aan de andere kant, in plaats van te proberen fouten op te vangen met een try/catch, kun je een truc gebruiken: gebruik include.
Hier drie stukjes code:
Bestand: tst1.php
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
// Missing " and ;
echo "Testing
?>
Als u dit in PHP 7 uitvoert, wordt er niets weergegeven.
Probeer nu dit:
Bestand: tst2.php
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
include ("tst3.php");
?>
Bestand: tst3.php
<?php
// Missing " and ;
echo "Testing
?>
Voer nu tst2 uit waarmee de foutrapportage wordt ingesteld en voeg vervolgens tst3 toe. Je zult zien:
Parseerfout: syntaxisfout, onverwacht einde van bestand, verwacht variabele (T_VARIABLE) of ${ (T_DOLLAR_OPEN_CURLY_BRACES) of {$ (T_CURLY_OPEN) in tst3.php op regel 4
Antwoord 12
Als je ondanks het volgen van alle bovenstaande antwoorden (of als je je php.ini-bestand niet kunt bewerken), nog steeds geen foutmelding krijgt, probeer dan een nieuw PHP-bestand te maken dat foutrapportage mogelijk maakt en voeg dan de probleem bestand. bv:
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once('problem_file.php');
Ondanks dat alles correct was ingesteld in mijn php.ini
-bestand, was dit de enige manier waarop ik een naamruimtefout kon opvangen. Mijn exacte scenario was:
//file1.php
namespace a\b;
class x {
...
}
//file2.php
namespace c\d;
use c\d\x; //Dies because it's not sure which 'x' class to use
class x {
...
}
Antwoord 13
Ik zou normaal gesproken de volgende code gebruiken in mijn eenvoudige PHP-projecten.
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'; /* https://google.com */
error_reporting(0);
/* Mechanism to log errors */
break;
default:
exit('The application environment is not set correctly.');
}
}
Antwoord 14
Als u zich op de een of andere manier in een situatie bevindt waarin u de instelling niet kunt wijzigen via php.ini
of .htaccess
, heeft u pech omdat u fouten weergeeft wanneer uw PHP-scripts bevatten parseerfouten. Je zou dan moeten oplossen om de bestanden op de opdrachtregelals volgt te pluizen :
find . -name '*.php' -type f -print0 | xargs -0 -n1 -P8 php -l | grep -v "No syntax errors"
Als uw host zo vergrendeld is dat het niet toestaat de waarde te wijzigen via php.ini
of .htaccess
, kan het ook niet toestaan de waarde te wijzigen via ini_set
. Je kunt dat controleren met het volgende PHP-script:
<?php
if( !ini_set( 'display_errors', 1 ) ) {
echo "display_errors cannot be set.";
} else {
echo "changing display_errors via script is possible.";
}
Antwoord 15
Je kunt zoiets als hieronder doen:
Stel de onderstaande parameters in uw hoofdindexbestand in:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
Vervolgens kunt u op basis van uw vereisten kiezen welke u wilt laten zien:
Voor allefouten, waarschuwingen en mededelingen:
error_reporting(E_ALL); OR error_reporting(-1);
Voor allefouten:
error_reporting(E_ERROR);
Voor allewaarschuwingen:
error_reporting(E_WARNING);
Voor allekennisgevingen:
error_reporting(E_NOTICE);
Voor meer informatie, kijk hier.
Antwoord 16
U kunt uw eigen aangepaste fouthandler toevoegen, die extra foutopsporingsinformatie kan bieden. Bovendien kun je het instellen om je de informatie via e-mail te sturen.
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");
Antwoord 17
Deze code bovenaan zou moeten werken:
error_reporting(E_ALL);
Probeer echter de code op de telefoon in het bestand te bewerken:
error_reporting =on
Antwoord 18
De beste/gemakkelijke/snelle oplossing die je kunt gebruiken als het om snel debuggen gaat, is om je code te omringen met catch-uitzonderingen. Dat is wat ik doe als ik iets snel in productie wil controleren.
try {
// Page code
}
catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
Antwoord 19
<?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);
?>
Zolang je site live is, moet het bestand php.ini
om veiligheidsredenen display_errors hebben uitgeschakeld. Voor de ontwikkelomgeving kan display_errors echter worden ingeschakeld voor het oplossen van problemen.
Antwoord 20
Schrijf gewoon:
error_reporting(-1);
Antwoord 21
U kunt dit doen door het php.ini-bestand te wijzigen en het volgende toe te voegen
display_errors = on
display_startup_errors = on
OF je kunt ook de volgende code gebruiken, omdat dit altijd voor mij werkt
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Antwoord 22
Als je Xdebughebt geïnstalleerd, kun je elke instelling overschrijven door het volgende in te stellen:
xdebug.force_display_errors = 1;
xdebug.force_error_reporting = -1;
force_display_errors
Type: int, Standaardwaarde: 0, Geïntroduceerd in Xdebug >= 2.3 Als dit
instelling is ingesteld op 1, dan worden fouten altijd weergegeven, ongeacht
wat de instelling van PHP’s display_errors is.force_error_reporting
Type: int, Standaardwaarde: 0, Geïntroduceerd in Xdebug >= 2.3
Deze instelling is een bitmasker, zoals error_reporting. Dit bitmasker wordt logisch geORd met het bitmasker weergegeven door error_reporting om te bepalen welke fouten moeten worden weergegeven. Deze instelling kan alleen worden gemaakt in php.ini en stelt je in staat om bepaalde fouten te forceren, ongeacht wat een applicatie doet met ini_set().
Antwoord 23
Misschien wil je deze code gebruiken:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Antwoord 24
Meld alle fouten behalve E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);
Alle PHP-fouten weergeven
error_reporting(E_ALL); or ini_set('error_reporting', E_ALL);
Alle foutrapportage uitschakelen
error_reporting(0);
Antwoord 25
Als het op de opdrachtregel staat, kun je php
uitvoeren met -ddisplay_errors=1
om de instelling in php.ini
te negeren:
php -ddisplay_errors=1 script.php
Antwoord 26
U kunt op eenvoudige manieren een PHP-fout in uw display weergeven.
Plaats eerst deze onderstaande code in uw php.ini-bestand.
display_errors = on;
(als je geen toegang hebt tot php.ini, kan het plaatsen van deze regel in .htaccess ook werken):
php_flag display_errors 1
OF je kunt ook de volgende code gebruiken in je index.php-bestand
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Antwoord 27
In Unix CLIis het erg praktisch om alleen fouten naar een bestand:
./script 2> errors.log
Gebruik vanuit je script ofwel var_dump()
of een equivalent zoals gewoonlijk (zowel STDOUT als STDERR zullen de uitvoer ontvangen), maar om alleen in het logbestandte schrijven:
fwrite(STDERR, "Debug infos\n"); // Write in errors.log^
Dan vanuit een andere shell, voor live wijzigingen:
tail -f errors.log
of gewoon
watch cat errors.log
Antwoord 28
error_reporting(1);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
Zet dit bovenaan je pagina.