ARGENTOP2P

Soporte, Ayuda y Consultas => Programación en General => Mensaje publicado por: demono en Febrero 28, 2009, 10:14:22

Título: Insertando imagen en Mysql con PHP
Publicado por: demono en Febrero 28, 2009, 10:14:22
Buenas gente, estoy teniendo problemas insertando una imagen en una DB en un campo longblob mediante un formulario con PHP.
En mi PC (Con el register... en on, corriendo bajo Windows) funciona perfectamente, pero una vez que lo subo al hosting de la empresa no.

En teoríael hosting corre linux




function upload()
{

echo "
<form method=post action=upload.php enctype=multipart/form-data>
Imagen: <input type=file name=imagen size=40><br>
Descripcion: <textarea name=descripcion cols=60 rows=5></textarea><br>
<p><input type=submit name=submit value=Subir>
</form>
";

}

    if (!$_POST)
    {
         upload();   
    }
    else
    {
$link=mysql_connect("xxxxxxxxx","xxxxxx","xxxxxxxx");
mysql_select_db("xxxxxxxxxxx");
$imagen=$_POST['imagen'];
$descripcion=$_POST['descripcion'];
$imagen = addslashes(fread(fopen($imagen, "r"), filesize($_POST['imagen'])));
mysql_query( "INSERT INTO galeria (imagen, descripcion) VALUES ('$imagen','$descripcion')" );



    }



Ahora bien, el error que tira es el siguiente:

Warning:  fread(): supplied argument is not a valid stream resource in /www/docs/newdisk/www/docs/xxxxxxxxxxxxxxxxx/public_html/galeria/upload.php on line 28

Probé con "rb" en lugar de "r" y tampoco funcoina, me esta quemando la cabeza esto  :jaja: :jaja: .


Agradeceria la ayuda :P :P



PD> Ya se que no es recomendable guardar imagenes en la DB, pero al programar una galeria totalmente automatizada no queda otra
Título: Re: Insertando imagen en Mysql con PHP
Publicado por: Camello_AR en Febrero 28, 2009, 10:43:16
Podes guardar las imágenes aparte y los nombres en la DB
Título: Re: Insertando imagen en Mysql con PHP
Publicado por: Predicador en Febrero 28, 2009, 16:32:55
Hola,
creo que localmente te anda ya que php recibe el path hacia la imagen, y fread puede leer localmente sin problemas.
ya remotamente no deberias poder subir una imagen (ya que esta esta en tu disco) y si estuviese en una URL deberias tener configurado para que fopen funcione en url remotas (algo no muy recomendado).
La solucion de como hacer para subir un archivo a tu server fue publicada hace muicho en dos posts:
http://www.argentop2p.net/index.php?topic=32437.0
y
http://www.argentop2p.net/index.php?topic=6489.0
Baii
Título: Re: Insertando imagen en Mysql con PHP
Publicado por: demono en Marzo 01, 2009, 23:54:51
Suponia que podia ser algo asi jeje
Entonces, segun leí en el código del script que citás, vos recomendás subir (Ya sea via FTP o whathever) el archivo de imagenes y por otra parte subir la URL (O ruta relativa) de la imagen a la DB?
Voy a probar a ver que sale basandome en ese script y en uno de subida de archivos via FTP que armé hace algunos meses, cuando lo termine lo posteo aca asi los demás pueden verlo.
Título: Re: Insertando imagen en Mysql con PHP
Publicado por: Camello_AR en Marzo 02, 2009, 00:18:43
En realidad desde el mismo PHP podes manejar los archivos adjuntos que se mandan vía formularios (el famoso botoncito Browsw/Examinar).

Despues busco unos códigos en el pendrive (que tengo todo el PHP) y te paso un ejemplo
Título: Re: Insertando imagen en Mysql con PHP
Publicado por: demono en Marzo 02, 2009, 00:51:58
Finalmente no encontré el script de subida de archivos via FTP que habia hecho, pero armé uno en base a un ejemplo que encontré en la web.
Por si a alguno le interesa...

Archivo ftpfunc.php
<?
# FUNCIONES FTP

