Descargando ficheros con PHP

sábado 17 de mayo de 2008

En una de mis ideas marcianas que tengo me dio por hacer un script que transfiriera archivos MP3 de otros servidores, realizando la busqueda con Google a traves de sus busquedas avanzadas. Entre los problemas que consegui es que los ficheros se almacenaban en memoria y su size en bytes se duplica, y en caso de que sea mayor que el size destinado para los scripts en php (php.ini->memory_limit) ya saben tira un error como este donde nos avisa que nuestro script ocupa demasiada memoria.

En primer instancia buscaba verificar el size del archivo a descargar, pero no podia hacerlo que de todas maneras se saldria del limite (peleando contra la memoria), entonces lo que hice fue que a traves de sockets descargaba solamente la propiedad MIME de Content-Length: y verificar que fuese menor a la memoria que yo tenia disponible. Despues todo fue mas sencillo con cURL.


if(ereg("mp3",$img_url))
{
$img_url2= $url;
$img_url2.= $img_url; //<========== CHECAR LA DIAGONAL EN LA URL
if(get_remote_file_size($img_url2)<=12 && test_audio($img_url2)==true){
if (defined("CURLOPT_TIMEVALUE")){

$enlace = curl_init($img_url2);
curl_setopt($enlace, CURLOPT_VERBOSE, TRUE);
curl_setopt($enlace, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($enlace, CURLOPT_HEADER, FALSE);
curl_setopt($enlace, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($enlace, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($enlace, CURLOPT_USERAGENT, "HELLS-search/1.0.5");
set_error_handler("bandwitch_error_handler");
try {
$total_data = curl_exec($enlace);
} catch (Exception $e) {
echo $e->getMessage()."(".$img_url." / Failed)";
}
restore_error_handler();

curl_close($enlace);
}

$file_full = "./".$date."/".$img_url; //<====== CHECAR PATH
$fp = fopen($file_full,"w");

fwrite($fp,$total_data);

echo $img_url.' - Descargado -Memoria usada: ' . round(memory_get_usage() / 1024,1) . ' KB de ' . round(memory_get_usage(1) / 1024,1) . ' KB <br>';


}
flush();
unset($total_data);
unset($fp);
unset($item);
unset($img_url);
unset($enlace);
}

Colapsando servidores

Hoy me ha pasado algo muy curioso y es que tengo mi hospedaje en http://www.webhostingbuzz.com/ y al estar desarrollando un script en php para mi web sucedio que aparentemente 2 lineas de codigo en php tumbaron un servidor Xeon con 8 CPU's y al ser un servidor campartido, todas las webs que lo compartian conmigo se vinieron abajo por una hora y media.








y es que las lineas responsables de esto son:



<?php
system("php index.php &",$return);
echo $return."<br>";
?>



Pero no es nada del otro mundo a menos que el index.php sea el script que comento en esta entrada.



Despues de media hora recibo un correo electronico avisandome que mi cuenta habia sido suspendida y que tenia dos opciones, contrataba un plan empresarial o me transferian a un servidor de altos recursos para gastarmelos. =D



Ya les estara platicando como va el otro servidor con mayor capacidad, a ver si es muy muy. :P

Capacitación On line en Microsoft Technet

lunes 12 de mayo de 2008



Via MSP Ivana Tilca me entero de los cursos de capacitacion que ofrecen las personas de Microsoft TechNet de forma totalmente gratuita.

Los cursos de capacitacion forman parte de un serie de eventos realizados en el Lanzamiento de {Heroes}

AGENDA

Key note: Bienvenida con breve introducción y paseo de la nuevas funcionalidades técnicas de Windows Server 2008, Visual Studio 2008 y SQL Server 2008.

Windows Server Core: Introducción a Windows Server 2008.

Windows Server Virtualización: Administrando la infraestructura de TI; virtualización de la plataforma para nivelar las inversiones.

Windows Server Seguridad: Evitando que la información se filtre; seguridad en la plataforma para trabajar con confianza.

Windows Server Web: Respondiendo a nuevas demandas en mi plataforma Web; optimización de la plataforma Internet para crecer.

Windows Server 2008/Vista: Windows Server y Vista. La mejor combinación.

SQL track 1: Administración en SQL 2008.

SQL track 2: Aplicaciones de Misión Crítica sobre SQL 2008.

Creando la siguiente generación de aplicaciones Web con mayor productividad. Diseñador HTML & CSS, AJAX, JS Debugging & Intellisense.

Herramientas para asegurar la calidad utilizando Visual Studio Team System. Métricas de código, cobertura de código, Testing en VS2008 e Integración de código.

Aplicaciones con interfaces familiares bajo Microsoft Office System. Ribbons Designer, Custom Task Pane, Outlook Form Regions, Workflows en SharePoint.

Clientes ricos ocasionalmente conectados. Desarrollo con WPF. Synchronization Services.

Accediendo a múltiples fuentes de datos con LINQ. Características de LINQ, combinando datos de diferentes fuentes.

Silverlight 2: Iluminando la Web. VS 2008, nuevas características en Silverlight 2.

Conectando al mundo con .NET Framework 3.5: WCF + WF para mejores resultados. Syndication Services e integración WCF+WF.

Extendiendo Visual Studio 2008. Demostraciones de extensiones de Visual Studio. Resumen de ecosistema: Shell & GAT/GAX.

Registrate AQUÍ

Extraccion de informacion de M-P-3

En primera, dejenme decirle que no tenia ni la mas remota idea de que tipo de informacion podrian mantener archivos binarios como los MP3, es decir, informacion como el titulo de la cancion, el album al que pertenecen asi como el numero de track, en principio me base en una clase algo sencilla y que funcionaba bastante bien pero solo con algunos MP3's y llegue a la conclusion de que no todos estaban estructurados o codificados de la misma manera, ya que en algunos extraia la informacion como debia, y en otros simplemente no extraia nada.


<?php
require('id3.class.php');
$myId3 = new ID3("C:\wamp\www\mp3\evoriganywhere.mp3");
$myId3->getInfo();
echo $myId3->getAlbum();
echo "<hr>";
echo $myId3->getTitle();
?>


La clase que realmente me resolvio el problema se llama getID3 y esta bastante bien documentada, con ejemplos practicos del uso de la clase y sobre todo muy facil de leer el codigo fuente.

Un saludo y a codificar MP3's.

The Top 75 Open Source Security Apps

sábado 3 de mayo de 2008

En eSecurity Planet han realizado una gran lista de las mejores herramientas de seguridad especializadas en zonas fuertes de seguridad de redes.

Aqui estan los principales contendientes de anti-virus, firewalls, forense, detección de intrusos, y mucho más.

eSecurity Planet

WPF Video de demostracion

Gracias a mi amiga Ivana Tilca MSP de argentina me entero de un gran video realizado por ella en Channel 8, donde se hace una demostracion de como se programan aplicaciones WPF, esta muy bien realizado y es digno de un plus. =)



Get the code and try it yourself.