Cita:  ¿Porqué esto me da error?
 
fopen ("1.txt", "r+");
fwrite ("1.txt", Hola);
fclose ("1.txt");
     Porque el parámetro que debes pasar a 
fwrite() y 
fclose() es el 
resource --referenciador-- devuelto por 
fopen() , no el nombre del fichero. 
 Código PHP:
    $res= fopen("...", "..");
fwrite($res, "...");
fclose($res); 
    
  2: Lo ignoro. 
3: Lo mismo. tmpfile() devuelve lo mismo que fopen() y lo que 
file_get_contents() necesita como parámetro es un string que indique el nombre (y ruta) del fichero.  
 Cita:   Supongo que debe haber una forma para escribir y leer temporales antes de cerrarlos...
     fread(), fgets(), fgetc(), etc. Todas aquellas funciones que resivan como parámetro un referenciador a archivo. 
Un ejemplo: 
 Código PHP:
    <?php
$temp = tmpfile(); //creo el temporal
fwrite($temp, "Archivo temporal"); //lo escribo
fseek($temp, 0); // Pones el apuntador al comienzo del archivo para leerlo
do {
     $chr= fgetc($temp); // capturas un carácter
      echo $chr; // lo imprimes
} while($chr!=false); // Mientras no sea EOF
fclose($temp); //cierro y elimino el temporal
?>    
   Un saludo!