Página 1 de 7

Montar un servidor de imagenes en tu foro phpBB3

Publicado: 13 Dic 2008, 05:58
por ator_18
Personalmente no me gusta tener que hacer que los miembros de mi foro deba recurrir a servidores como imageshack o photoimage. El uso de los atachment para las imagenes no termina de convencerme, aunque me agrada mas que la idea de imageshack o photoimage. Decidi personalizar mi propio servidor de imagenes para que los usuarios suban sus imagenes directamente a mi servidor. Puesto que tengo espacio y ancho de banda ilimitados, no me preocupo por el tamaño ni la cantidad de las imagenes.
La principal ventaja es que siempre puedes ir creando copias de seguridad de la carpeta con las imagenes de los usuarios y no depende de la velocidad o estabilidad de servidores externos. A mi me gusta depender lo menos posible de cualquier servicio que no se encuentre en mi servidor y al que yo no tenga acceso (por malas experiencias con alguno sobretodo).

Bien, voy a tratar de explicar como montar ese servidor e integrarlo con tu foro phpBB3, veras que es muy sencillo.

Primero debes descargar el archivo adjunto (Servidor de imagenes.tar), una vez descomprimido encuentras 1 archivo que se llama imagehosting.php. Teneis que editar ese archivo con los datos de vuestro foro, os copio las lineas que debeis editar:

Código: Seleccionar todo

$varpath = "http://URL DE LA RAIZ DE TU HOST/galeria/tmp/";
<title>TITULO DE TU VENTANA EN EL EXPLORADOR</title>
<td width="413" height="40" class="titulo">NOMBRE DE TU SITIO <img src="TU LOGO (AQUI VA UNA URL, ESTA SENTENCIA ES OPCIONAL Y PUEDE SER ELIMINADA)"></td>
<td class="text">Aloja tu imagen en nuestro servidor de NOMBRE DE TU SERVIDOR:</td>
Una vez rellenados vuestros datos guardais el archivo y subis la carpeta galeria a la raiz de vuestro host. Ahora abris el archivo iframe.php y poneis vuestra URL aqui:

Código: Seleccionar todo

<input type="button" onclick="abrir('http://URL DE TU HOST/galeria/imagehosting.php',0,0,0,0,0,0,0,600,455,60,20,1);" value="Subir imagen">
Una vez editado subimos el archivo iframe.php a la raiz de vuestro foro.

Ahora debemos editar el archivo TU_ESTILO_/template/posting_body.html y buscamos:

Código: Seleccionar todo

		<table cellpadding="1">
		<!-- IF S_BBCODE_ALLOWED -->
			<tr>
				<td><input type="checkbox" class="radio" name="disable_bbcode"{S_BBCODE_CHECKED} /></td>
				<td class="gen">{L_DISABLE_BBCODE}</td>
			</tr>
		<!-- ENDIF -->
Ahora debemos añadir esta linea antes del texto buscado:

Código: Seleccionar todo

<iframe src="/foro/iframe.php" scrolling="no" allowtransparency="true" frameborder="0" width="140" height="35"></iframe>
Actualizais la plantilla y a funcionar. Cuando escribais un mensaje en el foro os aparecera un boton con la opcion de subir imagen. Una vez pulsado se abrira una nueva ventana para seleccionar la imagen ... Muestro capturas
Imagen
Imagen
Imagen

Re: Montar un servidor de imagenes en tu foro phpBB3

Publicado: 13 Dic 2008, 11:59
por AMateos
Excelente tutorial. Muchas gracias por compartirlo con nosotros :)

Re: Montar un servidor de imagenes en tu foro phpBB3

Publicado: 13 Dic 2008, 12:17
por ator_18
Importante:
Se me olvido deciros que la carpeta tmp que se encuentra dentro de galeria debe tener una mascara de permisos 777 (rwxrwxrwx)

Re: Montar un servidor de imagenes en tu foro phpBB3

Publicado: 13 Dic 2008, 14:05
por thejerry007
gracias esta interesante:)

