Il linguaggio di programmazione PHP
 

testare pagina con errori

alex 23 Gen 2017 21:02
+ cat test.php
<?php // esempio rudimentale di test funzionale
$page = ******* get_contents('http://local/index.php');
echo false !== strpos($page, "Helo") ? 'ok' : 'error';
echo "\n";

+ php test.php
ok

Apparentemente il test sembra superato, ma se apro il browser e digito
http://local/index.php mi esce
Notice: Undefined variable: abc in index.php on line 2

Quindi vado ad approfondire...

+ cat index.php
Helo
<?php echo $abc; ?>

Come si vede in effetti c'è una variabile non assegnata ($abc).

Per fare il modo che l'errore venga rilevato, potrei aggiungere al *******
test.php l'istruzione

echo false === strpos($page, "Notice: Undefined variable:") ? 'ok' :
'error';

Ma per vari motivi capirete che non è per nulla un metodo ottimale.

Quindi in genere, durante i test, come si fa a rilevare questo tipo di
errori?
Leonardo Serni 23 Gen 2017 21:35
On Mon, 23 Jan 2017 21:02:03 +0100, alex
<1j9448a02@lnx159sneakemail.com.invalid> wrote:

>echo false === strpos($page, "Notice: Undefined variable:") ? 'ok' :
>'error';

>Ma per vari motivi capirete che non è per nulla un metodo ottimale.
>Quindi in genere, durante i test, come si fa a rilevare questo tipo di
>errori?

Un sistema è quello di cercare "Notice:", "Warning:" e "Error:" o "Fatal" o
quel
che l'è.

Ma se no puoi includere nella pagina di test un php.ini che ridiriga tutto in un
******* di log, e poi leggere quello.

Leonardo
--

A terrible beauty is born.
- W. B. Yeats, Easter 1916
alex 24 Gen 2017 16:52
Il 23/01/2017 21:35, Leonardo Serni ha scritto:
> Un sistema è quello di cercare "Notice:", "Warning:" e "Error:" o "Fatal" o
quel
> che l'è.

Che come avevo accennato, potrebbero dare falsi positivi per ragioni che
lascio intuire...
Pensavo ad esempio ci fosse un modo per accedere almeno ad un exit-code
della pagina o roba simile (un flag che indica la presenza di errori)...

> Ma se no puoi includere nella pagina di test un php.ini che ridiriga tutto in
un
> ******* di log, e poi leggere quello.

????
Leonardo Serni 24 Gen 2017 18:15
On Tue, 24 Jan 2017 16:52:46 +0100, alex
<1j9448a02@lnx159sneakemail.com.invalid> wrote:

>Il 23/01/2017 21:35, Leonardo Serni ha scritto:
>> Un sistema è quello di cercare "Notice:", "Warning:" e "Error:" o "Fatal" o
quel
>> che l'è.

>Che come avevo accennato, potrebbero dare falsi positivi per ragioni che
>lascio intuire...
>Pensavo ad esempio ci fosse un modo per accedere almeno ad un exit-code
>della pagina o roba simile (un flag che indica la presenza di errori)...

>> Ma se no puoi includere nella pagina di test un php.ini che ridiriga tutto in
un
>> ******* di log, e poi leggere quello.

>????

Guarda sul manuale set_error_handler (per es.) :-)

Leonardo
--

A terrible beauty is born.
- W. B. Yeats, Easter 1916
alex 24 Gen 2017 19:46
Il 24/01/2017 18:15, Leonardo Serni ha scritto:
> Guarda sul manuale set_error_handler (per es.) :-)

Ah registrare addirittura un apposito capture-error-handler.
Ma php.ini cosa c'entra?
Alessandro Pellizzari 24 Gen 2017 21:59
Il Mon, 23 Jan 2017 21:02:03 +0100, alex ha scritto:

> + cat test.php <?php // esempio rudimentale di test funzionale $page =
> ******* get_contents('http://local/index.php');
> echo false !== strpos($page, "Helo") ? 'ok' : 'error';
> echo "\n";
>
> + php test.php ok
>
> Apparentemente il test sembra superato, ma se apro il browser e digito
> http://local/index.php mi esce Notice: Undefined variable: abc in
> index.php on line 2

Il problema è che stai testando la cosa sbagliata.

Quando usi uno stream verso http stai testando il webserver, non lo
script PHP.

Nel tuo caso non stai nemmeno tanto testando lo script, quanto il parser
(infatti ricevi un warning di variabile non dichiarata, non un risultato
sbagliato).

In pratica i test dovrebbero testare che dato un input tu riceva un certo
output.

Se vuoi testare il parser di PHP devi usare xdebug, che appunto si
inserisce nel processo di parsing e lo *****izza.

Oppure, tranne che per i fatal error, usare un error_handler come dice
Leonardo.

