è solo una botta di culo, occhio che poi sono le peggiori da correggere in fase di debugging

$stringa - 1 infatti restituisce -1 (la stringa convertita in intero vale 0), e il terzo parametro della funzione substr accetta anche valori negativi, intendendoli come numero di caratteri da eliminare da fine stringa.