L'errore non è di PHP ma di logica dell'algoritmo. Il fatto che vada in timeout con una esecuzione che dura più di 30 sec dovrebbe farti pensare: forse entro in un ciclo infinito e meno male che mi stoppa il timeout.Originariamente inviato da bigdada
sono un apprendista ed ho appena iniziato ad utilizzare php, quindi potrei aver sbagliato qualcosa di elementare, per questo chiedo scusa in anticipo.
mi è capitato di dover creare un convertitore di basi numeriche, per ora ho fatto solo da decimale a binario.
per programmare uso Netbeans e per pubblicare EasyPHP.
quando eseguo il codice mi dice che ci mette più di 30 secondi per l'esecuzione della riga 16 (marcata in rosso) e si interrompe il programma.
il $_GET è corretto (l'ho preso da un forum).
quasto è il codice:
...
Il tuo cilco:
Qual'è la condizione che determina l'uscita dal ciclo? che $t sia minore di 0 ossia che $t contenga un valore negativo.Codice PHP:
for ($i = 0; $t >= 0; $i++) {
$resto = $t % 2;
$t2 = $risultato.$resto;
$risultato = $t2;
$t = $t / 2;
}
Qual'è la riga che modifica il contenuto di $t affinché il ciclo possa avere fine? $t=$t/2
Ora possiamo chiederci: in quale universo divisioni successive per due possono produrre un numero minore di 0? Al più potrai avere 0 con un certo resto, senza considerare che $t/2 produce un numero di tipo float, il che vuol dire che potresti avvicinarti allo 0 senza mai raggiungerlo se il numero da convertire non è pari.
Ecco trovato il tuo ciclo infinito che ti porta al timeout. Dopo questo minimo di troubleshooting possiamo passare a formula la correzione che consiste nel porre come condizione d'uscita $t==0 e come operazione di modifica di $t all'interno del ciclo $t=floor($t/2); ossia la parte intera ottenuta dalla divisione per 2 di $t.
Per ultimo, alla fine della riga rossa manca il ; ma forse te lo sei mangiato per farla rossa!
![]()