ASCII Random Infinito

Introducción
En mi antiguo blog empece a tener mucho spam, particularmente tenía bots que entraban a la pagina y posteaban random. Eso me molestaba bastante, así que trate de idear una manera creativa de detenerlos, y no solo detenerlos sino también entretenerlos, infinitamente… Lo que se me ocurrió fue regalarles ascii infinito en vez de mi pagina, de esa manera el bot se mantendría de manera indefinida esperando a que la pagina terminara de cargar, pero jamas lo haría, por que es ASCII infinito : ).
Demo
Para no desperdiciar bandwidth con bots, silenciosamente los redirigía a esta dirección:
http://emiliobool.110mb.com/ (recomiendo entrar usando firefox)
Como funciona
Es un script en php que revisa un folder con archivos en .txt y escoge uno al azar y lo abre. Entonces cada 9000uS envía una nueva letra de ese archivo hasta llegar al final. Una vez que llega al final abre otro archivo al azar y continua con el mismo ciclo. De esa manera gasta pocos recursos del server y te mantiene entretenido esperando a recibir la siguiente letra.
Compatibilidad
Browsers
Lo probé en firefox, opera, chrome e incluso IE y funcionó en todos, sin embargo en opera y chrome solo envía una linea completa a la vez, a diferencia de firefox e IE que envían letra por letra. Si vas a probarlo recomiendo firefox, el feeling es mejor. Particularmente uso Chrome, así que lastima por esa limitación. Quizás se puede sobrepasar si con cada carácter envías un tag html, como un <span> o similar, eso forzaría al browser a mostrar lo que lleva, pero gastaría mas bandwidth.
Edit: Hice una versión alternativa compatible con chrome http://emiliobool.110mb.com/chrome.php pero gasta más bandwidth (5 veces mas).
Servers
Particularmente funciona en local y en 110mb, pero en el server en el que tengo este blog no funciona. Las razones pueden ser muchas pero como no planeaba usarlo en este server nunca las investigue. Puede ser que envié la información comprimida o algo similar y ocupe configurar bien el php.ini o un archivo .htaccess. Debería funcionar en tu server, y sino, es cuestión de configuración.
Código
<?
//may or may not be needed depending on your server
@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('implicit_flush', 1);
header("Cache-Control: private, no-cache, must-revalidate");
//uncomment this if the script outputs timeout error
//set_time_limit(0);
echo str_repeat(" ", 256)."<pre>"; flush();ob_flush();
echo '<pre>';
flush();
ob_flush();
$dir = 'ascii';//folder
$files = array();
if($handle = opendir($dir)){
//get file names
while(false !== ($file = readdir($handle))){
if(is_dir($file) || $file == '..') continue;
$files[] = $file;
}
closedir($handle);
//main loop
while(1){
$size = sizeof($files);
if($size == 0) break;
$n = rand()%$size;
$file = $files[$n];
$fh = fopen("$dir/$file", 'r');
if($fh){
while(!feof($fh)) {
$buffer = fgets($fh);
$len = strlen($buffer);
for($i=0;$i<$len;$i++){
echo $buffer{$i};
if($buffer{$i} != ' '){//no wait for white spaces
flush();
ob_flush();
usleep(9000);//wait 9000uS
}
}
echo "<span />";//forces flush on chrome, opera and IE
}
fclose($fh);
}
}
}
?>
Download
Instalar
Solo descomprime los archivos, subelo a un server y abrelo en un browser.