Foros del Web » Programando para Internet » PHP »

Problema con "move_uploaded_file"

Estas en el tema de Problema con "move_uploaded_file" en el foro de PHP en Foros del Web. Buenas, tengo problemas para subir una imagen al servidor. Tengo un formulario, y un campo es de tipo file y con nombre img. ese formulario ...
  #1 (permalink)  
Antiguo 15/12/2010, 09:17
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 13 años, 4 meses
Puntos: 0
Problema con "move_uploaded_file"

Buenas, tengo problemas para subir una imagen al servidor.

Tengo un formulario, y un campo es de tipo file y con nombre img. ese formulario se lo envio a otro php que deberia subir dicah imagen al servidor y despues guardarlo en la base de datos...
Lo segundo lo hace pero lo primero no.

Se que es esa instruccion, move_uploaded_file, a lo que se le pasa como parametros el archivo y la ruta de destino, pero no se muy bien que falla...
El servidor tiene permisos suficientes y los parametros son validos....
  #2 (permalink)  
Antiguo 15/12/2010, 09:35
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Problema con "move_uploaded_file"

Sería ideal que mostraras el código tanto del formulario como del script que debería subir el archivo. También, como consejo, activar el reporte de errores (error_reporting) para ver si hay algo más que no se ve.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #3 (permalink)  
Antiguo 15/12/2010, 11:40
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con "move_uploaded_file"

ok, ire por partes

en el form
Cita:
<tr>
<th>Imagen</th>
</tr>
<tr>
<td>
<div align="center">
<input class="admin" size="50" name="img" maxsize="60" type="file" value="<?echo $row[img];?>">
</div>
</td>
</tr>
y el php que recive los datos, el $imgmodf es una variable que uso para guardarlo en la bd
Cita:
$nombre_foto = $_FILES['img']['name'];
$tipo_foto = $_FILES['img']['type'];
$dirfotos="/img/";

if ($nombre_foto!= ""){
$uploaderfoto=$dirfotos.basename($nombre_foto);
if (move_uploaded_file($_FILES['img']['tmp_name'], $uploaderfoto)){
echo "La foto ha sido cargada correctamente.";
$imgmodf="$nombre_foto";
}else{
echo "Ocurrió algún error al subir el fichero. No pudo guardarse.";
$imgmodf=$row[img];
}
}else{
$imgmodf=$row[img];
}
  #4 (permalink)  
Antiguo 15/12/2010, 13:06
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Problema con "move_uploaded_file"

Disculpa... leyendo nuevamente el primer mensaje, decías que se subía sin problemas, pero que no se guardaba en la BD. ¿Cómo haces eso? ¿Qué código usas para insertarlo a la BD?
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #5 (permalink)  
Antiguo 16/12/2010, 03:44
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con "move_uploaded_file"

No No, lo que no hace es subirlo, guardarlo lo guarda perfectamente...
Digamos que el resultado es, en la bd se modifica todo ok, pero recivo siempre un "Ocurrió algún error al subir el fichero. No pudo guardarse.", por eso solo copie el codigo de la subida.
  #6 (permalink)  
Antiguo 16/12/2010, 03:57
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Respuesta: Problema con "move_uploaded_file"

No tienes las etiquetas form puestas?
  #7 (permalink)  
Antiguo 16/12/2010, 04:07
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con "move_uploaded_file"

No es el formulario entero, xq es bastante largo, asi que meti solamente el campo...

Cita:
<form action="modif.php?id=<?echo $row[id];?>" method="post" enctype="multipart/form-data" name="alta" id="alta" onsubmit="return compruebaenvio(this);">
  #8 (permalink)  
Antiguo 16/12/2010, 04:33
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Problema con "move_uploaded_file"

Podrías probar a imprimir $_FILES['img']['error'], si devuelve algo, acá tienes una lista de los significados :

http://cl.php.net/manual/es/features...oad.errors.php

No solo basta con que el servidor tenga permisos para subir archivos, es necesario que tanto el archivo como el directorio donde se subirá, tengan permisos de lectura y escritura. Verifica eso.

Saludos.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #9 (permalink)  
Antiguo 16/12/2010, 04:50
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con "move_uploaded_file"

Oki, pruebo lo del error, sobre los permisos, si, el directorio tiene permisos, fue lo primero que mire, xq ya me paso una vez, a eso me queria referir con lo de permisos en el server.

Pruebo lo del $_FILES['img']['error'] y a ver que me sale.

Saludos y gracias
  #10 (permalink)  
Antiguo 16/12/2010, 04:57
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con "move_uploaded_file"

He provado lo que me comentaste de imprimir el campo error y me imprime '0' que al mirar la lista es que no hay error....

