Revisa esto. Aquí explican como crear una UDF en C/C++ para windows y para linux, y como declararla posteriormente en firebird. Una vez declarada para usarla posteriormente solo tendras que llamarla desde un procedimiento almacenado, un trigger o una consulta, y pasarle los parametros correspondientes.
Aunque el ejemplo esta en C/C++ puedes utilizar cualquier otro lenguaje capaz de generar bibliotecas de funciones(DLL en windows y SO en linux), para lo cual creo que PHP no vale. Si deseas hacerlo en FreePascal puedo pasarte alguna de las que tengo yo hechas en Delphi, por si te sirve de ejemplo.
Si tienes alguna duda más aquí estaré para ayudarte en lo que pueda.
Un saúdo.