Foros del Web » Programando para Internet » PHP »

bajar archivo desde mysql al servidor

Estas en el tema de bajar archivo desde mysql al servidor en el foro de PHP en Foros del Web. Hola Necesito hacer lo siguiente, tengo archivos (imagenes) en una base de datos y utilizo el siguente script para mostrarla en la web Archivo : ...
  #1 (permalink)  
Antiguo 20/10/2009, 19:30
 
Fecha de Ingreso: julio-2002
Ubicación: stgo rec
Mensajes: 438
Antigüedad: 21 años, 8 meses
Puntos: 3
Sonrisa bajar archivo desde mysql al servidor

Hola

Necesito hacer lo siguiente, tengo archivos (imagenes) en una base de datos y utilizo el siguente script para mostrarla en la web

Archivo : inc_ver_foto.php
Código:
$sql="SELECT file_name, file FROM fotos WHERE idficha=122;";
$resultsql = mysql_query($sql, $con_bdd);
if(mysql_num_rows($resultsql)==1){ 
        $row_webfoto = mysql_fetch_array($resultsql);
}	
header("Content-Type: image/jpeg");
echo $row_webfoto[1];
Con esto muestra la imagen
Código:
<img src="inc_ver_foto.php?idficha=<?php echo $idfoto ?>">
Este codigo funciona bien, pero lo que necesito hacer antes de mostrarla en la web, es mandarla a la carpeta temporal del servidor y desde esa ubicacion ajustar el tamaño con otro script.

En resumen, como hago para que al bajar la foto con echo $row_webfoto[1]; la guarde en la carpeta temporal del servidor, y posterior a eso obtener la ruta y nombre de archivo con el que fue bajada.
__________________
Saludos
Leo
  #2 (permalink)  
Antiguo 20/10/2009, 19:31
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: bajar archivo desde mysql al servidor

debes escribir la información binaria de la imagen en un archivo...

usa fopen/fwrite/fclose


suerte!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 21/10/2009, 12:26
 
Fecha de Ingreso: julio-2002
Ubicación: stgo rec
Mensajes: 438
Antigüedad: 21 años, 8 meses
Puntos: 3
Sonrisa Respuesta: bajar archivo desde mysql al servidor

Enconte este ejemplo pero falta algo, aqui valida si existe el archivo, en mi caso siempre no va a existir, como lo hago ?

Código:
    $nombre_archivo = 'prueba.txt';
if (!$gestor = fopen($nombre_archivo, 'a')) {
         echo "No se puede abrir el archivo ($nombre_archivo)";
         exit;
    }

    // Escribir $contenido a nuestro arcivo abierto.
    if (fwrite($gestor, $contenido) === FALSE) {
        echo "No se puede escribir al archivo ($nombre_archivo)";
        exit;
    }
    
    echo "&Eacute;xito, se escribi&oacute; ($contenido) al archivo ($nombre_archivo)";
    
    fclose($gestor);
__________________
Saludos
Leo
  #4 (permalink)  
Antiguo 21/10/2009, 14:24
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: bajar archivo desde mysql al servidor

si vas a crear el archivo, pues omite la comprobación!!!

puedes usar directamente todo... por favor, lee el manual

http://php.net/fopen
http://php.net/fwrite
http://php.net/fclose
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 21/10/2009, 15:04
 
Fecha de Ingreso: julio-2002
Ubicación: stgo rec
Mensajes: 438
Antigüedad: 21 años, 8 meses
Puntos: 3
Respuesta: bajar archivo desde mysql al servidor

envia un error

Warning: fwrite(): supplied argument is not a valid stream resource in
No se puede escribir al archivo

la carpeta debe tener los atributos atributos para crear y modificar archivos, si es asi, como se cual es la carpeta donde se esta grabado el archivo ?
__________________
Saludos
Leo
  #6 (permalink)  
Antiguo 21/10/2009, 15:50
 
Fecha de Ingreso: julio-2002
Ubicación: stgo rec
Mensajes: 438
Antigüedad: 21 años, 8 meses
Puntos: 3
Pregunta Respuesta: bajar archivo desde mysql al servidor

