Hulp bij het debuggen van skeletten

SPIP bevat enkele functies die de webmaster van dienst kunnen zijn tijdens de ontwikkeling van de skeletten voor de verschillende pagina’s van zijn website.
Deze functies komen beschikbaar door het toevoegen van specifieke variabelen aan de URL van de opgeroepen pagina.

De parameters «var_mode» en «var_profile» kunnen worden toegepast door toevoeging van ?var_mode=... (bijvoorbeeld: -titre-de-rubrique-?var_mode=...), of &var_mode=... (bijvoorbeeld: spip.php?article3&var_mode=...) aan de URL van de opgevraagde pagina.
Ze voeren hun functionaliteit uitsluitend aan bij een aangemelde beheerder van de site.

var_mode=calcul   en   var_mode=recalcul

Het aanroepen van «var_mode=recalcul» zorgt voor het herberekenen van de PHP code (een nieuwe compilatie van het skelet) gevolgd door een nieuwe aanmaak van de HTML code en een verversing van de cache (van waaruit de pagina zal worden weergegeven).
De recalcul van de pagina zorgt ook voor de regeneratie van de gecomprimeerde stylesheets (css) en de JavaScript.
De recalcul heeft geen effect op afbeeldingen (waaronder logo’s, ...).

Je kunt de pagina met deze parameter oproepen door te klikken op «pagina herberekenen» in de knoppenbalk voor beheerders;

var_mode=calcul

Een eerste klik roept «var_mode=calcul» aan (wanneer de titel wordt gevolgd door een ster, wat aangeeft dat hij uit de cache komt).

var_mode=recalcul

Een tweede klikt roept «var_mode=recalcul» aan.

Let op: Je zou tot de verleiding kunnen komen &var_mode=recalcul in de links van je skeletten op te nemen (om bijvoorbeeld een verversing te forceren). Dit wordt ten zeerste afgeraden omdat het zeer veel resources van de server vraagt.

var_mode=inclure

De parameter «var_mode=inclure» toont de naam en het pad van iedere opgeroepen skelet of model waaruit de pagina is opgebouwd.

Doel is om te verifiëren dat de oproepen door het skelet daadwerkelijk gebeuren.

var_profile=1

De parameter «var_profile=1» geeft het detail van de SQL-queries en hun berekeningsduur weer. De queries worden gesorteerd beginnend met de meest tijdrovende.

Deze functie maakt duidelijk waarom een pagina een lange responsetijd heeft.
Je ziet de queries die elke lus in het skelet (en in de aangeroepen skeletten) maakt, maar ook die zonder lus.

Je vindt terug:

  • voor iedere lus
    • hoeveel keer de lus (dus de SQL-query) werd uitgevoerd,
    • de tijd (in seconden) die de lus nodig had (de tijd per query vermenigvuldigd met het aantal uitgevoerde lussen),
    • de lijst (op chronologische volgorde gesorteerd van alle door de pagina gegenereerde queries) van iedere uitvoering van de query (die als link dient naar het details van elk van hen).
  • de queries zonder lus
  • de totaaltijd voor alle queries op de pagina
  • het detail van iedere query uitgevoerd met
    • een statische tabel die de uitleg van de query geeft,
    • de naam van de query.
Let op: Denk eraan de pagina te berekenen (&var_profile=1&var_mode=calcul) om te voorkomen dat niet de cache wordt gelezen, met onjuiste informatie als gevolg.

var_mode=preview

Het aanroepen van «var_mode=preview» vanaf het privé gedeelte toont op de publieke site hoe een artikel er uit zal zien, hoewel het nog niet is gepubliceerd.

var_mode=urls

Het aanroepen van «var_mode=urls» forceert de update van alle URL’s van de pagina.

var_mode=debug

Het aanroepen van «var_mode=debug» geeft een detail van het aanmaken van de pagina (SPIP lussen - SQL queries - PHP code - statistieken van de SQL queries).

