esiste già una funzione che ti elenca le i file e le directory presenti in una cartella e ti ritorna un'array ... puoi anche applicare dei filtri

http://it.php.net/glob

mentre per la funzione copydir ... guarda che gli exit dopo i return sono perfettamente inutili e ti consiglio di differenziare gli errori in modo da poter inviare all'utente errori diversi e più specifici

per la funzione

readfile

c'è
http://it.php.net/file_get_contents

la funzione array_str non è molto utile dato che una stringa la puoi già gestire come gestisci array, o quasi:
echo $stringa{1};

ti stampa il secondo carattere della stringa

e la funzione
codice:
function pagetitle($url) {
  $contents = file($url);
  foreach($contents as $line) {
    if(preg_match("/^<title>(.*?)<\/title>$/", $line)) {
      $title = preg_replace("/^<title>(.*?)<\/title>$/", "\\1", $line);
    }
  }
  return $title;
}
ti conviene riscriverla in questo modo
codice:
function pagetitle($url)
{
  $contents = file_get_contents($url);
  preg_match('/<title>([^\<]+)<\/title>/is', $contents, $results)
  return isset($results[1]) == true && $result[1] !== '' ? $result[1] : false;
}
comunque la funzione qui non l'ho provata quindi se da errore ditemelo che controllo perché lo da