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

ASCII Loader Source

Instalar

Solo descomprime los archivos, subelo a un server y abrelo en un browser.

You can follow any responses to this entry through the RSS 2.0 feed.