Deze pagina toont voor het skelet van de pagina en alle ingesloten skeletten:

  • de lijst van waardes van contextvariabelen (#ENV) van het aanroepende skelet,
  • de lijst van lussen.

Verschillende links geven toegang tot:

  • skelet (squelette)
    de code van het skelet (zo hoef je dus geen toegang te hebben tot het .html bestand om de inhoud te bekijken),
    • resultaat (résultat)
      de door het skelet zelf gegenereerde code (zonder eventuele insluitingen) die, wanneer geëvalueerd de HTML aan de browser zou sturen,
    • code
      de door de compiler gegenereerde PHP code (een analyse voor ervaren ontwikkelaars) die, wanneer uitgevoerd, het resultaat levert (zie hierboven),
    • berekening (calcul)
      het detail van de SQL queries en voor ieder de berekentij (zie var_profile).
  • lus (boucle)
    de volledige code van de lus (van <B_abc> tot <//B_abc>),
    • resultaat (résultat)
      de door de lus uitgevoerde SQL query,
      een lijst van de eerste door de lus teruggegeven resultaten [1],
    • code
      de PHP code (gegenereerd door de compiler) van een specifieke aan de lus gekoppelde functie (analyse voor ervaren ontwikkelaars),
    • berekening (calcul)
      het detail en de betrekeningstijd van de aan de lijst gekoppelde SQL query (zie hierboven var_profile).

var_mode=traduction

De parameter var_mode=traduction maakt de analyse mogelijk van op de pagina gebruike taalstrings. De aanwezige taalstrings worden met een andere achtergrond weergegeven:

  • de vertaalde strings zijn onderstreept en een infobubbel geeft de bron en de de taal wanneer ermet de muis overheen wordt bewogen
  • niet bestaande taalstrings knipperen rood.

SVP deblokkeren

Er zijn twee var_mode’s toepasbaar op SVP (op de beheerpagina van plugins):

-  var_mode=vider_paquets_locaux geeft SVP aan een herberekening te doen van de gegevens van de lokaal aanwezige plugins (dus in plugins/ en plugins-dist/).

-  var_mode=reinstaller_svp is nog ingrijpender: het verwijdert SVP (en het zal zich vervolgens opnieuw installeren).

Dus vermoed je een probleem in SVP, probeer het dan eerst te corrigeren. In het tweede geval zul je de parameters van SVP eventueel opnieuw moeten configureren.

Hoe kun je nog meer debug-informatie verkrijgen

Door het aanpassen van config/mes_options.php:

Naam van de constanteWaardesOmschrijving
_NO_CACHE -1,0,1 De cache uitschakelen
_INTERDIRE_COMPACTE_HEAD_ECRIRE false,true De cache voor CSS en Javascript uitschakelen
SPIP_ERREUR_REPORT E_ALL Alle fouten in SPIP weergeven
$GLOBALS[’taille_des_logs’] waarde in kB Grootte van de logbestanden
_MAX_LOG aantal regels Beperkt de grootte van de logbestanden tot n regels
_LOG_FILELINE false,true Voegt aan de log de bestandsnaam, het regelnummer en de naam van de functie toe die de log genereerden
_LOG_FILTRE_GRAVITE 1 tot 8 Detailniveau van de logs
_DEBUG_SLOW_QUERIES false/true SQL log
_BOUCLE_PROFILER waarde in ms Opvolgen van lussen die meer dan n ms duren

- De cache van SPIP uitschakelen

<?php
define('_NO_CACHE', -1);
?>

of door middel van de knop in de configuratie van SPIP 3: "De cache tijdelijk uitschakelen"

- De CSS en Javascript cache (bestanden in local/cache-js/ en local/cache-css/ uitschakelen

<?php
define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', true);
?>

-  Foutrapportage van PHP inschakelen

<?php
error_reporting(E_ALL^E_NOTICE);
ini_set ("display_errors", "On");
?>

-  Alle fouten in SPIP weergeven

<?php
define('SPIP_ERREUR_REPORT',E_ALL);
?>

-  De grootte van de logbestanden verhogen naar 500 kB

<?php
$GLOBALS['taille_des_logs'] = 500;
?>

-  Logbestanden beperken tot 500000 regels

<?php
define('_MAX_LOG', 500000);
?>

-  Aan de gegevens in de logbestanden de bestandsnaam, het regelnummer en de functie toevoegen die de regel in het logbestand genereerde

<?php
define('_LOG_FILELINE',true);
?>

-  Alles loggen (SPIP3)

<?php
define('_LOG_FILTRE_GRAVITE',8);
?>

-  Een log toevoegen voor alles wat met autorisatie te maken heeft (functie autoriser_dist). Deze constante bestaat niet meer vanaf SPIP 3.1

<?php
define('_DEBUG_AUTORISER', true);
?>

-  Vanaf SPIP 2.1.22 en 3.0.9 geeft deze optie aan dat in de MySQL log (log/mysql-slow.log) de URL van "trage" queries moet worden toegevoegd

<?php
define('_DEBUG_SLOW_QUERIES', true);
?>

-  Vanaf SPIP 3.0.9 (en in SPIP 2.1 met de plugin «itérateurs») maakt deze optie het volgen mogelijk van lussen die meer dan 5 seconde (5000 ms) verwerkingstijd vragen

<?php
define('_BOUCLE_PROFILER', 5000);
?>

Als samenvatting en UITSLUITEND toe te passen op een site in ONTWIKKELING, zou je deze (toevoegingen aan) config/mes_options.php kunnen gebruiken:

<?php
define('_NO_CACHE', -1);
define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', true);
error_reporting(E_ALL^E_NOTICE);
ini_set ("display_errors", "On");
define('SPIP_ERREUR_REPORT',E_ALL);
$GLOBALS['taille_des_logs'] = 500;
define('_MAX_LOG', 500000);
define('_LOG_FILELINE',true);
define('_LOG_FILTRE_GRAVITE',8);
define('_DEBUG_SLOW_QUERIES', true);
define('_BOUCLE_PROFILER', 5000);

Voetnoot

[1je kunt het aantal aanpassen door in het bestand mes_options.php in map config/ de volgende regel toe te voegen: define('_MAX_DEBUG_AFF', 'n');
(de standaardwaarde voor «n» is 50).

Bekijk ook:

Auteur Hanjo Gepubliceerd op: Aangepast: 04/11/24

Vertalingen: عربي, English, français, Nederlands, українська