controlla l'uso degli && (codizioni valide contemporaneamente)!!!!!!
Inoltre con il primo condizionale hai già eliminato dir e parent_dir quindi è inutile che te li riporti appresso.
codice:
$oggi=date("-m-d"); 
if(file_exists($file)) { 
include($file); 

$handle = opendir('backup'); 
while (false !== ($file = readdir($handle))) { 
if (substr($file,-3) == '.gz') 
{ if(substr($file,-9) == '$oggi.gz'){}else{ 
echo "$file ELIMINATO
"; 
$nomefile="backup/$file"; 
unlink($nomefile);} 
} 
} 
closedir($handle);
inoltre,personalmente, semplificherei il codice

codice:
$oggi=date("-m-d"); 
if(file_exists($file)) { 
include($file); 

$handle = opendir('backup'); 
while (false !== ($file = readdir($handle))) { 
if (substr($file,-3) == '.gz') 
{ 
  if(substr($file,-9) != '$oggi.gz')
  { 
  echo "$file ELIMINATO
"; 
  $nomefile="backup/$file"; 
  unlink($nomefile);} 
  } 
} 
closedir($handle);