En PHP existen funciuones específicas para estas operaciones, strtoupper() y strtolower(), pero no son funcionales al 100% (al menos en castellano) por el tema de los caracteres acentuados, que no los convierten.
Combinando el uso de las mencionadas funciones con strstr() para sustituciones en los caracteres conflictivos tenemos:
<?php echo strtr(strtoupper("hola tío"), "àáâãäåæçèéêëìíîïðñòóôõöøùüú", "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÜÚ"); # HOLA TÍO echo strtr(strtolower("HOLA TÍO"), "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÜÚ", "àáâãäåæçèéêëìíîïðñòóôõöøùüú"); # hola tío ?>