Du kannst den Vergleich auf true weglassen. is_dir() liefert bereits einen booleschen Wert. Den nochmal zu befragen ob er wahr ist, ist unnötig.
ok...
Weiterhin solltest du dir mal do-while anschauen.
Dann sollte das ja so funktionieren!?
do {
$dirName = $random->random_text(20);
} while(is_dir($dirName));