Re: Montar un servidor de imagenes en tu foro phpBB3

Publicado: 15 Dic 2008, 23:44
por Draude
URL: http://massissosdelgarraf.com" onclick="window.open(this.href);return false;
Versión phpBB: phpBB3 (3.0.4)
MODs Instalados: Botones con imagenes, Separar categorías index subsilver2, Genders 1.0.1, AJAX Chat 2.0.0 Beta, Text hit counter, 1.0.1, Page Title Number MOD.
Plantilla(s) usada(s): subsilver (principal) y prosilver2
Servidor: Xartra
Actualización desde otra versión: Si (de la 3.0.3 a 3.0.4)
Conversión desde otro sistema de foros: No

Perdona si me equivoco, pero he estado probando el codigo y me he encontrado con esto:

He probado el codigo y lo primero que he visto, es que en la plantilla prosilver, se tenia que modificar el prosilver/template/posting_buttons.html y no el TU_ESTILO_/template/posting_body.html. He estado mirando por la red y si que he visto que otras plantillas lo tienen efectivamente en el posting_body.html.

Esto, de hecho es tribial, pero al ejecutarlo, me da un error. Es este que muestro. Podria tratarse de definar las variables action e image, pero me extrañaria.

Bueno, siento poner tantos problemas pero este sistema me gustaria implementarlo en mi foro.

Saludos.

Re: Montar un servidor de imagenes en tu foro phpBB3

Publicado: 16 Dic 2008, 04:00
por ator_18
En primer lugar lamento el error de la plantilla, lo tengo instalado en mi plantilla mile100 y lo probe en prosilver para hacer una prueba y todo fue correcto y funcionando ok, pero se me paso que el archivo se llamaba distinto, gracias por comentarlo Draude.

¿Podrias copiarmelo entero tu imagehosting.php editado y le echo un ojo?. Revisa que todas las sentencias estan correctamente cerradas.

Re: Montar un servidor de imagenes en tu foro phpBB3

Publicado: 16 Dic 2008, 08:35
por Draude
Ok, aquí te lo pongo.

Código: Seleccionar todo

<?php 
$varrand = substr(md5(uniqid(rand())),0,10);		
$varallw = array("image/bmp","image/gif","image/jpeg","image/pjpeg","image/png","image/x-png");
$varpath = "http://massissosdelgarraf.com/_PhotoGallery/tmp/";
$varstat = "";

