I made one additional change that will benefit Windows users... I added a check function for the episode title to remove any characters that are invalid for use in filenames
<?php
$file = 'episode.htm';
$doc = new DOMDocument;
@$doc->loadHTMLFile($file);
$xpath = new DOMXpath($doc);
$find = array("\n", "\r", "\t", " ", "\o", "\xOB");
$epSea = '';
$epNum = '';
$epNam = '';
$elements = $xpath->query("//div[@class='info']");
$length = $elements->length;
function checkLength($str)
{
/*
A STRING IS AN ARRAY OF CHARACTERS
IF POSITION 1 IS VALID THEN THE STR HAS AT LEAST 2 CHARS
THIS 'COSTS' LESS THAN USING STRLEN
*/
if(isset($str[1]))
{
return $str;
}
else
{
return '0'.$str;
}
}
function cleanName($str)
{
$invalidChars = array('*','|','\\','/',':','\"','<','>','?','.');
return str_replace($invalidChars,'',$str);
}
for($i=0;$i<$length;$i++)
{
//EP SEASON AND NUMBER
$elements = $xpath->query("//div[@class='info']/div[@class='meta']");
$epData = str_replace($find,'',$elements->item($i)->nodeValue);
$epSea = checkLength(preg_replace('/(.*)(Season )(\d{1})(.*)/', '\3',$epData));
$epNum = checkLength(preg_replace('/(.*)(Episode )(\d{1,2})(.*)/', '\3',$epData));
//EP NAME
$elements = $xpath->query("//div[@class='info']/h3/a");
$epNam = cleanName($elements->item($i)->nodeValue);
//KEY THE ARRAY WITH THE 4 DIGIT EP NUMBER FOR EASY LOOKUP LATER ON
$episodes[$epSea.$epNum] = $epNam;
}
/*
THE FOLLOWING FUNCTION IS A MODIFIED VERSION OF:
http://www.codingforums.com/showthread.php?t=71882
*/
function renameAllEpisodes($path,$level = 0)
{
$ignore = array('.', '..','folder.jpg','thumbs.db');
$dh = @opendir($path);
$renamed = '';
global $episodes;
while(FALSE !== ($file = readdir($dh)))
{
if(!in_array($file,$ignore))
{
if(is_dir("$path\\$file"))
{
renameAllEpisodes("$path\\$file",($level+1));
}
else
{
$tmpName = substr($file,0,4);
if(array_key_exists($tmpName,$episodes))
{
$renamed = $path.'\\'.$tmpName.' - '.$episodes[$tmpName].'.avi';
rename($path.'\\'.$file,$renamed) or die("could not rename $file to $renamed");
}
}
}
}
closedir( $dh );
}
//renameAllEpisodes('\\\\10.1.1.15\\Disk-1\\TV\\Seinfeld\\');
?>