Foros del Web » Programando para Internet » PHP »

FTP o move_upload_file

Estas en el tema de FTP o move_upload_file en el foro de PHP en Foros del Web. Queridos amigod, esta pregutna me surigio de otro tema que esta leyedo , a rraiz de una respuesta que dio cluster, ahora pregunto en que ...
  #1 (permalink)  
Antiguo 21/04/2004, 19:58
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 14 años, 8 meses
Puntos: 24
FTP o move_upload_file

Queridos amigod, esta pregutna me surigio de otro tema que esta leyedo , a rraiz de una respuesta que dio cluster, ahora pregunto en que casos es mas recomendable usar cada una de las fucniones FTP o move_upload_file
__________________
SEO en Medellin
  #2 (permalink)  
Antiguo 22/04/2004, 07:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Introducción ..

Deciá en ese mensaje mencionado que:

Cita:
Las funciones de FTP te permiten conectarte a un servidor FTP y mover/copiar .. etc .. archivos en ese servidor. OK?

Ahora .. si yo tengo mi archivito a subir al servidor en mi PC (cliente) y deseo subir un archivo al servidor por HTTP (por una página web para que mis usuarios suban fotos/archivos en general sin que tengan que usar un cliente FTP o por qué simplemente a ese archivo le asocio otros datos y debo guardar en mi BD o donde sea ...).

¿ Como aplicas funciones de FTP para subir mi archivo de mi PC (clienet) al servidor ?

Es decir (a lo que quiero llegar) ..
El "Upload" se hará vía PHP por HTTP con las limitaciones de la configuración de PHP (php.ini) al respecto. Una vez que sube el archivo (que queda en ese directorio temporal que se mencionó: donde diga upload_tmp_dir por si ascaso ..) se debe -mover- hacia su destino definitivo. Si es en el mismo servidor, un "move_uploaded_file()" es lo más seguro y rápido. Una conexión por FTP al mismo servidor que ejecuta PHP y que es donde quedarán los archivos tendrá un tiempo más extra de conexión y negociación de la autentificación del usuario FTP que se va a usar además que requiere de un servidor FTP habilitado (cuando podría ser opcional). Ahora, si el archivo se va a mover a otro servidor distinto al que lo subió (el archivo) .. OK, usa FTP sin problemas para moverlo de forma segura a donde corresponda.
A lo cual respondistes:

Cita:
cluster, exelente eseaporte de las funciones fopen, copy etc

pero hay algo que no te entendi... acerca de las funciones FTP...
entiendo que dices que es mas lenta en cuanto a que tiene que negociar la autentificación, pero no entiendo por que dices que es mas recomendable utilizar la fucnion move_upload_file cuando se trata de mover archivos del clinte al servidor...
bueno, pero no pretendo robarle el header a nuestro compañero, sin embargo quedo con la duda, ahora mismo voy abrir un nuevo tema que trate sobre esto, CLUSTER espero tu participación esn este tema.
HASTA PRONTO
--------

Bien, ... Lo que mencionas de:

Cita:
por que dices que es mas recomendable utilizar la fucnion move_upload_file cuando se trata de mover archivos del clinte al servidor...
Ese movimiento de archivos se produce en el servidor . .no entre cliente-servidor .. para ese instante tu archivo ya lo has subido al servidor sea por HTTP (con PHP) o por tu cliente habitual de FTP o administrador de archivos de tu hosting.

El hecho de que sea recomendable usar move_upload_file() en lugar de funciones FTP .. además de lo que ya mencioné (y se me olvidó pero ahora comento) es que .. PHP sube los archivos a un directorio temporal que lo definine la directiva: upload_tmp_dir .. Ese directorio definido suele ser "compartido" para todos los sitios que pueda albergar ese servidor .. Las cuentas del servidor FTP para su acceso suelen tener como directorio de inicio el que se ha asignado en tu servidor virtual .. es decir (ejemplo) en una estructura del sistema de archivos de un servidor tipo:

/
/tmp
/var
-->/www/
------>/sitios/
--------->/tusitio/
--------->/otrositio/
--------->/etcsitios/

Donde "caes" al entrar por FTP a tusitio es justamente a ese directorio .. Pero el "upload_tmp_dir" puede estar definido (y de hecho suele ser así) en el /tmp .. Directorio que queda fuera del alcance de permisos de movimiento de tu cuenta definida en ese servidor FTP de ese servidor en concreto. Por ende .. no vas a poder usar esas funciones (en la mayoría de casos) para hacer ese movimiendo desde /tmp --> hacia /var/www/sitios/tusitio/algun_dir_de_tu_sitio

Las funciones de FTP debes usarlas cuando tengas que mover archivos entre servidores FTP .. pese que .. tu sistio asignado en ese servidor sea lo mismo que puedes moverte por tu cliente FTP dentro de la estructura de directorios de ese servidor. Para eso, tienes las funciones básicas tipo copy() .. fopen() y demás como hacía mención. Y si piensas mover archivos entre servidor X y el Y .. si ambos disponen de servidores FTP instalados y una cuenta de acceso con su directorio "raiz" configurado donde pretendas mover el archivo .. podrás hacer la conexión FTP<->FTP para mover archivos de forma automática.

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 22/04/2004, 11:39
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 14 años, 8 meses
Puntos: 24
sin embargo....

hace ya 5 meses que utilize esta forma para subir archivos (mas explicitamente) imagenes del usuario a mi servidor...
ha funcionado exelente y el codigo que sube la imgen son 4 lineas... por esto me agrado esta forma, pero ahora quiciera saber que posibles errores podrian surgir en el futuro es decir pasara algo

PD: hay una linea del codigo que sube expresamente la imagen señalada al directorio donde uno quiere, es decri, no me tuve que complicar sacando la imagen de los temporales...


cluster habra algún problema con esto???
que piensan???
__________________
SEO en Medellin
  #4 (permalink)  
Antiguo 22/04/2004, 13:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mafima...

Sólo aclarar que el proceso de "subir" la imagen lo haces igual que todo el mundo si lo haces por PHP: por HTTP ..

Lo que cambia es que tu -mueves- el archivo por FTP y lo normal sería con move_uploaded_file() ..

Con esa función sólo es una línea de código (el proceso de mover el archivo).

Por lo demás .. que te funcione ese método o no te funcione en otros servidores depende de ese usuario que uses FTP y de la configuración de este.

No sé donde apunta tu upload_tmp_dir (ver php.ini) ni donde "quedas" cuando entras por FTP con ese usuario en el servidor .. Pero si puedes hacer eso (si es que el directorio temporal queda fuera de tu "raiz" por donde quedas cuando entras por FTP) realmente la configuración de ese servidor es insegura (en teoría podrías copiar cualquier otra cosa .. de ese servidor).

Un saludo,

PD: se podría ver ese código completo?
__________________
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; 22/04/2004 a las 13:34
  #5 (permalink)  
Antiguo 22/04/2004, 13:42
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 14 años, 8 meses
Puntos: 24
claro el codigo es este:

es algo largo, pero es para el cuento de identificar las extensiones de imagenes:

codigo php.
Código PHP:
<?
//////////////////////////////////////////////////
//////Identificamos que tipo de imagen es/////////
/////////////////////////////////////////////////
switch ($archivo_type){
    case 
'image/gif' :$ext="gif";
    break;
    case 
'image/pjpeg' :$ext="jpg";
    break;
    case 
'image/bmp' $ext="bmp";
    break;
    default:echo (
"</h1>lo sentimos el formato del archivo que esta intentando subir, no es un formato estandar de una imagen</h1>");
    
$ext "error";
    break;
    }
//////////////////////////////////////////////////////////////////////////////



