Menu

Come eseguire un file PHP: riga di comando e server php -S

Esegui un file PHP dal terminale con php index.php, oppure servi una cartella nel browser con il server integrato di PHP: php -S localhost:8000. Non servono né Apache né XAMPP.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Per eseguire un file PHP, apri un terminale nella sua cartella e digita php index.php. PHP esegue il file e stampa il suo output nel terminale. Per vedere una pagina PHP in un browser, avvia il server integrato con php -S localhost:8000 e apri http://localhost:8000.

php index.php

Un primo index.php può essere di una sola riga. Premi Run: questo è esattamente ciò che stampa php index.php.

Il codice PHP va dopo il tag <?php. Tutto ciò che sta prima di quel tag viene stampato come testo semplice, ed è così che PHP mescola codice e HTML.

Eseguire un file PHP da riga di comando

La CLI di PHP (command line interface) esegue uno script una volta e termina. Ti serve PHP installato; se php -v stampa un errore, vedi prima installare PHP.

cd ~/projects/hello
php index.php          # run the file
php -l index.php       # only check the syntax ("lint")
php index.php > out.txt   # save the output to a file

php -l è utile prima di caricare un file: segnala un errore di sintassi con il numero di riga, oppure No syntax errors detected in index.php.

Passare argomenti con $argv

Le parole dopo il nome del file arrivano in $argv. $argv[0] è sempre il nome dello script stesso e $argc è il conteggio, nome compreso. Qui il blocco gira senza argomenti aggiuntivi, quindi c'è solo il nome:

Sul tuo computer, php index.php Ada 3 stampa il saluto tre volte. I valori di ripiego con ?? tengono in piedi lo script quando manca un argomento. Per opzioni con nome come --name=Ada, usa getopt:

<?php
// php index.php --name=Ada --verbose
$opts = getopt('', ['name:', 'verbose']);
echo "Hello, " . ($opts['name'] ?? 'world') . "\n";
if (isset($opts['verbose'])) {
    echo "Verbose mode\n";
}

Eseguire PHP nel browser con php -S

PHP ha un web server di sviluppo integrato. Avvialo nella cartella con i tuoi file:

php -S localhost:8000
[Sat Oct  3 07:21:34 2026] PHP 8.3.19 Development Server (http://localhost:8000) started

Ora http://localhost:8000/ esegue index.php, e http://localhost:8000/about.php esegue about.php. Ogni caricamento di pagina esegue di nuovo il file, con la query string in $_GET. Il blocco qui sotto si comporta allo stesso modo: eseguilo, poi clicca un link, e lo script gira di nuovo con $_GET['page'] impostato.

Opzioni utili:

php -S localhost:8000 -t public        # serve the public/ folder as the web root
php -S 0.0.0.0:8000                    # reachable from other devices on your network
php -S localhost:8000 router.php       # send every request through router.php

Il server integrato gestisce una richiesta alla volta ed è pensato solo per lo sviluppo. In produzione PHP gira dietro Nginx o Apache, di solito tramite PHP-FPM.

Verificare come è stato avviato lo script

PHP_SAPI ti dice quale "server API" esegue lo script: cli in un terminale, cli-server sotto php -S, e fpm-fcgi o apache2handler dietro un vero web server. Gli script che devono girare solo da terminale lo controllano per prima cosa:

Eseguire una sola riga con php -r

Per un test veloce non ti serve un file. php -r esegue il codice che gli passi, senza il tag <?php:

php -r 'echo date("Y-m-d"), PHP_EOL;'
php -r 'var_dump(0.1 + 0.2 == 0.3);'

Nel cmd di Windows, racchiudi il codice tra virgolette doppie e usa le virgolette singole al suo interno. Per più righe, php -a apre una shell interattiva in cui ogni istruzione viene eseguita quando premi Invio.

Rendere eseguibile uno script su macOS e Linux

Aggiungi una riga shebang prima di <?php e rendi il file eseguibile. La riga shebang non viene stampata:

#!/usr/bin/env php
<?php
echo "Backup started\n";
chmod +x backup.php
./backup.php

È così che gli script PHP girano da cron: 0 3 * * * /usr/bin/php /home/me/backup.php.

Codici di uscita per gli script

Uno script da riga di comando comunica successo o fallimento tramite il codice di uscita, che gli script di shell e cron possono controllare. exit(0) significa successo, qualsiasi altro numero significa fallimento:

<?php
$file = $argv[1] ?? '';
if (!is_file($file)) {
    fwrite(STDERR, "File not found: $file\n");
    exit(1);
}
echo "Processing $file\n";
exit(0);

Errore comune: eseguire il file o la cartella sbagliati

Could not open input file: index.php significa che PHP non trova il file a partire da dove si trova il terminale. Controlla la cartella corrente con pwd (oppure cd su Windows) e fai cd nel progetto oppure dai il percorso completo: php ~/projects/hello/index.php. Con php -S, un 404 per una pagina che sai esistere di solito significa che il server è stato avviato in un'altra cartella; fermalo con Ctrl+C e riavvialo nel posto giusto, oppure passa la cartella con -t. Quando il file gira ma stampa una pagina bianca, attiva la segnalazione degli errori per vedere cosa è andato storto.

Domande frequenti

Come eseguo un file PHP nel browser?

Avvia il server integrato nella cartella che contiene il file con php -S localhost:8000, poi apri http://localhost:8000/yourfile.php. Aprire il file direttamente dal disco non funziona, perché nessuno esegue il codice PHP.

Come passo argomenti a uno script PHP?

Scrivili dopo il nome del file: php report.php 2026 sales. Dentro lo script, $argv è l'array ['report.php', '2026', 'sales'] e $argc vale 3. Il primo elemento è sempre il nome dello script.

Come eseguo una riga di PHP senza un file?

Usa php -r e ometti il tag <?php: php -r 'echo strtoupper("hi"), PHP_EOL;'. Per più righe, php -a apre una shell interattiva.

Come capisco se PHP gira da riga di comando o su un web server?

Controlla PHP_SAPI (oppure php_sapi_name()). Vale "cli" in un terminale, "cli-server" sotto php -S, e qualcosa come "fpm-fcgi" o "apache2handler" dietro un web server.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA