¿Que debo tener en cuenta antes de realizar un Hosting de Imágenes?

Iniciado por TheEGG 89, 20 Agosto 2012, 10:10 AM

0 Miembros y 1 Visitante están viendo este tema.

TheEGG 89

Amigos, tengo como proyecto en mente un Hosting de Imágenes.
Me gustaría saber recomendaciones con respecto al lenguaje a utilziar, ¿cual me recomiendan?. Lo que mas despierta mi curiosidad es saber cual me conviene mas a la hora de "generar" los links correspondientes a la imágen que suba el usuario.

Agradezco su tiempo!

@synthesize

Si lo haces en serio es un proyecto bastante grande, al cual tienes que dedicar mucho tiempo en pensar como sería el funcionamiento.

Me voy a ahorrar darte consejos sobre las políticas de usuarios/subida de imágenes, y te digo cosas mas técnicas.

Una cosa importante (Que hacía megaupload) para no repetir archivos, es comprobar la suma (Prueba MD5 o SHA) y si el archivo ya existe, no hace falta subirlo.

Esto tiene doble utilidad, con la suma del archivo, puedes hacer tu otra suma para generar un link único a ese archivo. Así los links no se repiten.

Lenguajes, está claro. PHP + SQL (MySQL, PostgreSQL, sqlite,. etc etc) y HTML+CSS+Js. Vamos, como casi todo.

Luna71c0

¿Que lenguaje? y en su momento pude haber dicho el que te quede mas comodo :P pero bueno creo que Daemon Freedom lo dijo bastante bien :P
Por cierto, un consejo, si es un proyecto grande y NECESITA TIEMPO, no lo abandones, dia a dia trabaja con eso

Citar
Un pequeño paso para el programador....
Un gran paso para el hacker...

...]LunaHAck[...


i'm the "Luna71c0"

Kase

tiempo, grande?   no, y no..  si lo sabes hacer en cuestion de horas lo tienes listo.. y asta aceptando subidas de imagen de distintas formas como directo de una url...


el verdadero problema es el dinero... dinero, dinero y mas dinero....  las imagenes consumen mucho trafico y espacio, ningun proveedor "shared" te permitiria subir una web de imagenes a sus servidores...

necesitarias forzosamente contratar maquinas virtuales, o servidores enteros.. echale quisas unos 15 euros por mes para que te des una idea...

y debes estar preparado para escabilizar el proyecto.. si pega, en cualquier momento deberas conciderar un cluster de computadoras, y un sistema de cache...

si lo vaz a hacer con php considera hiphop  para convertir tu php a C

auke quien me conosca sabe que lo aria directamente con python y de servidor de aplicacion tornado, y de servidor de imagenes apache...

WHK

Mira, yo hize un uploader de imagenes en php sin utilizar mysql y sin problemas de seguridad, lo hize en 30 minutos:

Index.php:
Código (php) [Seleccionar]
<?php
/* Default config */
$sys = array(
'db' => '.ht_dbimages'/* Database */
'self_script' => (isset($_SERVER['HTTPS']) == true 'https' 'http' '://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']),
'start' => 0/* Bite start */
'length' => 0/* Bites length */
'extension' => '.dat'/* File extension */
'max_length' => 2000000/* Max upload/download file (2MB) */
'finish_poiner' => 0,
'finish_length' => 0,
'finish_extension' => 'jpg',
'totalsizedb' => 0,
'err' => false,
'headerdb' => "DBIMG\x00\x01"
);
/* Re-config... */
if(!file_exists($sys['db']))
file_put_contents($sys['db'], $sys['headerdb']);
$sys['totalsizedb'] = filesize($sys['db']);

if(
$_FILES){
/* Manage errors */
if((int)$_FILES['img']['size'] > (int)$sys['max_length'])
$sys['err'] = 'El archivo es demasiado grande.';
if(!exif_imagetype($_FILES['img']['tmp_name']))
$sys['err'] = 'El archivo no es una imágen.';
/* Save file */
if(!$sys['err']){
$sys['finish_pointer'] = (int)$sys['totalsizedb'];
$sys['finish_length'] filesize($_FILES['img']['tmp_name']);
$sys['finish_extension'] explode('.'$_FILES['img']['name']);
$sys['finish_extension'] substr($sys['finish_extension'][count($sys['finish_extension']) - 1], 05);
file_put_contents($sys['db'], file_get_contents($_FILES['img']['tmp_name']), FILE_APPEND LOCK_EX);
}

}elseif(isset(
$_GET['data']) and (strlen($_GET['data']) > 0)){
/* Split data */
$data $_GET['data'];
if(str_replace('/'''$data) != $data){
$data explode('/'$data);
$data $data[count($data) - 1];
}
$data explode('_'$data);
$sys['start'] = (int)$data[0];
$data explode('.'$data[1]);
$sys['length'] = (int)$data[0];
$sys['extension'] = $data[count($data) - 1];
/* Manage errors */
if($sys['length'] > $sys['max_length'])
$sys['err'] = 'El archivo es demasiado grande.';
if($sys['start'] < 1)
$sys['err'] = 'El archivo no existe.';
if(($sys['start'] + $sys['length']) > $sys['totalsizedb'])
$sys['err'] = 'El archivo no existe.';
$tmpf tempnam(0'');
file_put_contents($tmpffile_get_contents($sys['db'], NULLNULL$sys['start'], $sys['length']));
if(!exif_imagetype($tmpf))
$sys['err'] = 'El archivo no es una imágen.';
/* Get file */
if(!$sys['err']){
header('Content-Type: image/'.substr($sys['extension'], 05));
header('Content-Length: '.(int)$sys['length']);
/* MAX Cache */
header('Last-Modified: Tue, 03 Jul 2001 06:00:00 GMT');
header('Expires: Tue, 03 Jul 2500 06:00:00 GMT');
echo file_get_contents($tmpf);
exit;
}

}
?>


