Es difícil adivinar si no depuras nada de lo que haces, en teoría tu código es correcto, ¿pero cómo saber si lo estás ejecutando bien?
Digo, podrías imprimir $url para ver lo que trae, o mejor aún, esto:
Y ya con eso puedes saber todas las variables declaradas al momento de ejecutar dicha función, eso debería ayudarte, adivinos no somos.