Si, el tema del error es por los permisos de la carpeta donde es creado el archivo, pero esto me produce el siguiente problema, el archivo que es bajado es util solo por un tiempo corto, luego se puede eliminar, por este motivo yo quiero guardarlo en la carpeta temporal, es posible hacer esto ?
__________________
Saludos
Leo
  #7 (permalink)  
Antiguo 21/10/2009, 16:34
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: bajar archivo desde mysql al servidor

para eso debes usar tmpfile() o tempnam()

http://php.net/tmpfile
http://php.net/tempnam
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 21/10/2009, 20:05
 
Fecha de Ingreso: julio-2002
Ubicación: stgo rec
Mensajes: 438
Antigüedad: 21 años, 8 meses
Puntos: 3
Pregunta Respuesta: bajar archivo desde mysql al servidor

Hola

ahora estoy usando el siguente codigo para crear el archivo

Código:
	$nombre_temp = tempnam("/tmp", "picm_");
	$gestor = fopen($nombre_temp, "a");
	fwrite($gestor, $row_foto[0]);
	fclose($gestor);
pero se cae en la linea 2 al intentar abrir el archivo, el mensaje de error es es siguiente:

Warning: fopen():SAFE MODE Restriction in effect. the script whose uid is 3639 is not allowed to acces /tmp/picm_zyyd36 owned by uid

Warning:
fopen(/tmp/picm_zyyd36): failed to open stream:

Sera que mi hosting tiene algun tipo de bloqueo sobre la carpeta temporal
__________________
Saludos
Leo
  #9 (permalink)  
Antiguo 22/10/2009, 20:59
 
Fecha de Ingreso: julio-2002
Ubicación: stgo rec
Mensajes: 438
Antigüedad: 21 años, 8 meses
Puntos: 3
Respuesta: bajar archivo desde mysql al servidor

Ya aqui esta el codigo terminado y funcionado.

Solo un detalle, al bajar la imagen pone el nombre del scrip (nombre_archivo.php) intente enviar el header con el nombre del archivo pero no funciono.

Código:
<?php 
	
	$idimagen=$_GET["idimagen"];
	//Obtengo foto desde la base de datos
	if(is_numeric($idimagen)){	
		$sql="SELECT file_name, file FROM fotos WHERE imagen='$idimagen';";
		$resultsql = mysql_query($sql, $con_bdd_colegio);
		if(mysql_num_rows($resultsql)==1){ 
			$row_foto = mysql_fetch_array($resultsql);
		}
	}
		
	//Crea el archivo temporal en el servidor
	$nombre_temp = tempnam("tmp", "picm");	
	$gestor = fopen($nombre_temp, "a");
	fwrite($gestor, $row_foto[1]);
	fclose($gestor);
	
	//Ajusta la imagen
	
	//Ancho y alto
	$anchura=180;
	$hmax=180;	
	$nombre=$nombre_temp;
	$datos = getimagesize($nombre);
	if($datos[2]==1){$img = @imagecreatefromgif($nombre);}
	if($datos[2]==2){$img = @imagecreatefromjpeg($nombre);}
	if($datos[2]==3){$img = @imagecreatefrompng($nombre);}
	$ratio = ($datos[0] / $anchura);
	$altura = ($datos[1] / $ratio);
	if($altura>$hmax){$anchura2=$hmax*$anchura/$altura;$altura=$hmax;$anchura=$anchura2;}
	$thumb = imagecreatetruecolor($anchura,$altura);
	imagecopyresampled($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);
	if($datos[2]==1){header("Content-type: image/gif");imagegif($thumb);}
	if($datos[2]==2){header("Content-type: image/jpeg");imagejpeg($thumb);}
	if($datos[2]==3){header("Content-type: image/png");imagepng($thumb);}	
	imagedestroy($thumb);
	
	//Elimina el archivo temporal
	unlink($nombre_temp);	
?>
__________________
Saludos
Leo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:45.