2010-09-29 3 views
10

Ho PHP 5.2.10 e PHP 5.2.14 (build x32 non-threadsafe Win32) installato su un server Windows 2008 R2 e su Windows 7 a 64 bit.Perché PHP 5.2.14 non visualizzerà alcun errore (anche dalla riga di comando)?

Per qualche motivo PHP 5.2.14 si rifiuta di mostrare messaggi di errore.

Anche quando ho impostato le seguenti impostazioni nel php.ini Non c'è niente di errori segnalati se uso 5.2.14:

error_reporting = E_ALL 
display_errors = On 

Ciò accade anche quando si esegue uno script di test dalla riga di comando utilizzando php.exe con un errore di sintassi deliberata:

c:\php>php test.php

PHP utilizza il file corretto php.ini perché posso vedere le mie impostazioni cambiano quando corro php.exe -i.

Inoltre noto che lo php.exe in PHP 5.2.14 è molto lento all'avvio.

Quando eseguo lo stesso set di test utilizzando PHP 5.2.10 sulle stesse macchine, i messaggi di errore vengono visualizzati correttamente.

Entrambi i file sono php.ini magazzino (in base al largo di php.ini-recommended), ma con le error_reporting e display_errors impostazioni modificate.

risposta

5

Potrebbe essere necessario abilitare display_startup_errors così:

display_startup_errors boolean 

Even when display_errors is on, errors that occur during PHP's startup sequence are not displayed. It's strongly recommended to keep display_startup_errors off, except for debugging.

Si può anche provare a Lint il file con c:\php>php -l test.php per verificare errori di sintassi.

+0

si impara qualcosa di nuovo ogni giorno. Si scopre che PHP non è stato in grado di caricare un'estensione SQLite3 perché l'estensione pdo.dll (ha una dipendenza da questo) non è stata decommentata. Con 'display_startup_errors' impostato su off, sembrava che gli errori di parsing fossero ingoiati. Grazie mille. – Kev

+0

In realtà ... indagando ulteriormente. Qualcuno ha messo le virgolette attorno al valore dei flag 'error_reporting'. Questa è la vera causa. i.e.-'error_reporting = "E_ALL & ~ E_NOTICE" '. – Kev

3

ultimamente, ho dovuto lavorare su qualcun altro progetto ... Non essendo in grado di eseguire il debug, non ho avuto altra scelta che controllare questo: "error_reporting (0);"

Quindi, controllare il codice sorgente. Cerca qualcosa del tipo: "error_reporting (0);". Una volta trovato, commentalo !!!

Normalmente, non è necessario inserirlo nel codice sorgente, ma nel file php.ini.

@ +

+0

Ancora meglio, aggiungi un modo per disattivarlo durante lo sviluppo (e solo durante). Questi messaggi di errore possono dire molto agli aspiranti hacker sul tuo server. – EpicVoyage

8

sto correndo un PHP più tardi (5.4.24), ma queste altre risposte manca la -d option I found exemplified elsewhere che rende visualizzazione PHP errori comprensibili di analisi durante l'esecuzione dalla CLI:

php -d display_errors test.php 

Questa è la migliore risposta alla domanda che stavo cercando su Google. Esecuzione del linter con -l dice solo "errori di analisi foo.php"

+2

Lo uso come alias 'alias phprun =" php -d display_errors "' –

11

Ho trovato questo veramente fastidioso, quindi ecco una strategia per controllare la sintassi da CLI:

  1. Non caricare il file ini .
  2. Attiva display_errors e display_startup_errors esplicitamente.

php -n -l -d display_errors -d display_startup_errors path/to/your/phpfile.php

$ php -h 
-n    No php.ini file will be used 
-l    lint, syntax checking only 
-d foo[=bar]  Define INI entry foo with value 'bar' 
+0

c'è un piccolo refuso nel display_errors, nonostante questa sia la migliore risposta – ROLO