2013-05-02 4 views
6

Modifica aggiunta.Il codice PHP genera un errore di segmentazione

Ricevo un errore di segmentazione dall'operazione ternaria di PHP. Sto usando PHP (5.4.13).

<?php 

$t = empty($_GET['t2']) ? $_GET['t2'] : 'test'; 
$t = empty($_GET['t2']) ? 'test' : $_GET['t2']; 

echo '<pre>'.print_r($t, true).'</pre>'; 

?> 

Il bilancio:

$t = empty($_GET['t2']) ? $_GET['t2'] : 'test'; 
$t = empty($_GET['t2']) ? 'test' : $_GET['t2']; 

invia un errore di segmentazione (ho controllato il log degli errori di Apache per questo). Le affermazioni commentate sopra non generano il difetto di segmentazione.

Dubito che questo sia l'unico errore di origine, ma questo è ciò che sono riuscito a restringere. Quasi tutti i siti che usano questo php ora hanno questo problema.

Non penso che sia un bug! Più un errore nell'installazione di PHP o in una delle dipendenze. Ma poiché non è stato utilizzato il function, solo le funzionalità del linguaggio, ho pensato che sarebbe stato possibile restringerlo abbastanza facilmente.

EDIT: volevo sapere quali sono i problemi più comuni che causano un errore di segmentazione, e se uno di loro può essere identificato dal codice di cui sopra in modo che saprò dove cercare soluzioni e come agire . (Questa è la domanda, per coloro che si chiedono a questo proposito)

EDIT 2: pronto ora, non c'è più l'assegnazione a $ _GET, quindi credo che ora è advisable e valido. Ma l'errore è ancora lì.

EDIT 3: per valgrind, la traccia è:

==3775== Process terminating with default action of signal 11 (SIGSEGV) 
==3775== Bad permissions for mapped region at address 0x0 
==3775== at 0x0: ??? 
==3775== by 0xF60F9F7: execute (in /opt/rh/php54/root/usr/lib64/httpd/modules/libphp5.so) 
==3775== by 0xF5A619F: zend_execute_scripts (in /opt/rh/php54/root/usr/lib64/httpd/modules/libphp5.so) 
==3775== by 0xF548E87: php_execute_script (in /opt/rh/php54/root/usr/lib64/httpd/modules/libphp5.so) 
==3775== by 0xF650A94: ??? (in /opt/rh/php54/root/usr/lib64/httpd/modules/libphp5.so) 
==3775== by 0x133BAF: ap_run_handler (in /usr/sbin/httpd) 
==3775== by 0x13746D: ap_invoke_handler (in /usr/sbin/httpd) 
==3775== by 0x142B2F: ap_process_request (in /usr/sbin/httpd) 
==3775== by 0x13F9A7: ??? (in /usr/sbin/httpd) 
==3775== by 0x13B6B7: ap_run_process_connection (in /usr/sbin/httpd) 
==3775== by 0x147976: ??? (in /usr/sbin/httpd) 
==3775== by 0x147C45: ??? (in /usr/sbin/httpd) 

e gdb è:

#0 0x0000000000000000 in ??() 
#1 0x00007fc4dd8a49f8 in execute() from /etc/httpd/modules/libphp54-php5.so 
#2 0x00007fc4dd83b1a0 in zend_execute_scripts() from /etc/httpd/modules/libphp54-php5.so 
#3 0x00007fc4dd7dde88 in php_execute_script() from /etc/httpd/modules/libphp54-php5.so 
#4 0x00007fc4dd8e5a95 in ??() from /etc/httpd/modules/libphp54-php5.so 
#5 0x00007fc4e818dbb0 in ap_run_handler() 
#6 0x00007fc4e819146e in ap_invoke_handler() 
#7 0x00007fc4e819cb30 in ap_process_request() 
#8 0x00007fc4e81999a8 in ??() 
#9 0x00007fc4e81956b8 in ap_run_process_connection() 
#10 0x00007fc4e81a1977 in ??() 
#11 0x00007fc4e81a1c46 in ??() 
#12 0x00007fc4e81a2293 in ap_mpm_run() 
#13 0x00007fc4e8179900 in main() 

Modifica finale

Come sospettavo da principio sicuramente proveniva da un'installazione corrotta di php e dalle sue estensioni. Il codice stesso non ha avuto problemi, ma immagino che abbia usato parte dell'installazione difettosa. Si può aggiungere altro, ma poiché non ho trovato la causa esatta e la soluzione, ma riesco a farlo funzionare di nuovo, vi ringrazio tutti per avermi indirizzato a una risoluzione.

+6

Non penso che l'impostazione dei valori in '$ _GET' sia considerata una buona pratica. Cosa stai cercando di ottenere? – Aquillo

+0

Ciò che è @Aquillo dice è vero. Se si tratta di un bug, è meglio riferire al database dei bug php. – datasage

+0

Ho eseguito questo e nessun segfault per me. Tuttavia, se t2 non è definito, ottengo un errore per l'indice non definito: t2.Ma impostare i valori come sopra non è una buona pratica – o0rebelious0o

risposta

1

Osservando il tuo codice, non credo che tu abbia errori.

Con ciò detto hai detto che ora hai problemi con molti dei tuoi siti. Mi chiedo se ora vieni colpito da bot dannosi che potrebbero causare un errore simile a quello che si trova in questo [rapporto bug di PHP] [1] https://bugs.php.net/bug.php?id=59748. [1] :.

Guarderei i tuoi registri e vedere se il traffico è cambiato su quei siti per iniziare a sfruttare questo problema.

+1

In realtà, era la metà colpa mia nella configurazione dell'installazione di php e delle sue estensioni. – khael