<?php
if (isset($_REQUEST['source']) && (floor($_REQUEST['source']) == 1))
{
    
show_source(__FILE__); 
    exit();
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>Password Generator</title>

</head><body>
<h1>Password Generator</h1>

<?php
$WORDLIST 
'/usr/share/dict/words';
//$WORDLIST = '/Users/brian/bin/wordswithfriends.txt';
$MAXWORDLEN 7;
if (!
file_exists($WORDLIST))
    
printError();
else
    
printPasswords(20);
?>

    <p><small>[<a href="passwordgen.php?source=1">source</a>]</small></p>
    
</body></html>
<?php

function printError()
{
    GLOBAL 
$WORDLIST;
    print(
'<b class="error">Unable to open wordlist at ' $WORDLIST '</b>');
}

function 
separator()
{
    
$characters "0123456789.,:;/-$&@()?!'\"";
    return 
substr($charactersrand(0strlen($characters)), 1);
}

function 
printPasswords($passwordCount)
{
    GLOBAL 
$WORDLIST$MAXWORDLEN;
    
srand();
    
$fileSize filesize($WORDLIST);
    
$fh fopen($WORDLIST"r");
    if (!
fh)
    {
        
printError();
        return;
    }
    
// Get a list of $passwordCount results
    
for ($count 0$count $passwordCount$count++)
    {
        
$thisPassword '';
        
// Two words per password
        
for ($i 0$i 2$i++)
        {
            
// Try, within reason, to see if we can get a short-ish word
            
$word '';
            for (
$retry 0; ($retry 40) && ((strlen($word) > $MAXWORDLEN) || (strlen($word) == 0)); $retry++)
            {
                
$startPosition rand(0$fileSize);
                
fseek($fh$startPosition);
                
$junk fgets($fh);
                
$word strtolower(chop(fgets($fh)));
            }
            
$thisPassword .= $word;
            if (
$i == 0)
            
$thisPassword .= separator();
        }
        print(
'<code>' $thisPassword '</code><br />');
    }
    
fclose($fh);
}
?>