Per la prima domanda basta utilizzare la funzione str_reprace(), su una stringa che ha lo stesso nome del file ( una copia di $files ), che contiene il nome senza la sua estensione, modifica il tuo codice in questo modo:
Codice PHP:
<?
// Definisco il percorso della mia directory immagini
$img_dir = "./foto";
// Utilizzo opendir per aprire la directory
$handle = opendir($img_dir);
print "<body background ='./lay/layout.jpg' link='#762c29' alink='white' vlink='3c2c29'><center><table border=`1`>";
$ind = 1;
// Creo un ciclo ed utilizzo readdir per esplorare il contenuto della directory
while (false !== ($files = readdir($handle)))
{
if ($files != "." && $files != ".." )
{
$c_files = $files;
$c_files = str_replace(".gif", "", $c_file);
if ($ind <3 )
{
print "<td width = '250' height = '250'>
<center>
<table border='1'>
<tr>
<td>
<img src=$img_dir/$files height='200'>
</td>
</tr>
<tr>
<td height='50' background='./lay/layout_x.jpg'>
<p align='center'>
<font face='Times New Roman, Times, serif'>
<a href=$img_dir/$files>$c_files</a>
</font>
</p>
</td>
</tr>
</table></center>
</td>";
$ind++;
}else {
$ind = 1;
print "<td width = '250' height = '250'>
<center>
<table border='1'>
<tr>
<td>
<img src=$img_dir/$files height='200'>
</td>
</tr>
<tr>
<td height='50' background='./lay/layout_x.jpg'>
<p align='center'>
<font face='Times New Roman, Times, serif'>
<a href=$img_dir/$files>$c_files</a>
</font>
</p>
</td>
</tr>
</table></center>
</td>";
print "</tr>";
}
}
// end while
}
print "</tr></table></center>";
?>
Ovviamente questo codice funzione solo se hai un file con estensione .gif.
Praticamente ho creato la variabile $c_files, una copia di $files, la funzione str_replace() ricerca la stringa presente nel primo parametro e la sostituisce con la stringa del secondo, il tutto all'interno della stringa del terso.
Per la seconda domanda credo di non averla capita.
Se sei interessato, esiste anche la classe glob() per leggere le directory, che ti risparmia righe di codice e ovviamente e migliore dell'opendir() e dell'readdir()