Foros del Web » Programando para Internet » PHP »

Script de upload

Estas en el tema de Script de upload en el foro de PHP en Foros del Web. Hola, estoy haciendo un script para subir imagenes, he creado la siguiente línea de código pero al mirar por ftp no encuentro el archivo, en ...
  #1 (permalink)  
Antiguo 10/12/2004, 04:16
Avatar de Fociños  
Fecha de Ingreso: marzo-2004
Ubicación: A Coruña
Mensajes: 587
Antigüedad: 20 años
Puntos: 0
Script de upload

Hola, estoy haciendo un script para subir imagenes, he creado la siguiente línea de código pero al mirar por ftp no encuentro el archivo, en mi pc funciona, así que supongo que es la dirección a la q la envio, Alguna sugerencia?

Código PHP:
if (copy ($imagen,"/httpdocs/imagenes/anuncios/" $imagen_name)) {echo "Imagen copiada";} 
Muchas gracias.
  #2 (permalink)  
Antiguo 10/12/2004, 07:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Deberías usar la función move_uploaded_file() en lugar de copy() .. a su vez .. en dicha función .. el parámetro que indica la ruta de la imagen origen (que es donde PHP la sube temporalmente al servidor para que luego la muevas a su destino definitivo con el nombre que ha de quedar en destino ...) es:

if (copy ($imagen_tmp,"/httpdocs/imagenes/anuncios/" . $imagen_name))

ó mejor:

Código PHP:
if (move_uploaded_file($_FILES['imagen']['tmp'],"imagenes/anuncios/".$_FILES['imagen']['name'])){ 
La ruta de destiono ha de ser absuluta referente a tu servidor .. Esto puede no ser correcto:
/httpdocs/imagenes/anuncios

ese "httpdocs" tal vez sea desde el "raiz" de tu sito (lo que ves al entrar por FTP) pero no es el tu "ruta" completa desde el raiz de ese servidor seguramente .. Lo más simple es como te muestro en el ejemplo ..

A su vez .. ese directorio de destino tendrá que tener los permisos de escritura correspondientes (en tun FTP cliente .. usa CHMOD y defina un permiso tipo 0666 o incluso 0777 según corresponda)

Un saludo,
  #3 (permalink)  
Antiguo 10/12/2004, 07:32
Avatar de Fociños  
Fecha de Ingreso: marzo-2004
Ubicación: A Coruña
Mensajes: 587
Antigüedad: 20 años
Puntos: 0
sigue sin funcionarme, una pregunta, al subirlo desde el formulario no debería aparecerme en la carpeta 'tmp'?
Es que ya no me aparece en ese carpeta.
  #4 (permalink)  
Antiguo 10/12/2004, 07:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Exactamente debería aparecer con un nombre "aletatorio" que PHP le otorga a tu archivo en el directorio que tengas configurado para:

upload_tmp_dir de tu php.ini (lo puedes ver en tu phpinfo() )

aunque diga "tmp" no ha de ser el "tmp" directorio que puedas tener bajo tu sitio creado en tu servidor.. Los servicios de hosting "compartidos" .. ese "tmp" es común /tmp (se refiere al raiz de ese servidor y sistema de archivos).

El "upload" en sí puede estar deshabilitado también en vários puntos .. por eso te comento que debes usar la función move_upload_file() para evitar problemas como los que plantea copy() si usas por ejemplo "safe_mode" en PHP (que es altamente restrictivo).


Un saludo,

PD: usas un servicio de hosting de pago o gratuito donde no te funciona? .. tienes el control sobre ese servidor? ...
  #5 (permalink)  
Antiguo 10/12/2004, 08:41
Avatar de Fociños  
Fecha de Ingreso: marzo-2004
Ubicación: A Coruña
Mensajes: 587
Antigüedad: 20 años
Puntos: 0
Le eché un vistazo al php.ini y tiene dos lineas repetidas
upload_tmp_dir =
upload_tmp_dir = /temp;
es normal? puede ser por eso?

Cluster, te debo mil cañas!
  #6 (permalink)  
Antiguo 10/12/2004, 08:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Debería tener sólo una .. (sin un ; delante). Lo que no comentas es que Sistema Operativo usas en ese servidor (el que dices que has visto ese php.ini).

En "windows" no existe un /tmp .. sino que algo tipo c:\nose .. El caso es que ese directorio sea como sea tiene que estar creado y con permisos de ejecución. Pese que PHP dice que si no tienen ninguno definido usará el "temporal del sistema" (un /tmp en linux normalmente o un c:/windows/system o por ahí en un windows).

Un saludo,
  #7 (permalink)  
Antiguo 10/12/2004, 12:18
Avatar de Fociños  
Fecha de Ingreso: marzo-2004
Ubicación: A Coruña
Mensajes: 587
Antigüedad: 20 años
Puntos: 0
El sistema es Linux bajo Plesk, debería borrar esa linea y reiniciar?
  #8 (permalink)  
Antiguo 10/12/2004, 13:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ya te lo comenté antes .. borra esa línea repetida (por seguridad) .. quedate con la de /tmp y asegurate que tengas creado ese directorio, dale permisos de escritura, guarda tu php.ini y reinicia tu servicio HTTP al menos ...

Esto no asegura que todo "funcione" .. pero ya es un paso menos que ir revisando. Por cierto .. que tamaño de archivo pretendes subir? .. Te lo comento por qué PHP (en su php.ini) como incluso Apache tienen sus limitaciones .. así que prueba con archivos de unos pocos Kbytes y si todo funciona bien .. ahí empiezas a subir o a revisar las limitaciones de PHP y Apache.

Un saludo,
  #9 (permalink)  
Antiguo 10/12/2004, 14:22
Avatar de Fociños  
Fecha de Ingreso: marzo-2004
Ubicación: A Coruña
Mensajes: 587
Antigüedad: 20 años
Puntos: 0
He probado con otro código, y me dio el siguiente:

Warning: copy(): open_basedir restriction in effect. File(/imagenes/anuncios/PHTO0006.JPG) is not within the allowed path(s): (/home/httpd/vhosts/xpalabras.com/httpdocs:/tmp)
  #10 (permalink)  
Antiguo 10/12/2004, 14:50
Avatar de Fociños  
Fecha de Ingreso: marzo-2004
Ubicación: A Coruña
Mensajes: 587
Antigüedad: 20 años
Puntos: 0
Tema soluciona, mil gracias Cluster

Lo solucioné con
Código PHP:
(copy ($imagen,"/home/httpd/vhosts/xpalabras.com/httpdocs/imagenes/anuncios/" $imagen_name)) 
  #11 (permalink)  
Antiguo 13/12/2004, 01:27
Avatar de Fociños  
Fecha de Ingreso: marzo-2004
Ubicación: A Coruña
Mensajes: 587
Antigüedad: 20 años
Puntos: 0
Con el script anterior el nombre de la imagen que sube es el que da el usuario del sistema, a mí lo que me gustaría es utilizar la terminación del archivo que sube pero como nombre un mysql_insert_id, cómo puedo hacer?
  #12 (permalink)  
Antiguo 13/12/2004, 07:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El segundo parámetro de copy() (insisto que deberías usar move_uploaded_file() en lugar de copy()) define el nombre que va a quedar en destino y la ruta si la indicas (si no lo indicas caerá el archivo en el mismo directorio que tienes tu script PHP que lo ejecuta).

Sabiendo eso puedes hacer cosas como:

Código PHP:
$id=mysql_insert_id();
$nombre_destino=$id.".nose";

move_uploaded_file(.....,$nombre_destino
Un saludo,
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 12:14.