Subo la imagen del resultado...



Espero que la imagen se vea correctamente...
  #11 (permalink)  
Antiguo 16/12/2010, 04:59
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con "move_uploaded_file"

Para explicar un poco lo que ocurre, imprime '0' al ejecutar la instruccion
echo $_FILES['img']['error'];

Despues falla la subida del archivo y muestra el mensaje de "Ocurrio algun error.." y por ultimo actualiza correctamente la BD por eso el mensaje de "Datos modificados con exito..."
  #12 (permalink)  
Antiguo 16/12/2010, 08:48
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Problema con "move_uploaded_file"

Código PHP:
Ver original
  1. $nombre_foto = $_FILES['img']['name'];
  2. $tipo_foto = $_FILES['img']['type'];
  3. $dirfotos="/img/";
  4. chmod($dirfotos, 777);
  5.  
  6.  
  7. if ($nombre_foto!= ""){
  8. $uploaderfoto=$dirfotos.basename($nombre_foto);
  9. if (move_uploaded_file($_FILES['img']['tmp_name'], $uploaderfoto)){
  10. echo "La foto ha sido cargada correctamente.";
  11. $imgmodf="$nombre_foto";
  12. }else{
  13. echo "Ocurrió algún error al subir el fichero. No pudo guardarse.";
  14. $imgmodf=$row[img];
  15. }
  16. }else{
  17. $imgmodf=$row[img];
  18. }

Prueba eso, le puse un chmod, para descartar que el directorio no tenga permisos de escritura.