Bye.
Leonardo Serni 24 Gen 2017 22:21
On Tue, 24 Jan 2017 19:46:51 +0100, alex
<1j9448a02@lnx159sneakemail.com.invalid> wrote:

>Il 24/01/2017 18:15, Leonardo Serni ha scritto:
>> Guarda sul manuale set_error_handler (per es.) :-)

>Ah registrare addirittura un apposito capture-error-handler.
>Ma php.ini cosa c'entra?

Hai provato a dare un'occhiata al manuale di php.ini, relativamente a tutto
quello
che si può fare con gli errori?

Leonardo
--

A terrible beauty is born.
- W. B. Yeats, Easter 1916
alex 25 Gen 2017 13:17
Il 24/01/2017 22:21, Leonardo Serni ha scritto:
> On Tue, 24 Jan 2017 19:46:51 +0100, alex
<1j9448a02@lnx159sneakemail.com.invalid> wrote:
>
>> Il 24/01/2017 18:15, Leonardo Serni ha scritto:
>>> Guarda sul manuale set_error_handler (per es.) :-)
>
>> Ah registrare addirittura un apposito capture-error-handler.
>> Ma php.ini cosa c'entra?
>
> Hai provato a dare un'occhiata al manuale di php.ini, relativamente a tutto
quello
> che si può fare con gli errori?

ini_set('error_log', 'logs/error.log')?
Leonardo Serni 25 Gen 2017 14:39
On Wed, 25 Jan 2017 13:17:09 +0100, alex
<1j9448a02@lnx159sneakemail.com.invalid> wrote:

>>> Il 24/01/2017 18:15, Leonardo Serni ha scritto:
>>>> Guarda sul manuale set_error_handler (per es.) :-)

>>> Ah registrare addirittura un apposito capture-error-handler.
>>> Ma php.ini cosa c'entra?

>> Hai provato a dare un'occhiata al manuale di php.ini, relativamente a tutto
quello
>> che si può fare con gli errori?

>ini_set('error_log', 'logs/error.log')?

Ma non solo. Per es., ti preoccupavi di riconoscere gli errori. Gli puoi
premettere un
prefisso arbitrario random di 16 caratteri base64, avoja a sbagliare a
riconoscerli.

Leonardo
--

A terrible beauty is born.
- W. B. Yeats, Easter 1916
alex 25 Gen 2017 15:13
Il 25/01/2017 14:39, Leonardo Serni ha scritto:
>>>> Ah registrare addirittura un apposito capture-error-handler.
>>>> Ma php.ini cosa c'entra?
>>> Hai provato a dare un'occhiata al manuale di php.ini, relativamente a tutto
quello
>>> che si può fare con gli errori?
>> ini_set('error_log', 'logs/error.log')?
> Ma non solo. Per es., ti preoccupavi di riconoscere gli errori. Gli puoi
premettere un
> prefisso arbitrario random di 16 caratteri base64, avoja a sbagliare a
riconoscerli.

Perdona l'ignoranza, come si fa a configurare un prefisso?
Bisogna sempre intervenire su php.ini?
Leonardo Serni 25 Gen 2017 20:04
On Wed, 25 Jan 2017 15:13:36 +0100, alex
<1j9448a02@lnx159sneakemail.com.invalid> wrote:

>> Ma non solo. Per es., ti preoccupavi di riconoscere gli errori. Gli puoi
premettere un
>> prefisso arbitrario random di 16 caratteri base64, avoja a sbagliare a
riconoscerli.

>Perdona l'ignoranza, come si fa a configurare un prefisso?
>Bisogna sempre intervenire su php.ini?

Mi pare di no, lo puoi fare anche da codice o da .htaccess. Imposti la variabile
di
configurazione "error_prepend_string" a, che ne so?, "ERRORE_123456_CONFERMATO".

Leonardo
--

A terrible beauty is born.
- W. B. Yeats, Easter 1916
alex 26 Gen 2017 09:26
Il 25/01/2017 20:04, Leonardo Serni ha scritto:
> On Wed, 25 Jan 2017 15:13:36 +0100, alex
<1j9448a02@lnx159sneakemail.com.invalid> wrote:
>
>>> Ma non solo. Per es., ti preoccupavi di riconoscere gli errori. Gli puoi
premettere un
>>> prefisso arbitrario random di 16 caratteri base64, avoja a sbagliare a
riconoscerli.
>
>> Perdona l'ignoranza, come si fa a configurare un prefisso?
>> Bisogna sempre intervenire su php.ini?
>
> Mi pare di no, lo puoi fare anche da codice o da .htaccess. Imposti la
variabile di
> configurazione "error_prepend_string" a, che ne so?,
"ERRORE_123456_CONFERMATO".

set_error_handler('globalErrorHandler');

function globalExceptionHandler($e) {
echo "ERRORE_123456_CONFERMATO: $e\n";
}