<?php if($sys['err']){ ?>
Error: <?php echo $sys['err']; ?><hr />
<?php }elseif((int)$sys['finish_pointer'] > 0){ ?>
File saved:
<a target="_blank" href="<?php echo ($outfile dirname($sys['self_script']).'/'.(int)$sys['finish_pointer'].'_'.(int)$sys['finish_length'].'.'.$sys['finish_extension']); ?>">
<?php echo $outfile?>
</a><hr />
<?php ?>
<form action="<?php echo $sys['self_script']; ?>" method="post" enctype="multipart/form-data">
Image: <input type="file" name="img" /> <input type="submit" value="Upload" />
</form>


.htaccess:
# MiniHostingIMG V1.0 by WHK - DrawCoders
Options -Indexes
ErrorDocument 404 "El archivo no existe <a href='javascript:history.go(-1);'>Volver</a>"
RewriteEngine on
RewriteCond %{REQUEST_URI} !(.*)index.php$
RewriteRule ^(.*)$ index.php?data=$1


Pones esos dos archivos juntos y listo!, utiliza un solo archivo como base de datos binario, aunque pese 50gb no tarda mas de 0.001 segundos en obtener los archivos ya que el puntero de php se posiciona justo sobre el byte adecuado, no necesita cargar el archivo completo, además es super util en hostings que te restringen el numero de archivos guardados como hostgator.

El archivo que el sistema creará para la base de datos se llama .ht_dbimages, hay que darle permisos de sobreescritura, por defecto los servidores apache deniegan el acceso directo gracias a la directiva por defecto de denegación de acceso a <.ht*>.

Kase

un solo archivo?! esa idea es genial... si empiezas a guardar todas las fotos en un directorio unico vas a reventar el sistema de directorios...

yo los guardaria por carpetas con año dentro carpeta mes, y dentro dia, y dentro fotos.. y eso lo serviria con apache puro.

Luna71c0

Cita de: Kase en 22 Agosto 2012, 07:47 AM
tiempo, grande?   no, y no..  si lo sabes hacer en cuestion de horas lo tienes listo.. y asta aceptando subidas de imagen de distintas formas como directo de una url...


el verdadero problema es el dinero... dinero, dinero y mas dinero....  las imagenes consumen mucho trafico y espacio, ningun proveedor "shared" te permitiria subir una web de imagenes a sus servidores...

necesitarias forzosamente contratar maquinas virtuales, o servidores enteros.. echale quisas unos 15 euros por mes para que te des una idea...

y debes estar preparado para escabilizar el proyecto.. si pega, en cualquier momento deberas conciderar un cluster de computadoras, y un sistema de cache...

si lo vaz a hacer con php considera hiphop  para convertir tu php a C

auke quien me conosca sabe que lo aria directamente con python y de servidor de aplicacion tornado, y de servidor de imagenes apache...
Me referia al tiempo de popularización y al alcance :D

Citar
Un pequeño paso para el programador....
Un gran paso para el hacker...

...]LunaHAck[...


i'm the "Luna71c0"

TheEGG 89

Gracias por responder!!
ya tengo a un especialista en Marketing par alo que va a ser difusión, disponemos de hasta 50 dólares al mes para Hosting, no es mucho.. pero para un comienzo va a estar bien, ya que lo vamos a utilizar un selecto grupo de usuarios (para probar su correcto funcionamiento antes de lanzarlo)

Y la idea es que a cada usuario (cuenta registrada) le corresponda una carpeta dentro del Hosting.

:-D

WHK

Si vas a guardar cada archivo en carpetas te va a salir muy costoso.

WIитX

a parte de todo eso... céntrate en un buen diseño, eso llama a mucha gente por hay muchos honstings de imágenes y que sea rápido en subir...

Podrías ponerle subida múltiple de imágenes por muchas veces es muy costoso subir imagen a imagen.

PD: ¿Sabes ya como se llamara?
"Es más divertido hacerse pirata que unirse a la marina." (Steve Jobs)