Una consulta, ¿de dónde sale $row[img] (que por cierto debería encerrar img entre comillas? ¿Por qué le pasas como value a input file el valor de $row['img']?

Hay algo que se nos está escapando, y la verdad no sé que es. El código que has posteado no me convence, y no me refiero a que esté mal... sino a que podría aclararnos más si mostraras más código.

No creo que sea necesario hacerle un var_dump a la variable $_FILES, ya que si inserta el nombre en la BD y como error devuelve 0, osea ningún error, quiere decir que por ahí no es.

¿Has verificado que en tu php.ini tengas activado file_uploads (debería estar en On)? Si estás en un servidor ajeno, haz un phpinfo(); para ver la configuración del servidor y ver si permiten la subida de archivos.

La verdad es lo único que se me ocurre... el problema es demasiado superficial...

Prueba a activar el reporte de errores. En tu código PHP, al principio, agrega esta línea

Código PHP:
Ver original
  1. error_reporting(E_ALL | E_STRICT);

Tenemos que descartar todas las opciones disponibles .

Saludos.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #13 (permalink)  
Antiguo 16/12/2010, 09:42
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con "move_uploaded_file"

El $row[] viene de la bd, al se un modificar, para sino se da ningun archivo que se use el que esta almacenado, pero habria que mejorarlo...
Podria deberse a un problema de nombres?
  #14 (permalink)  
Antiguo 16/12/2010, 09:53
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con "move_uploaded_file"

Meti el error_reporting(E_ALL | E_STRICT); y esto es lo que me sale...

  #15 (permalink)  
Antiguo 16/12/2010, 10:01
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Problema con "move_uploaded_file"

A ver... insisto... tenemos que ver más código...

Pon todo el formulario y todo el código que genera la subida y la inserción a la BD del archivo.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #16 (permalink)  
Antiguo 16/12/2010, 10:11
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con "move_uploaded_file"

Ok, alla va....
Por cierto el file_uploas esta en on... :(

te mando el php que lo recive, el texto del formulario es demasiado largo segun el foro
Cita:
<?php
include("../segsesion.php");
?>
<?php

include("../seguridad.php");
include "../php/inc/resize_contacto.php";
//$host = "localhost";
//$usuario = "bancorio_mujer";
//$password = "123456";
//$db = "bancorio_mujer";
error_reporting(E_ALL | E_STRICT);
function convertir($campo)
{
$campo=str_replace ( '·', '&middot;', $campo);
$campo=str_replace ( '¿', '&iquest;', $campo);
$campo=str_replace ( '¡', '&iexcl;', $campo);
$campo=str_replace ( '¨', '&uml;', $campo);
$campo=str_replace ( '´', '&acute;', $campo);
$campo=str_replace ( 'ç', '&ccedil;', $campo);
$campo=str_replace ( 'ª', '&ordf;', $campo);
$campo=str_replace ( 'º', '&ordm;', $campo);
$campo=str_replace ( 'ü', '&uuml;', $campo);
$campo=str_replace ( 'Ü', '&Uuml;', $campo);
$campo=str_replace ( 'á', '&aacute;', $campo);
$campo=str_replace ( 'é', '&eacute;', $campo);
$campo=str_replace ( 'í', '&iacute;', $campo);
$campo=str_replace ( 'ó', '&oacute;', $campo);
$campo=str_replace ( 'ú', '&uacute;', $campo);
$campo=str_replace ( 'Á', '&Aacute;', $campo);
$campo=str_replace ( 'É', '&Eacute;', $campo);
$campo=str_replace ( 'Í', '&Iacute;', $campo);
$campo=str_replace ( 'Ó', '&Oacute;', $campo);
$campo=str_replace ( 'Ú', '&Uacute;', $campo);
$campo=str_replace ( 'ñ', '&ntilde;', $campo);
stripslashes($campo);
return $campo;
}
//leemos si hay foto

$nombre_foto = $_FILES['img']['name'];
$tipo_foto = $_FILES['img']['type'];
$dirfotos="/img/";
chmod($dirfotos, 777);


?>
<HTML>
<HEAD> <TITLE></TITLE>
<link href="../css/estilo.css" rel="stylesheet" type="text/css">
</head>
<BODY BGCOLOR="#ffffff">
<TABLE WIDTH="660" BORDER="0" CELLSPACING="5" CELLPADDING="5">
<tr>
<td>
<a href="http://www.forosdelweb.com/f18/dentro.php"><font size="-2" color="green">MENU</a> ></font>
<a href="http://www.forosdelweb.com/f18/suscriptores.php"><font size="-2" color="green">SUSCRIPTORES</a> ></font>
<a href="./listamod.php"><font size="-2" color="green">MODIFICAR</a> ></font>
<br>&nbsp;
<br>

<?php


if (!($link=mysql_connect($host,$usuario,$password)))

{

echo "Error conectando a la base de datos.";

exit();

}

if (!mysql_select_db($db,$link))

{

echo "Error seleccionando la base de datos.";

exit();

}

// if ($actividades == "1") {
// $valoractividades = "1";
// } else {
// $valoractividades = "0";
// }
// if ($subvenciones == "1") {
// $valorsubvenciones = "1";
// } else {
// $valorsubvenciones = "0";
// }
// if ($biblioteca == "1") {
// $valorbiblioteca = "1";
// } else {
// $valorbiblioteca = "0";
// }
// if ($audiovisuales == "1") {
// $valoraudiovisuales = "1";
// } else {
// $valoraudiovisuales = "0";
// }
// if (!($otrotipo == "")) {
// $tipoempresa = $otrotipo;
// }
if (!($tipoempresa == 1)) {
$otrotipo="";
}
/*
$query=mysql_query("SELECT img FROM suscriptores WHERE id=$id",$link);
$row=mysql_fetch_array($query);
*/
if ($nombre_foto!= ""){
$uploaderfoto=$dirfotos.basename($nombre_foto);
if (move_uploaded_file($_FILES['img']['tmp_name'], $uploaderfoto)){
echo "La foto ha sido cargada correctamente.";
$imgmodf="$nombre_foto";
}else{
echo "Ocurrió algún error al subir el fichero. No pudo guardarse.";
}
}





$nombre=convertir($nombre);
$direccion=convertir($direccion);
$cp=convertir($cp);
$localidad=convertir($localidad);
$provincia=convertir($provincia);
$telefono=convertir($telefono);
$movil=convertir($movil);
$fax=convertir($fax);
$email=convertir($email);
$otras=convertir($otras);
$empresa=convertir($empresa);
$tipoempresa=convertir($tipoempresa);
$sector=convertir($sector);
$cargo=convertir($cargo);
$pagweb=convertir($pagweb);


#guardamos los datos del suscriptor
if(!(mysql_query("UPDATE suscriptores SET tipo='$tipo',nombre='$nombre',img='$imgmodf',fecha nacim='$kdp_fechanacim',direccion='$direccion',cp= '$cp',localidad='$localidad',provincia='$provincia ',email='$email',telefono='$telefono',movil='$movi l',fax='$fax',empresa='$empresa',tipoentidad='$tip oempresa',otrotipo='$otrotipo',sector='$sector',tr abajadores='$trabajadores',cargo='$cargo',web='$pa gweb',otras='$otras',observaciones='$observaciones ' WHERE id=$id",$link))) {
echo "UPDATE suscriptores SET tipo='$tipo',nombre='$nombre',$img,fechanacim='$kd p_fechanacim',direccion='$direccion',cp='$cp',loca lidad='$localidad',provincia='$provincia',email='$ email',telefono='$telefono',movil='$movil',fax='$f ax',empresa='$empresa',tipoentidad='$tipoempresa', otrotipo='$otrotipo',sector='$sector',trabajadores ='$trabajadores',cargo='$cargo',web='$pagweb',otra s='$otras',observaciones='$observaciones' WHERE id=$id";
echo "<font face=verdana size=-2><p>Se ha producido un error al actualizar los datos del suscriptor <b>$nombre </b><br></font>";
}

#borramos los perfiles que tenía antes
mysql_query("delete from suscriptor_perfil where rsp_idsuscriptor = $id",$link);

#ahora guardamos sus perfiles
$perfiles = mysql_query("SELECT * FROM perfiles order by per_orden", $link);
while($row = mysql_fetch_array($perfiles)) {
$nombreperfil = "perfil".$row[per_id];
$checkperfil = $_POST["$nombreperfil"];
if ($checkperfil == $row[per_id]) {
if(!(mysql_query("insert into suscriptor_perfil (rsp_idsuscriptor,rsp_idperfil) values ($id,$row[per_id])",$link))) {
echo "<font face=verdana size=-2><p>Se ha producido un error al actualizar los perfiles del suscriptor <b>$nombre </b><br></font>";
}
}
}

#borramos los intereses que tenía antes
mysql_query("delete from suscriptor_interes where rsi_idsuscriptor = $id",$link);

#ahora guardamos sus intereses
$intereses = mysql_query("SELECT * FROM intereses order by int_orden", $link);
while($row = mysql_fetch_array($intereses)) {
$nombreint = "interes".$row[int_id];
$checkint = $_POST["$nombreint"];
if ($checkint == $row[int_id]) {
if(!(mysql_query("insert into suscriptor_interes (rsi_idsuscriptor,rsi_idinteres) values ($id,$row[int_id])",$link))) {
echo "<font face=verdana size=-2><p>Se ha producido un error al actualizar los intereses del suscriptor <b>$nombre </b><br></font>";
}
}
}

echo "<BR><br><p align=center>Datos modificados con &eacute;xito - ok <br>";

mysql_close($link);

?>
  #17 (permalink)  
Antiguo 16/12/2010, 10:34
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Problema con "move_uploaded_file"

Ufff... no veo nada que pueda estar interrumpiendo la subida... lo que me dice que no es el código.

Para dar por correcto el código que lo sube, hazle un var_dump(); a la variable $_FILES y pega lo que te muestra, para ver que tiene dentro.

Y revisa los permisos tanto del archivo que tratas de subir, como el de la carpeta donde quieres subirlo.

Debo estar ciego, porque realmente no veo nada... seguramente deben ser los permisos... o algo así... quizá la ruta está mal, no lo sé...
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #18 (permalink)  
Antiguo 16/12/2010, 11:56
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con "move_uploaded_file"

A mi lo que me estraña es que en otra aplicacion lo consegui hacer, y de repente en esta no me deja....
  #19 (permalink)  
Antiguo 16/12/2010, 12:02
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con "move_uploaded_file"

bueno, esto es lo que me devuelve el var_dump:

array(5) { ["name"]=> string(27) "n659412512_1502436_8893.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(18) "/usr/tmp/phpO0extV" ["error"]=> int(0) ["size"]=> int(21734) }
  #20 (permalink)  
Antiguo 16/12/2010, 14:00
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Problema con "move_uploaded_file"

A ver... la verdad me quedé sin opciones, no sé que puede ser.

Cambia el código que corresponda, por el siguiente :

Código PHP:
Ver original
  1. // En en el formulario, el input file
  2. <input class="admin" name="img" type="file">
  3.  
  4. // En el PHP
  5. $nombre_foto = $_FILES['img']['name'];
  6. $tipo_foto = $_FILES['img']['type'];
  7. $dirfotos="img/";
  8. chmod($dirfotos, 777);
  9.  
  10. //...
  11.  
  12. if(!empty($nombre_foto)) {
  13.    $uploaderfoto = $dirfotos . basename($nombre_foto);
  14.    if(move_uploaded_file($_FILES['img']['tmp_name'], $uploaderfoto)) {
  15.       echo "La foto ha sido cargada correctamente.";
  16.       $imgmodf = $nombre_foto;
  17.    }
  18. }
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #21 (permalink)  
Antiguo 17/12/2010, 05:45
 
Fecha de Ingreso: diciembre-2010
Mensajes: 26
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Problema con "move_uploaded_file"

Bueno, ya funciona!!!! muchas gracias spider_boy
  #22 (permalink)  
Antiguo 17/12/2010, 09:07
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Problema con "move_uploaded_file"

Ufff... finalmente funcionó . Me alegro que así sea.

Saludos y de nada .
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.

Etiquetas: Ninguno
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 06:15.