# CONSTANTES
# Cambie estos datos por los de su Servidor FTP
define("SERVER","SERVER"); //IP o Nombre del Servidor
define("PORT",21); //Puerto
define("USER","USUARIOFTP"); //Nombre de Usuario
define("PASSWORD","PWDFTP"); //Contraseña de acceso
define("PASV",true); //Activa modo pasivo

# FUNCIONES

function ConectarFTP(){
//Permite conectarse al Servidor FTP
$id_ftp=ftp_connect(SERVER,PORT); //Obtiene un manejador del Servidor FTP
ftp_login($id_ftp,USER,PASSWORD); //Se loguea al Servidor FTP
ftp_pasv($id_ftp,MODO); //Establece el modo de conexión
return $id_ftp; //Devuelve el manejador a la función
}

function SubirArchivo($archivo_local,$archivo_remoto){
//Sube archivo de la maquina Cliente al Servidor (Comando PUT)
$id_ftp=ConectarFTP(); //Obtiene un manejador y se conecta al Servidor FTP
ftp_put($id_ftp,$archivo_remoto,$archivo_local,FTP_BINARY);
//Sube un archivo al Servidor FTP en modo Binario
ftp_quit($id_ftp); //Cierra la conexion FTP
}

function ObtenerRuta(){
//Obriene ruta del directorio del Servidor FTP (Comando PWD)
$id_ftp=ConectarFTP(); //Obtiene un manejador y se conecta al Servidor FTP
$Directorio=ftp_pwd($id_ftp); //Devuelve ruta actual p.e. "/home/willy"
ftp_quit($id_ftp); //Cierra la conexion FTP
return $Directorio; //Devuelve la ruta a la función
}
?>



Archivo upload.php
<?
include('ftpfunc.php');

function upload()
{

echo "<form method='post' name='form_ftp' id='form_ftp' enctype='multipart/form-data'>
Elegir archivo:
<input name=archivo type=file id=archivo />[br /]Descripcion[br /]
<textarea name=descripcion cols=60 rows=10></textarea>[br /]
<input name=Submit type='submit' value='Subir Imagen' />
</form>";

}

    if (!$_POST)
    {
         upload();   
    }
    else
    {
$link=mysql_connect("xxxxxxxxx","xxxxxxxxx","xxxxxxxxxxxx");
mysql_select_db("xxxxxx");
$descripcion=$_POST['descripcion'];

if(!empty($HTTP_POST_FILES["archivo"])){
$file = $HTTP_POST_FILES["archivo"]["tmp_name"];
$base_archivo = basename($HTTP_POST_FILES["archivo"]["name"]);
$id_ftp=ConectarFTP();
$upload = ftp_put($id_ftp, $base_archivo, $file, FTP_BINARY);

$imagen = $HTTP_POST_FILES["archivo"]["name"];

$descripcion=$_POST['descripcion'];
$descripcion = str_replace ( "
", "[br /]", $descripcion );

mysql_query( "INSERT INTO galeria (imagen, descripcion) VALUES ('$imagen','$descripcion')" );


if (!$upload) {
$status = "Error al guardar: " . $base_archivo;
} else {
$status = "Exito al gaurdar: " . $base_archivo;
}
echo "La imagen fue insertada exitósamente!";
unset($HTTP_POST_FILES["archivo"]);
ftp_quit($id_ftp);
}


    }


?>




Aclaración: El script no maneja carpetas, lo que hice es usarlo con un usuario FTP que tiene permisos para la carpeta a la que se suben las imagenes aunque esto se puede modificar, claro.
Título: Re: Insertando imagen en Mysql con PHP
Publicado por: Predicador en Marzo 02, 2009, 05:16:13
Uh!
Nadie hablo de usar FTP desde PHP, es mas, me parece una solucion un tanto mas complicada de lo que deberia ser siendo el caso que con PHP podes hacer uploads de archivos sin problemas y facilmente.
Quizas no estan muy claros los dos posts que cite o quizas no los leiste muy en profundidad; de todos modos te recomiendo que (releas los dos posts y) leas sobre subida de archivos en PHP, el articulo esta aca: http://no2.php.net/manual/en/features.file-upload.php
Baii y exitos.