¿Y exactamente qué es lo que no funciona?
Porque acabo de probar tu código y substr() funciona muy bien.
Lo único que veo mal es que no estás agrupando correctamente tu código en un bloque.
Por lo tanto las instrucciones después de imprimir el archivo no se ejecutarán porque no están dentro del mismo bloque.