È possibile controllare il codice con php -l
da STDIN convogliando in Esempio:.
$ echo "<?php echo 'hello world'" | php -l
Parse error: syntax error, unexpected end of file, expecting ',' or ';' in - on line 2
Errors parsing -
Ecco il punto e virgola finale ;
manca dopo la stringa tra virgolette singolo. Se si aggiunge che, l'errore va via e PHP ti dice così:
$ echo "<?php echo 'hello world';" | php -l
No syntax errors detected in -
Il cruscotto -
in Errors parsing -
o No syntax errors detected in -
sta per STDIN. È comunemente usato per quello.
Un altro modo è scrivere il codice che si desidera filtrare (o copiarlo e incollarlo). Questo funziona utilizzando l'interruttore di lanugine con --
, inserendo il codice e finitura inserendo Ctrl + D (Linux)/Ctrl + Z (Win) su una linea propria:
$ php -l --
<?php echo "1"
^Z
Parse error: syntax error, unexpected end of file, expecting ',' or ';' in - on line 2
Errors parsing -
BTW , l'interruttore -r
che normalmente è destinato a fornire il codice per l'esecuzione, non funziona in questo caso e dà un errore:
$ php -l -r "echo 1"
Either execute direct code, process stdin or use a file.
Molto probabilmente perché è destinato per l'esecuzione di codice e questo è tutto per, nessun rilascio di fibre . Inoltre è senza il tag PHP di apertura.
Da tutte queste opzioni, la prima si fa probabilmente più senso se si vuole il tubo in (si può anche operare con proc_open
nel caso in cui avete bisogno di più controllo). Ecco un rapido esempio utilizzando PHP di exec
:
<?php
/**
* PHP Syntax Checking with lint and how to do this on a string, NOT a FILE
*
* @link http://stackoverflow.com/q/12152765/367456
* @author hakre
*/
$code = "<?php echo 'hello world'";
$result = exec(sprintf('echo %s | php -l', escapeshellarg($code)), $output, $exit);
printf("Parsing the code resulted in; %s\n", $result);
echo "The whole output is:\n";
print_r($output);
L'uscita è la seguente:
Parsing the code resulted in; Errors parsing -
The whole output is:
Array
(
[0] =>
[1] => Parse error: syntax error, unexpected '"', expecting ',' or ';' in - on line 1
[2] => Errors parsing -
)
Nessun server blocca l'accesso alla riga di comando PHP? Se è così, che usare questo metodo è inutile. Sto costruendo un software che ha bisogno di soddisfare tutti o la maggior parte dei server ... –
BTW, grazie per il vostro aiuto su questo! +1, aspetterò più risposte se ce ne sono prima che accetto questa come risposta. –
@SolomonClosson Suppongo che tu stia chiedendo informazioni sui provider di hosting. La maggior parte dei provider di AFAIK esegue PHP come CGI in quanto non vogliono abbattere l'intero server Apache a causa di un bug in PHP o di alcuni core dump. Questo è il caso se eseguono Apache 2.x. Se eseguono Apache 1.x in qualsiasi modo siano automaticamente protetti, ma non ho visto un provider di hosting che esegue PHP come un modulo Apache. Ora, dato che PHP è disponibile come CGI, il binario potrebbe essere presente in modo da avere accesso per eseguirlo. – g13n