Foros del Web » Programando para Internet » PHP »

error al subir archivo

Estas en el tema de error al subir archivo en el foro de PHP en Foros del Web. estoy intentando subir archivos al servidor, pero me aparece el siguiente error: Warning: copy(ManejandoXML.pdf): failed to open stream: No such file or directory por que ...
  #1 (permalink)  
Antiguo 28/04/2004, 10:59
 
Fecha de Ingreso: marzo-2004
Ubicación: Extremadura
Mensajes: 206
Antigüedad: 13 años, 8 meses
Puntos: 0
error al subir archivo

estoy intentando subir archivos al servidor, pero me aparece el siguiente error:

Warning: copy(ManejandoXML.pdf): failed to open stream: No such file or directory

por que puede ser?

el codigo que tengo es el siguiente:

$dir = "cursos/".$_GET['id'];
mkdir($dir,0777);
$dir .= "/";
copy($_FILES['archivoCurso']['name'], $dir);



gracias
  #2 (permalink)  
Antiguo 28/04/2004, 12:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Lee este mensaje .. trata los mismos problemas que estás teniendo (por mál uso de la función en concreto ..)

http://www.forosdelweb.com/showthrea...hreadid=195196

Te hago un breve resumen:
* PHP cuando sube los archivos por HTTP .. los deja en un directorio temporal. Ahí tienen un nombre y ese es el que "copias" .. Su nombre está en $_FILES['nombre_archivo']['tmp_name'].

* PHP no asume en sus funciones (copy() .. etc) el nombre del archivo en destino .. así que si requieres un nombre puedes usar el que tenía que lo tienes en: $_FILES['nombre_archivo']['name']

* En rutas de servidores .. incicar un $dir="\" .. asumes que es el raiz del servidor -entero-: Debes usar rutas absolutas completas a ser posible o "./" (donde estas ..) Pero como creas por ahí un subdirectorio .. si quieres hacerlo así tendrías que meterte en dicho directorio con: chdir() .. pero lo ideal es que tomes la ruta completa absoulta (la puedes obtener con $_SERVER['DOCUMENT_ROOT']) y de ahí componer tu ruta absoluta de tu servidor.

* Por seguridad y compatibilidad entre configuraciones de PHP .. usa move_uploaded_file() en lugar de copy().

Igualmente lee el mensaje y toma nota de los links del manual oficial de PHP sobre "Upload" .

Un saludo,

PD: .. donde leistes como usar el tema de "Upload" de archivos? (te lo comento por qué son várias las personas que llegan con los mismos problemas ... tal vez sea algún tutorial por ahí mal hecho, en tal caso habría que llamar la atención al autor si corresponde).
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 29/04/2004, 02:19
 
Fecha de Ingreso: marzo-2004
Ubicación: Extremadura
Mensajes: 206
Antigüedad: 13 años, 8 meses
Puntos: 0
lo he leido en varios articulos en distintas paginas, ademas de en el manual oficial de php... pero no lo entiendo bien.
cuando intento hacer lo que me parece haber entendido, no me va.

voy a intentar como me dices y ya te cuento.

muchas gracias, maestro.
  #4 (permalink)  
Antiguo 29/04/2004, 04:53
 
Fecha de Ingreso: marzo-2004
Ubicación: Extremadura
Mensajes: 206
Antigüedad: 13 años, 8 meses
Puntos: 0
Código PHP:
$dir $_SERVER['DOCUMENT_ROOT']."imagenes/usuarios/".$_FILES['nuevaImagen']['name'];
        
    if ( !
move_uploaded_file($_FILES['nuevaImagem']['tmp_name'],$dir) )
          echo 
"ERROR al subir archivo"


siempre sale ERROR! :
  #5 (permalink)  
Antiguo 29/04/2004, 05:02
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
Hola,

En el manual http://www.php.net/manual/en/features.file-upload.php tienes una seccion que explica los posibles mensajes de error.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 29/04/2004, 08:31
 
Fecha de Ingreso: marzo-2004
Ubicación: Extremadura
Mensajes: 206
Antigüedad: 13 años, 8 meses
Puntos: 0
nada de nada de nada de nada.... ya no se que hacer! esto sigue sin ir...
alguna otra sugerencia? o lo doy por finalizado?

gracias.
  #7 (permalink)  
