Una de las cosas que tienen muchas páginas de descarga directa es la velocidad limitada para los clientes no premium. ¿Cómo lo hacen? Vamos cómo.

En este ejemplo vamos a suponer que queremos limitar la velocidad de descarga a 5kB/s. Para ello utilizaremos la extensión HTTP de pecl, en concreto la magia reside en la función http_throttle. Esta función recibe dos parámetros:

  1. número de segundos entre cada envío de bloques de datos.
  2. tamaño en bytes de cada bloque de datos.

De este modo, si le decimos que cada bloque de datos tenga un tamaño de 5000 bytes, y que entre cada petición debe transcurrir un segundo, conseguiremos que las descargas se realicen a 5kB/s. Realmente no es una velocidad estable, pero tiene muy pocas oscilaciones, la mayoría debidas a la conexión más que al servidor. Este es el código de ejemplo:

<?php http_throttle(1, 5000); http_send_content_type(‘application/pdf’); http_send_content_disposition(‘test.pdf’); http_send_file(‘test.pdf’); ?>

Como veis, únicamente establecemos la velocidad, las cabeceras para que el navegador sepa cómo manejar la petición, y finalmente mandamos un fichero de prueba llamado test.pdf que se encuentra en el directorio de trabajo actual.

El único problema está en la disponibilidad de la extensión HTTP. No creo que muchos servicios de alojamiento la tengan activada, aunque siempre se les puede pedir que lo instalen. Si quieres saber cómo hacerlo, simplemente tienes que hacer lo siguiente (en sistemas debian):

$ sudo pecl install http_pecl

Si te devolviera un código de error, quizás sea porque no tienes instaladas las herramientas de desarrollo de PHP, o alguna de las bibliotecas necesarias para compilar esta extensión. Tendrás que hacer lo siguiente:

$ sudo aptitude install php5-dev
$ sudo aptitude install libcurl3-openssl-dev

Ahora ya podrás compilarla. Sólo queda activarla en tu fichero php.ini. Añade esta línea:

extension=http.so

Y reinicia Apache con

$ sudo /etc/init.d/apache2 restart