Volevi dire questo?
Leonardo Serni 26 Gen 2017 23:38
On Thu, 26 Jan 2017 09:26:31 +0100, alex
<1j9448a02@lnx159sneakemail.com.invalid> wrote:

>Il 25/01/2017 20:04, Leonardo Serni ha scritto:
>> On Wed, 25 Jan 2017 15:13:36 +0100, alex
<1j9448a02@lnx159sneakemail.com.invalid> wrote:
>>
>>>> Ma non solo. Per es., ti preoccupavi di riconoscere gli errori. Gli puoi
premettere un
>>>> prefisso arbitrario random di 16 caratteri base64, avoja a sbagliare a
riconoscerli.
>>
>>> Perdona l'ignoranza, come si fa a configurare un prefisso?
>>> Bisogna sempre intervenire su php.ini?

>> Mi pare di no, lo puoi fare anche da codice o da .htaccess. Imposti la
variabile di
>> configurazione "error_prepend_string" a, che ne so?,
"ERRORE_123456_CONFERMATO".

>set_error_handler('globalErrorHandler');
>
>function globalExceptionHandler($e) {
> echo "ERRORE_123456_CONFERMATO: $e\n";
>}

>Volevi dire questo?

Quello è SIMILE all'effetto che ottieni. Ma non ti serve l'error handler, e
soprattutto
funziona subito, sempre e dappertutto, e anche nel caso che l'errore sia nel
codice che
dovrebbe gestire gli errori (per es., nel tuo caso 'globalErrorHandler' non
esiste, dal
momento che la funzione si chiama globalExceptionHandler).

Ergo, la prepend string (se uno vuole riconoscere gli errori da fuori) è mejo.

Leonardo
--

A terrible beauty is born.
- W. B. Yeats, Easter 1916
alex 27 Gen 2017 14:16
Il 26/01/2017 23:38, Leonardo Serni ha scritto:
> Quello è SIMILE all'effetto che ottieni. Ma non ti serve l'error handler, e
soprattutto
> funziona subito, sempre e dappertutto, e anche nel caso che l'errore sia nel
codice che
> dovrebbe gestire gli errori (per es., nel tuo caso 'globalErrorHandler' non
esiste, dal
> momento che la funzione si chiama globalExceptionHandler).
>
> Ergo, la prepend string (se uno vuole riconoscere gli errori da fuori) è
mejo.

Ti prego allora di scusarmi per l'ignoraza, ma questa prependstring come
si setta e come si usa?
alex 27 Gen 2017 16:42
Il 25/01/2017 14:39, Leonardo Serni ha scritto:
> Ma non solo. Per es., ti preoccupavi di riconoscere gli errori. Gli puoi
premettere un
> prefisso arbitrario random di 16 caratteri base64, avoja a sbagliare a
riconoscerli.

Non andrebbe bene un prefisso statico: mio-error-5345 ?
Perchè dovrebbe essere random-base64?
Leonardo Serni 27 Gen 2017 19:24
On Fri, 27 Jan 2017 16:42:48 +0100, alex
<1j9448a02@lnx159sneakemail.com.invalid> wrote:

>Il 25/01/2017 14:39, Leonardo Serni ha scritto:
>> Ma non solo. Per es., ti preoccupavi di riconoscere gli errori. Gli puoi
premettere un
>> prefisso arbitrario random di 16 caratteri base64, avoja a sbagliare a
riconoscerli.

>Non andrebbe bene un prefisso statico: mio-error-5345 ?
>Perchè dovrebbe essere random-base64?

random, per ridurre il rischio che compaia per errore. Base64 per avere
caratteri
che non danno problemi (tipo <). Poi con "random" intendevo random all'atto
della
modifica del PHP.INI, non che ogni volta fosse diverso, per carità! Rimane
sempre
un prefisso statico, come dici tu.

Leonardo
--

A terrible beauty is born.
- W. B. Yeats, Easter 1916
alex 27 Gen 2017 20:53
Il 27/01/2017 19:24, Leonardo Serni ha scritto:
> random, per ridurre il rischio che compaia per errore.

????

> Base64 per avere caratteri
> che non danno problemi (tipo <).

OK

> Poi con "random" intendevo random all'atto della
> modifica del PHP.INI, non che ogni volta fosse diverso, per carità! Rimane
sempre
> un prefisso statico, come dici tu.

Ma allora non posso generalo io:

gfhh5555sa

che ci vuole?
alex 28 Gen 2017 11:29
Il 27/01/2017 20:53, alex ha scritto:
>> random, per ridurre il rischio che compaia per errore.
>
> ????

Chiedo scusa, forse volevi dire: che non compaia nel testo *ordinario*
della pagina (non nei messaggi d'errore)

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio di programmazione PHP | Tutti i gruppi | it.comp.www.php | Notizie e discussioni php | Php Mobile | Servizio di consultazione news.