Antiguo 29/04/2004, 08:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Sería bueno que pusieras el código COMPLETO que usas (el formulario y el script completo de proceso donde haces tu move_uploaded_file() ..

Si hay mensaje de error de PHP .. ponlo aquí "textualmente" salga.

Usa los {} preferentemente:

Código PHP:
if (  !move_uploaded_file($_FILES['nuevaImagem']['tmp_name'],$dir) ){
          echo 
"ERROR al subir archivo";

Suponemos que :
Código PHP:
$dir $_SERVER['DOCUMENT_ROOT']."/imagenes/usuarios/ 
ese directorio existe y tiene permisos de escritura?...

(te faltó un / .. si haces un echo $_SERVER['DOCUMENT_ROOT'] . .fijate si incluye el último / o no .. (creo que no lo hace) ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 29/04/2004, 08:55
 
Fecha de Ingreso: marzo-2004
Ubicación: Extremadura
Mensajes: 206
Antigüedad: 13 años, 8 meses
Puntos: 0
el formulario es el siguiente:

Código PHP:
<form action="confirma.php" method="post" enctype="multipart/form-data">
     <
input name="nuevaImagen" type="file" size="40">    
     <
input name="aceptaImagen" type="image" src="imagenes/botonAceptar.jpg" width="43" height="14" border="0">
</
form
y en confirma.php, hago lo siguiente:

Código PHP:
$dir $_SERVER['DOCUMENT_ROOT']."imagenes/usuarios/";
chmod($dir,0777);
if (!
move_uploaded_file($_FILES['nuevaImagem']['name'],$dir))
{
   echo 
"ERROR al subir archivo";


y no hago nada mas. siempre me de ERROR al subir archivo.
  #9 (permalink)  
Antiguo 29/04/2004, 09:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En el directorio que le otorgas permisos con chmod() .. úsa el / despues de $_SERVER['DOCUMENT_ROOT'] (pero, insisto . .confirmalo haciendo un simple echo a tu $dir si es necesaio o no .. ahora no recuerdo si lo entrega esa variable ..)

Código PHP:
$dir $_SERVER['DOCUMENT_ROOT']."/imagenes/usuarios/"

Al mover el archivo .. debes indicar el NOMBRE y ruta que va a tener el archivo ... (lo hacias en el ejemplo anterior y también te lo comenté en mi primera respuesta).

Código PHP:
if  (!move_uploaded_file($_FILES['nuevaImagem']['name'],$dir.$_FILES['nuevaImagen']['name']))
{
   echo 
"ERROR al subir archivo";

Si no ves erroes .. tal vez sea por qué tienes el nivel de errores a mostrar demasiado bajo o incluso "apagado" ..

Usa al principio de tu script:
error_reporting(E_ALL);

para intentar detectar algún tipo de error posible.
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 29/04/2004, 09:35
 
Fecha de Ingreso: marzo-2004
Ubicación: Extremadura
Mensajes: 206
Antigüedad: 13 años, 8 meses
Puntos: 0
no, ya le hice:

Código PHP:
echo $_SERVER['DOCUMENT_ROOT']; 
y no hace falta usar / despues.
  #11 (permalink)  
Antiguo 29/04/2004, 09:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Y .. usastes:
error_reporting(E_ALL) para ver algún posible error de PHP?

Un saludo,

PD: ¿donde estás haciendo tus pruebas: tu PC? que sistema operativo .. ? .. un servicio de hosting? gratuito .. de pago? ..)
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 29/04/2004, 09:45
 
Fecha de Ingreso: marzo-2004
Ubicación: Extremadura
Mensajes: 206
Antigüedad: 13 años, 8 meses
Puntos: 0
le he puesto lo que me has dicho al comienzo del script:

error_reporting(E_ALL);

pero lo que me aparecen son otros errores en la pagina que no tienen relacion con el formulario de subida de archivos.


Notice: Undefined index: aceptaUsuario_x in C:\SERVIDOR\teleformacion\confirma.php on line 32

Notice: Undefined index: aceptaClave_x in C:\SERVIDOR\teleformacion\confirma.php on line 48
ERROR al subir archivo



al script confirma.php, se llega desde distintas paginas, una que acepta un Usuario (aceptaUsuario_x), que acepta Clave (aceptaClave_x), y la que sube el archivo... que no va.


Las pruebas las estoy en mi PC, con win2000, y el servidor apache
  #13 (permalink)  
Antiguo 29/04/2004, 10:30
 
Fecha de Ingreso: marzo-2004
Ubicación: Extremadura
Mensajes: 206
Antigüedad: 13 años, 8 meses
Puntos: 0
nuevos mensajes de error...

he hecho algunas modificaciones en el codigo:

Código PHP:
$dir $_SERVER['DOCUMENT_ROOT']."imagenes/usuarios/";
chmod($dir,0777);
if (
move_uploaded_file($_FILES['nuevaImagen']['tmp_name'], $dir.$_FILES['archivo_usuario']['name']))
{
    echo 
"El archivo fue subido con éxito.";

else
{
    echo 
"Error al intentar subir el archivo.";

y me salen nuevos mensajes de error (a ver si os dicen algo):

Warning: move_uploaded_file(C:/SERVIDOR/teleformacion/imagenes/usuarios/): failed to open stream: Permission denied in C:\SERVIDOR\teleformacion\confModifDatPers.php on line 124
Warning: move_uploaded_file(): Unable to move 'C:\WINNT\php9C.tmp' to 'C:/SERVIDOR/teleformacion/imagenes/usuarios/' in C:\SERVIDOR\teleformacion\confModifDatPers.php on line 124
Error al intentar subir el archivo.
  #14 (permalink)  
Antiguo 29/04/2004, 11:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Leistes el mensaje que te puse en mi primera respuesta .. vistes y leistes el mensaje que hice rerferencia?

Por favor .. leelo .. y nos comentas.

Fijate en los comentarios sobre los permisos de directorios y sobre php.ini: tmp_upload_dir


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 29/04/2004 a las 11:19
  #15 (permalink)  
Antiguo 30/04/2004, 05:02
 
Fecha de Ingreso: marzo-2004
Ubicación: Extremadura
Mensajes: 206
Antigüedad: 13 años, 8 meses
Puntos: 0
ya puedo asegurar... que esto funciona

pues bien Cluster, por fin funcionó... muchas gracias.

A continuación pongo el código final, para el que le pueda valer si tiene el mismo problema que yo:

formulario donde se incluye el archivo a subir al servidor:
Código PHP:
<form action="confirma.php" method="post" enctype="multipart/form-data">
     <
input name="nuevaImagen" type="file" id="nuevaImagen" size="40">
     <
input name="aceptaImagen" type="image" src="imagenes/botonAceptar.jpg" alt="Acepta nueva Imagen" width="43" height="14" border="0">
</
form
confirma.php, que verifica la subida del archivo al servidor:
Código PHP:
if ( ($_POST['aceptaImagen_x'] > 0) && ($_POST['aceptaImagen_y'] > 0) )
{
     
$dir $_SERVER['DOCUMENT_ROOT']."imagenes/usuarios/";
     
chmod($dir,0777);
     
$dir .= $_FILES['nuevaImagen']['name'];

     if ( 
move_uploaded_file($_FILES['nuevaImagen']['tmp_name'], $dir) )
     {
          echo 
"El archivo fue subido con éxito. Está en: ".$dir.$_FILES['nuevaImagen']['name'];
     }
     else
     {
          echo 
"Error al intentar subir el archivo.";
     }

pues ahi queda eso!
Saludos.
  #16 (permalink)  
Antiguo 30/04/2004, 08:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mmm

Será necesario que cada vez que suben un archivo a ese directorio (tu $dir) le des permisos (chmod()) nuevamente ?

Con una vez sobra .. es decir .. si esa aplicación la vas a poner en algún otro servidor .. cuando lo subas por FTP mismo o con algún script tuyo de "instalación" de tu aplicación .. usas el chmod() para fijar el permiso que requieres ... (así un proceso menos que hacer)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #17 (permalink)  
Antiguo 30/04/2004, 08:35
 
Fecha de Ingreso: marzo-2004
Ubicación: Extremadura
Mensajes: 206
Antigüedad: 13 años, 8 meses
Puntos: 0
De hecho Cluster, no había pensado en eso...

Los directorios donde se suben esos archivos, se crean de forma dinámica, con la creación de cada usuario.
Al crear un directorio, ya le estoy dando los permisos, luego al subir los archivos no tengo que hacer el chmod con cada uno...

se crea el directorio:
Código PHP:
$dir $_SERVER['DOCUMENT_ROOT']."imagenes/usuario/".$_SESSION['idUsr']."/";
mkdir($dir0777); 
se suben los archivos sin necesidad de hacer cada vez chmod:
Código PHP:
$dir $_SERVER['DOCUMENT_ROOT'].."imagenes/usuario/".$_SESSION['idUsr']."/";
$dir .= $_FILES['nuevaImagen']['name'];

if ( 
move_uploaded_file($_FILES['nuevaImagen']['tmp_name'], $dir) )
{
     echo 
"El archivo fue subido con éxito. Está en: ".$dir.$_FILES['nuevaImagen']['name'];
}
else
{
     echo 
"Error al intentar subir el archivo.";

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 23:19.