show_source()
In questo articolo ci concentreremo sulla funzione PHP show_source(), con panoramica, funzionamento ed esempi pratici d'uso.
In questo articolo ci concentreremo sulla funzione PHP show_source(). Ne esamineremo la sintassi, i parametri e il valore restituito, mostreremo esempi funzionanti, spiegheremo quando utilizzarla e analizzeremo i rischi di sicurezza da evitare.
Cos'è la funzione show_source()?
La funzione show_source() legge un file PHP e ne stampa il contenuto nel browser come HTML con evidenziazione della sintassi — parole chiave, stringhe e commenti vengono racchiusi in tag <span> colorati in modo da rendere il codice facile da leggere.
show_source() è un alias di highlight_file(). Le due funzioni sono identiche in ogni aspetto; show_source() esiste principalmente per maggiore leggibilità. (Non bisogna confonderla con highlight_string(), che evidenzia una stringa di codice passata direttamente, anziché un file su disco.)
Sintassi
show_source(string $filename, bool $return = false): string|bool| Parametro | Descrizione |
|---|---|
$filename | Percorso del file PHP di cui si vuole evidenziare il sorgente. Obbligatorio. |
$return | Se true, il codice evidenziato viene restituito come stringa invece di essere stampato. Il valore predefinito è false. |
Valore restituito: quando $return è false, stampa il codice evidenziato e restituisce true in caso di successo o false in caso di errore. Quando $return è true, restituisce l'HTML evidenziato come stringa (senza stampare nulla).
Utilizzo di base
Passa il percorso del file da visualizzare. L'output evidenziato viene scritto direttamente nella pagina:
<?php
$file = 'example.php';
show_source($file);
?>Questo stampa il contenuto di example.php nel browser, racchiuso in tag <code> e tag <span> colorati. Poiché l'output è HTML, è pensato per essere visualizzato in un browser, non da riga di comando.
Catturare l'output invece di stamparlo
Imposta il secondo argomento a true quando vuoi l'HTML evidenziato come stringa — ad esempio per registrarlo, memorizzarlo nella cache o inserirlo in un template:
<?php
$highlighted = show_source('example.php', true);
// $highlighted now holds the HTML markup, e.g.:
// <code><span style="color: #0000BB"><?php ... </span></code>
echo strlen($highlighted) . " bytes of HTML\n";
?>Nulla viene inviato al browser finché non esegui tu stesso l'echo della stringa catturata.
Quando usarla?
- Documentazione e tutorial — mostra ai lettori un file di esempio esattamente come appare su disco, con evidenziazione.
- Debug in sviluppo — ispeziona rapidamente il contenuto effettivo di un file.
- Visualizzatori di snippet di codice — combina la modalità
$return = truecon il tuo sistema di template.
Per leggere semplicemente il contenuto grezzo di un file (senza evidenziazione), usa invece file_get_contents() o readfile().
Considerazioni sulla sicurezza
show_source() espone il codice sorgente completo di un file, inclusa qualsiasi logica, commento e credenziale in esso contenuta. Trattala come uno strumento esclusivamente per lo sviluppo.
Il rischio maggiore è passare input dell'utente come nome del file. Se un parametro della richiesta finisce in show_source(), un attaccante può leggere file arbitrari sul tuo server:
<?php
// DANGEROUS — never do this
show_source($_GET['file']); // ?file=../config/database.php
?>Per restare al sicuro:
- Non passare mai input utente non validato come nome del file. Usa una lista bianca dei file consentiti invece di fidarti della richiesta.
- Tieni
show_source()fuori dalla produzione. L'evidenziazione del sorgente appartiene agli ambienti di sviluppo e alle pagine di documentazione, non a un sito live. - Tieni presente che il sorgente evidenziato potrebbe rivelare password di database, chiavi API o altri segreti codificati direttamente nel file.
Riepilogo
show_source()stampa il codice sorgente di un file PHP come HTML con sintassi evidenziata.- È un alias di
highlight_file(); entrambe si comportano in modo identico. - Il secondo argomento opzionale (
$return) restituisce l'HTML come stringa invece di stamparlo. - Non passare mai input utente alla funzione e tienila fuori dalla produzione — può esporre l'intero codice sorgente.