/////////////////////////////////////////////////////////////////////////////////
///////Funcion  que sube la imagen al server FTP/////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
function al (){
global 
$ext$archivo;    

///////////////////////////////////////////////////////////////////////////////////
/////////Nos conectamos a la base de datos////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
$base "downloads";
$tabla ="images";
$conexion=mysql_connect("localhost","user","pass");
mysql_select_db($base,$conexion); 




/////////////////////////////////////////////////////////////////////////////////////



//////////////////////////////////////////////////////////////////////////////////
///////////contador para generar nombres aleatorios para las imagenes/////////////
///////////de esta forma evito reemplazar imagenes preexistente///////////////////
//////////////////////////////////////////////////////////////////////////////////
$f1=fopen("sabado.txt","r");
$lee file("sabado.txt");
fclose($f1);
$leer $lee[0] + 1;
$f1=fopen("sabado.txt","w+");
fwrite($f1,$leer);
fclose($f1);
/////////////////////////////////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////////////////////////////////
//////////nos conectamos al servidor FTP////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////

$x=ftp_connect ("ftp.empresa.net",21);
if(
$x !=0){
echo 
"Conexión FTP activada<br>";
}else{
echo 
"No se activo lo conexión FTP";
}

if(
ftp_login($x,"login","password")){
echo 
"El login y la password han sido aceptados <br>";
}else{
echo 
"Error en login o password<br>";
}
///////////////////////////////////////////////////////////////////////////////////////


// Aisganamos nombre aleatorio con su respectiva extension
$name "httpdocs/luis/" $leer "." $ext;
//////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////////////////////////////////////
//////Trasferimos el archivo al server FTP///////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
if(ftp_put($x,$name,$archivo,FTP_BINARY)){
echo 
"Transferencia exitosa<br>";

$name $leer "." $ext;
//agragamos todos los datos al la BD
mysql_query("INSERT $tabla (titulo,usuario,tamaño,descripcion,direccion,) VALUES ('$titulo','$usuario','$archivo_size','$descripcion','$name')",$conexion);
}
ftp_quit($x);
}

if (
$ext != "error" $archivo_size <= $MAX_FILE_SIZE){
al();
}

else {
    echo (
"<h1>o el tamaña de la imagen excede el aximo tamaño que es posible subir: 600000 bytes");
    }
?>
__________________
SEO en Medellin

Última edición por mafima; 22/04/2004 a las 13:44
  #6 (permalink)  
Antiguo 22/04/2004, 13:43
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 14 años, 8 meses
Puntos: 24
y el formulario HTML es asi:

Código:
<HTML>
<BODY>

<FORM ENCTYPE="multipart/form-data" ACTION="new.php" METHOD="post"> 


<INPUT type="hidden" name="MAX_FILE_SIZE" value="600000"> 

<p><b>Seleccione la imagen<b><br> 

<INPUT type="file" name="archivo"></p> <br>

<p><b>nombre de la imagen<b><br> 

<INPUT type="text" name="titulo"></p> 

<INPUT type="text" name="usuario"></p>


<p><INPUT type="submit" name="enviar" value="Publicar"></p>

</FORM>

</BODY>

</HTML>
__________________
SEO en Medellin
  #7 (permalink)  
Antiguo 23/04/2004, 07:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno . pues es lo que te comenté ..

ese $archivo que usas como global en tu código .. es tu archivo que sube por HTTP y gestiona PHP .. Como veras tienes propiedades para ese archivo en $archivo_name .. $archivo_type .. etc.

El acceso a los archivos deberías hacerlo según los arrays superglobales: $_FILES (si usas PHP 4.1.0 en adelante) es más seguro que asumirlo como globales (ten cuidado!!).

Y lo demás .. ya te comenté . Una vez "arriba" tu archivo puedes moverlo por FTP o mejor por move_uploaded_file().

Por lo demás .. ¿"parece"? (no he revisado la documentación) que con:

if(ftp_put($x,$name,$archivo,FTP_BINARY)){

está tomando el archivo tal cual que todavía está en ¿"memoria"? .. así que no lo mueve fisicamente. Por ende supongo que el archivo en sí seguirá rondando en los upload_tmp_dir del servidor perse que ya lo "subiste" por FTP a su destino definitivo.

Por lo menos el "move_uploaded_file()" mueve el archivo (copia en destino y borra en origen).


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 23/04/2004, 17:40
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 14 años, 8 meses
Puntos: 24
Perfecto...

entiendo a que te refieres cluster, y si es asi, creeme que si seria estrcitamente necesario mover el fcihero... esto me deja preocupado, ¡¡Seguire averiguando!!!
__________________
SEO en Medellin
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 01:49.