Foros del Web » Programando para Internet » PHP »

UPLOAD... consulta POR FAVOR!!!!

Estas en el tema de UPLOAD... consulta POR FAVOR!!!! en el foro de PHP en Foros del Web. Bueno, la cosa es así, estoy intentado subir un archivo por medio del upload con este código: if (is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'])) { copy($HTTP_POST_FILES['userfile'] ['tmp_name'], "/catalogo/prueba"); } else ...
  #1 (permalink)  
Antiguo 27/04/2004, 08:55
 
Fecha de Ingreso: abril-2004
Mensajes: 260
Antigüedad: 13 años, 7 meses
Puntos: 1
UPLOAD... consulta POR FAVOR!!!!

Bueno, la cosa es así, estoy intentado subir un archivo por medio del upload con este código:

if (is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'])) {
copy($HTTP_POST_FILES['userfile'] ['tmp_name'], "/catalogo/prueba");
} else {
echo "Possible file upload attack. Filename: " . $HTTP_POST_FILES['userfile']['name'];
}

El tema es que me aparece el siguiente error cuando corro el script:

Warning: copy(): SAFE MODE Restriction in effect. The script whose uid/gid is 4519/503 is not allowed to access / owned by uid/gid 0/0 in /home/users/uks22202/html/zenimages.co.uk/abm/upload.php on line 14

Warning: copy(/catalogo/prueba): failed to open stream: No such file or directory in /home/users/uks22202/html/zenimages.co.uk/abm/upload.php on line 14


El primer error habla del SAFE MODE, estuve leyendo algo en el manual, pero mi pregunta es si puedo desabilitar el SAFE MODE, o como corno hago para superar ese error.
Por otro lado también me tira error de directorio y aseguro que el directorio existe.... por que ocurre esto.

Sería de mucha utilidad que me den una mano con esto.
Muchísimas gracias... saludos
__________________
:serio: :adios:
  #2 (permalink)  
Antiguo 27/04/2004, 09:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Usa move_uploaded_file() en lugar de copy()

Podrías usar también en lugar de $HTTP_POST_FILES usar $_FILES (si usas PHP 4.1.0 en adelante) . .es más seguro.

El "safe mode" lo puedes controlar con la función safe_mode del php.ini (si es que tienes acceso a el) .. También puedes configurar otras directivas (en modo safe mode a ON) para permitir a PHP moverse por el /tmp (o directorio donde PHP sube sus archivos de forma temporal y que define: upload_tmp_dir de tu php.ini) por ejemplo en open_base_dir (añadiendo esa ruta ahí) .. o en otras afines al safe_mode_?¿?¿ que hay.

(No tienes acceso al PHP.ini si usas un servicio de hosting).

Por otro lado .. tanto con la función move_uploaded_file() .. como en copy() . .HAY que indicar una ruta absoluta y el nombre del archivo que quedará una vez que lo suba . .no puedes "asumir" que la función le va a dar el mismo nombre que el archivo que subió ..

Código PHP:
copy($HTTP_POST_FILES['userfile'] ['tmp_name'], "catalogo/prueba/".$HTTP_POST_FILES['userfile']['name']); 
Y .. OJO con el /catalogo ... ese / entiende un S.O. Linux (*NIX) que te refieres al "RAIZ" (root) de ese sistema de archivos de ese servidor .. NO se refiere a lo que tu ves como "raiz" al entrar por FTP a tu sitio .. Por eso debes indicar una ruta absoluta (con $_SERVER['DOCUMENT_ROOT'] o en tu phpinfo() podrías ver cual es .. También lo ves en ese mensaje de error que te ha dado dicha función:

/home/users/uks22202/html/zenimages.co.uk/

Por ende .. lo mejor sería:

Código PHP:
move_uploaded_file($HTTP_POST_FILES['userfile'] ['tmp_name'], "/home/users/uks22202/html/zenimages.co.uk/
catalogo/prueba/"
.$HTTP_POST_FILES['userfile']['name']); 
(y recuerda que si usas PHP 4.1.0 o mayor . usa $_FILES en lugar del $HTTP_POST_FILES ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 27/04/2004, 10:00
 
Fecha de Ingreso: abril-2004
Mensajes: 260
Antigüedad: 13 años, 7 meses
Puntos: 1
genio total!!!!

Sos un capo!!!!, muchísimas gracias.
Ahora, modifiqué todo segun me comentaste, pero me seguía tirando el siguiente error:

Código PHP:
Warningmove_uploaded_file(/home/users/uks22202/html/zenimages.co.uk/catalogo/prueba/AA039221.jpg): failed to open streamPermission denied in /home/users/uks22202/html/zenimages.co.uk/abm/upload.php on line 14

Warning
move_uploaded_file(): Unable to move '/tmp/phpI0J7Kl' to '/home/users/uks22202/html/zenimages.co.uk/catalogo/prueba/AA039221.jpg' in /home/users/uks22202/html/zenimages.co.uk/abm/upload.php on line 14 
y el código quedó así:
Código PHP:
    if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
        
move_uploaded_file($_FILES['userfile']['tmp_name'], "/home/users/uks22202/html/zenimages.co.uk/catalogo/prueba/".$_FILES['userfile']['name']);
    } else {
       echo 
"Possible file upload attack. Filename: " $HTTP_POST_FILES['userfile']['name'];
    } 
Entonces se me ocurrió que el problema podía estar en la especificación de la ruta de origen en el move_uploaded_file, y modifique sus parametros asia esto:
Código PHP:
    if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
        
move_uploaded_file($_FILES['userfile']['tmp_name']."/".$_FILES['userfile']['name'], "/home/users/uks22202/html/zenimages.co.uk/catalogo/prueba/".$_FILES['userfile']['name']);
    } else {
       echo 
"Possible file upload attack. Filename: " $HTTP_POST_FILES['userfile']['name'];
    } 
Es decir que le agruegué el nombre del file al final del directorio temporal.
Ahora no me tira ningun error, y pareciera que funciona si no fuese que cuando ingreso al directorio para ver si está el archivo... a que no sabes que, NO ESTÁ!!!

Que corno pasa?.

Saludos,
__________________
:serio: :adios:
  #4 (permalink)  
Antiguo 27/04/2004, 10:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No se trata de ir "probando" .. todo lo que te he comentado lo tienes en la documentación oficial de PHP al respecto:

http://www.php.net/manual/en/features.file-upload.php

Si ves "variables" puedes ver su contenido para observar que es lo que llega por ellas .. Por ejemplo:

print_r($_FILES);

Pero, el problema parece estar en los permisos de escritura de tu directorio donde dejas o vas a dejar tus archivos .. Ese directorio tiene que tener permisos (CHMOD por tu cliente de FTP que uses) 0666 o similar.

(no uses tu último código .. no tiene sentido si ves que es lo que devuelve la variable $_FILES['userfile']['tmp_name'] ...)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 27/04/2004, 10:25
 
Fecha de Ingreso: abril-2004
Mensajes: 260
Antigüedad: 13 años, 7 meses
Puntos: 1
Muchas gracias una vez más.
Entonces debería hablar con el servidor para que seten como me conviene ("Ese directorio tiene que tener permisos (CHMOD por tu cliente de FTP que uses) 0666 o similar."), o puedo hacerlo yo desde mi programita de ftp o algo?, tenes idea?.
Disculpá que te joda de esta manera, es que bueno, ya sabes...

Muchas gracias por todo.
__________________
:serio: :adios:
  #6 (permalink)  
Antiguo 27/04/2004, 10:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues si, puedes hacerlo tu mismo desde tu cliente FTP .. (cualquiera que se precie tiene la opción "CHMOD" para que ajustes ahí los permisos de escritura necesarios a todo usuario o en octal: 0666 o similar ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 27/04/2004, 11:09
 
Fecha de Ingreso: abril-2004
Mensajes: 260
Antigüedad: 13 años, 7 meses
Puntos: 1
GRACIAS!!!!!

MUCHISIMAS GRACIAS!!!!
Ya se solucionó. Mil gracias en serio.
Muchísimas gracias Cluster, sos un capo.

__________________
:serio: :adios:
  #8 (permalink)  
Antiguo 27/04/2004, 11:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
D Nada ..

Ahora sólo tendras que ajustar bien el permiso del archivo .. (0666) por si ese no corresponde. Fijate bien que puedas accederlo sin problemas por FTP y por PHP (si hay problemas .. sólo es cosa de ajustar ese permiso).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 27/04/2004, 11:27
 
Fecha de Ingreso: abril-2004
Mensajes: 260
Antigüedad: 13 años, 7 meses
Puntos: 1
Si, me surgió ese inconveniente pero lo solucioné de esa manera.
Muchas gracias por el aviso.

GRACIAS!!!
__________________
:serio: :adios:
  #10 (permalink)  
Antiguo 27/04/2004, 11:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
(para que otros compañeros les ayude ... Indica que permiso usastes para solventar el problema .. Así ya "redondeamos" el tema)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 27/04/2004, 11:46
 
Fecha de Ingreso: abril-2004
Mensajes: 260
Antigüedad: 13 años, 7 meses
Puntos: 1
Lo que hice fue modificar el permiso del cliente de ftp para que tenga los siguientes permisos activados:

OWNER: write, read, execute
GROUP: write, read, execute
PUBLIC: write, read, execute

sin el execute activo no me funcionaba.
Espero que sirva... cualquier cosa escriban.
Saludos y una vez más MUCHAS GRACIAS!!!
__________________
:serio: :adios:
  #12 (permalink)  
Antiguo 27/04/2004, 12:13
 
Fecha de Ingreso: abril-2004
Mensajes: 260
Antigüedad: 13 años, 7 meses
Puntos: 1
una mas....

che, me olvidé de preguntar algo.
A ver si lo saben....
Lo que tengo que hacer es que en el submit de un formulario se cree un directorio que tenga como nombre el valor de un campo del formulario.
Lo que necesito saber es como se llama (si es que hay) la funcion que me permite crear directorios.
Si lo saben, por favor pasen el dato.
Yo lo estoy buscando en el manual pero todavía no lo encontré... ni bien lo encuentre y si nadie lo ha dicho todavía lo postearé.

Saludos y muchas gracias.
__________________
:serio: :adios:
  #13 (permalink)  
Antiguo 27/04/2004, 12:26
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
mkdir("nombre_directorio");
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #14 (permalink)  
Antiguo 27/04/2004, 12:32
 
Fecha de Ingreso: abril-2004
Mensajes: 260
Antigüedad: 13 años, 7 meses
Puntos: 1
MIL GRACIAS!!!!!
__________________
:serio: :adios:
  #15 (permalink)  
Antiguo 27/04/2004, 13:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
al mkdir() no estaría de más usar CHMOD() para fijar el permiso adecuado (sino tendras los problemas de siempre con permisos .. sobre todo si lo accedes desde otra cosa que no sea PHP .. por ejemplo por FTP).

En la función CHMOD() de PHP el dato que hay que usar es el valor "Octal" del permiso que uses (0666 o 0777 o lo que corresponda). (usalo despues de crear el directorio).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #16 (permalink)  
Antiguo 27/04/2004, 14:51
 
Fecha de Ingreso: abril-2004
Mensajes: 260
Antigüedad: 13 años, 7 meses
Puntos: 1
correcto

Si, es cierto. Lo ví e el manual y es así. Si no luego aparece el mismo problema.

Muchas gracias gente
__________________
:serio: :adios:
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:29.