Serverseitig kann so ziemlich alles stattfinden. PHP, Python, Ruby, Java, Perl, Fortran, C, C++, Brainfuck, …
Entscheidend ist lediglich, dass beim Client Daten in einem Format ankommen, das er versteht (in einem Wort: HTML). Wie diese Daten generiert werden, ist irrelevant.
Clientseitig hast du dann eben hauptsächlich HTML, CSS und JavaScript. Zwischen diesen drei Technologien spielen sich 99,9 % des Web ab.
Die fehlenden 0,1 % sind Plugin-Dinge wie Flash/Flex, Java, Silverlight, … Stichwort: Rich Internet Application
Die setzen das jeweilige Client-Plugin voraus, was dann natürlich nicht von jedem Client unterstützt wird.
Edit: Der folgende Absatz ist fehlerhaft. Siehe dazu auch Post #7.
Dann gibt es den Bereich XML/XML-basierte Formate. Theoretisch kannst du eine Webseite als XML-Dokument ausliefern und mit einem XSL-Stylesheet verbinden, das die XML-Daten beim Aufruf dynamisch in HTML transformiert. Das war – könnte man sagen – lange Zeit der Zukunftsplan des W3C, hat sich allerdings praktisch nie durchgesetzt, weil der Internet Explorer beim Rendern nicht mitspielt(e). Ungefähr in diesen Bereich gehört auch SVG, ein XML-Format zur Beschreibung von Vektorgrafiken, das vom IE ebenfalls nie unterstützt wurde. Serverseitig und als Datenaustauschformat spielt XML eine wesentlich größere Rolle.
Sehr lesenswert ist Mark Pilgrims „Dive Into HTML5“.
Wenn du an serverseitiger Programmierung interessiert bist, könntest du dir eine andere Sprache als PHP ansehen. Python zum Beispiel.
Clientseitig sind JavaScript-Frameworks und -Bibliotheken wie jQuery immer einen Blick wert.
Bei Bibliotheken kommt es natürlich darauf an, was du erreichen möchtest. Im Grafikbereich gibt es da zum Beispiel einige schöne Sachen.