Sería más simple irse por lo que debería ser que estar evitando lo que no. Como se supone que debería de ser es, cualquier inclusión que se vaya hacer se parte de un directorio padre y común para iniciar. A éste directorio padre lo único que podría incluir es un archivo o más directorios, y archivos. Por regla general, los nombres de estos archivos y directorios sólo puede ser nombrados por letras de la A-Z y por mucho usar - y _ (/ para delimitar directorios). Cualquier otro carácter se omite y se parte de ahí para incluir cualquier cosa hacía adelante del directorio padre (nunca hacía atrás y mucho menos de algún otro origen que no sea el sistema de ficheros actual). Esto pensando que el "ruteo" sea del tipo /uno/dos/tres. Después sólo bastaría confirmar que el archivo exista.
Una disculpa si no pongo un ejemplo pero sólo paso por acá un rato y ya es de noche (me estoy haciendo viejo). Lo que es cierto es que ya hay bastante proyectos robustos que serían fácil de implementar y evitar reinventar la rueda como bien te comentaron.