Prueba a ver si algo asi funciona:
Código PHP:
$filename = "game".$_SESSION['gameID'].".pgn";
//intercepta la salida para tenerla en la cadena y poderla usar las dos veces
ob_start();
loadHistory();
ReturnGameInfo($_SESSION['gameID']);
writePGN();
$contenidoAGrabar = ob_get_contents();
ob_end_clean();
$fh = fopen("carpeta/".$filename,"w"); //esto crea el archivo dentro de la subcarpeta "carpeta", asegurate de que el script tenga permiso para escribir en esa carpeta.
if ($fh !== FALSE){
fwrite($fh,$contenidoAGrabar);
fclose($fh);
}
//ya se grabó el archivo, ahora lo sirve al browser como antes
header("Content-Type: application/x-chess-pgn");
header("Content-Disposition: attachment; filename=game".$_SESSION['gameID'].".pgn");
print $contenidoAGrabar();
Encontraras informacion detallada acerca de estas funciones en el manual de php, busca fopen, ob_start, etc.
-ronnieb