if ($_POST["action"] == "upload") {
	if (is_uploaded_file($_FILES["imagen"]["tmp_name"])) {
		$varname = $_FILES["imagen"]['name'];
		$vartemp = $_FILES['imagen']['tmp_name'];
		$vartype = mime_content_type($vartemp);
		
		if (in_array($vartype, $varallw) && $varname != "") {
			$arrname = explode(".", $varname);
			$varname = $varrand.".".$arrname[1];
			if (copy($vartemp, "tmp/".$varname)) {
				$varpath = $varpath.$varname;
				$varstat = "ok";
			} else {
				$varstat = "Error al pujar l'arxiu";
			}
		} else {
			$varstat = "Arxiu no valit";
		}
	}
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Massissos del Garraf</title>
<link href="cssupload.css" rel="stylesheet" type="text/css" />
</head>
<body>
<table width="420" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="413" height="40" class="titulo">Massissos del Garraf <img src="http://massissosdelgarraf.com/w_PhotoArchive/_ImatgesWeb/Massissos_del_Garraf_Inicial_Mini3.gif"></td>
  </tr>
  <tr>
    <td class="text">Alotja la teva imatge en el nostre servidor MASSISSOS DEL GARRAF:</td>
  </tr>
  <tr>
  <form action="imagehosting.php" method="post" enctype="multipart/form-data">
    <td height="50" valign="top" class="text">
      <input name="imagen" type="file" class="casilla" id="imagen" size="35" />
      <input name="enviar" type="submit" class="boton" id="enviar" value="Subir Imagen" />
	  <input name="action" type="hidden" value="upload" />	  </td>
	</form>
  </tr>
  <?php if ($varstat == "ok") { ?>
  <tr>
    <td class="textinf"><strong>Confirmaci&oacute;:</strong><br>
	Arxiu publicat satisfactoriament. Pots utilitzar les següents opciones per enllaçar-lo:<br>
	<br>
	<strong>Enllaç BBCode per posar la imatge en el fòrum:</strong> <br>
	<input name='txt1' type='text' value='[img]<?php echo $varpath; ?>[/img]' size='60'>
	<br>
	<strong>Enllaç BBCode per crear diapositives de totes les imatges del teu post:</strong> <br>
	<input name='txt1' type='text' value='[slideshow=grupo1]<?php echo $varpath; ?>,Sin titulo[/slideshow]' size='60'>
	<br>
	<strong>Enllaç Directe: </strong><br>
	<input name='txt2' type='text' value='<?php echo $varpath; ?>' size='60'></td>
  </tr>
  <?php } else { ?>
	  <?php if ($varstat != "") { ?>
	  <tr>
		<td class="textinf"><strong>Error:</strong><br>
	    <?php echo $varstat; ?>&nbsp;</td>
	  </tr>
	  <?php } ?>
  <?php } ?>
</table>
<?php if ($varstat == "ok") { ?>
<p align="center"><img src="tmp/<?php echo $varname; ?>"></p>
<?php } ?>
<?php if ($_GET['image'] != "") { ?>
<p align="center"><img src="tmp/<?php echo $_GET['image']; ?>"></p>
<?php } ?>
</body>
</html>

Donde marca el error es esta:

Código: Seleccionar todo

if ($_POST["action"] == "upload") {
y esta:

Código: Seleccionar todo

<?php if ($_GET['image'] != "") { ?>

Re: Montar un servidor de imagenes en tu foro phpBB3

Publicado: 16 Dic 2008, 16:44
por ator_18
Me decanto a que tu version de php es antigua y no reconoce las variables del sistema _GET y _POST, porque tu imagehosting.php parece correcto.
_GET y _POST son dos variables globales predefinidas por el sistema PHP (creo que desde la version 4.1 mas o menos). Prueba a sustituir en el archivo lo siguiente:

_GET por HTTP_GET_VARS
_POST por HTTP_POST_VARS

Re: Montar un servidor de imagenes en tu foro phpBB3

Publicado: 16 Dic 2008, 18:51
por Draude
Tienes toda la razón, es la 4.1. Pero todo y modificar lo que me comentas sigue con el mismo error. Parece como si te tubieran que definir como variables action y image. Realmente no entiende lo que sucede. Tengo web's realizadas en php y no me dan este problema y menos con este tipo de codigo.

No se que sucede. :(

Re: Montar un servidor de imagenes en tu foro phpBB3

Publicado: 16 Dic 2008, 19:19
por Draude
Buscando en foros he encontrado la solución a esto, se trata de cambiar el codigo:

Código: Seleccionar todo

if ($_POST["action"] == "upload") {
Por este:

Código: Seleccionar todo

if(isset($_POST["action"]) == "upload"){
Y este:

Código: Seleccionar todo

<?php if ($_GET['image'] != "") { ?>
Por este:

Código: Seleccionar todo

<?php if (isset($_GET['image']) != "") { ?>
Pero sigo con problemas, al carrgar la imagen da otro error:

PHP Fatal error: Call to undefined function: mime_content_type() in C:\Domains\massissosdelgarraf.com\wwwroot\_PhotoGallery\imagehosting.php on line 12

Ahora estoy mirando que significa y donde esta el problema.

Gracias y sigo con ello.

Re: Montar un servidor de imagenes en tu foro phpBB3

Publicado: 16 Dic 2008, 20:33
por ator_18
En el codigo se incuyen sentencias y variables que quiza te den fallos por tu version de php. Si tienes acceso completo al servidor instala estas librerias:
http://es2.php.net/mime_magic" onclick="window.open(this.href);return false;

mime_content_type lo unico que hace es devolver el tipo de archivo que pasas como parametro. Intenta buscar alguna funcion que haga lo mismo para tu version de php o instalar las librerias que te pase.

Re: Montar un servidor de imagenes en tu foro phpBB3

Publicado: 16 Dic 2008, 21:03
por Draude
Estaba mirando justamente esto que me has pasado. Ya he visto que el problema es de la versión del PHP. No te molesto más y me pongo no la actualización. Ya estoy en contacto con el soporte de mi dominio.

Gracias y saludos.

Re: Montar un servidor de imagenes en tu foro phpBB3

Publicado: 16 Dic 2008, 21:52
por ator_18
Averiguar el tipo de datos podrias hacerlo programando una funcion que te lea la cadena recibida desde el ultimo punto hasta el final (asi obtienes la extension). Puedes crear un array conteniendo los tipos de datos en funcion de la extension. Seria mas o menos lo que hace mime_content_type. La funcion hace lo siguiente:

mime_content_type('logo.gif') -> Devolveria image/gif
mime_content_type('index.php') -> Devolveria text/plain

Como ves a la funcion se le pasa un parametro tipo string y devuelve otro string. No seria muy complicado hacer una funcion parecida. Si tienes tiempo intentalo, no te puedo recomendar un manual de php para tu version, necesitarias uno un poco antiguo.

Un saludo y suerte!!.

Re: Montar un servidor de imagenes en tu foro phpBB3

Publicado: 16 Dic 2008, 22:03
por ator_18
He encontrado un codigo en internet que segun parece te crea la funcion de la que te hable, el codigo es el siguiente:
La fuente es es.php.net y su autor serkanyersen

Intentalo con ese codigo, ten encuenta que la funcion se llama get_mime y no mime_content_type, espero que te sea util.

Código: Seleccionar todo

<?
/**
 * Tries to get mime data of the file.
 * @return {String} mime-type of the given file
 * @param $filename String
 */
function get_mime($filename){
    preg_match("/\.(.*?)$/", $filename, $m);    # Get File extension for a better match
    switch(strtolower($m[1])){
        case "js": return "application/javascript";
        case "json": return "application/json";
        case "jpg": case "jpeg": case "jpe": return "image/jpg";
        case "png": case "gif": case "bmp": return "image/".strtolower($m[1]);
        case "css": return "text/css";
        case "xml": return "application/xml";
        case "html": case "htm": case "php": return "text/html";
        default:
            if(function_exists("mime_content_type")){ # if mime_content_type exists use it.
               $m = mime_content_type($filename);
            }else if(function_exists("")){    # if Pecl installed use it
               $finfo = finfo_open(FILEINFO_MIME);
               $m = finfo_file($finfo, $filename);
               finfo_close($finfo);
            }else{    # if nothing left try shell
               if(strstr($_SERVER[HTTP_USER_AGENT], "Windows")){ # Nothing to do on windows
                   return ""; # Blank mime display most files correctly especially images.
               }
               if(strstr($_SERVER[HTTP_USER_AGENT], "Macintosh")){ # Correct output on macs
                   $m = trim(exec('file -b --mime '.escapeshellarg($filename)));
               }else{    # Regular unix systems
                   $m = trim(exec('file -bi '.escapeshellarg($filename)));
               }
            }
            $m = split(";", $m);
            return trim($m[0]);
    }
}
?>

Re: Montar un servidor de imagenes en tu foro phpBB3

Publicado: 16 Dic 2008, 23:53
por Draude
Creo que hay un problema con la configuración del servidor, ya que he verificado la versión del php y es la 4.4.5. Des de el release 4.3 se admite la función mime_content_type. Por esto me he puesto en contacto con ellos y espero una respuesta al respecto.

Tema a parte, he provado la función que me has pasado y va bien, aun no la he integrado. Ya te contare. Gracias otra vez.