Foros del Web » Programando para Internet » PHP »

Comprobar archivos existentes FTP

Estas en el tema de Comprobar archivos existentes FTP en el foro de PHP en Foros del Web. Hola: Estoy intentando comprobar si un archivo existe antes de subirlo al servidor mediante la función ftp_put de php Para ello creo un formulario donde ...
  #1 (permalink)  
Antiguo 30/09/2008, 08:58
Avatar de c4_esp_VR  
Fecha de Ingreso: julio-2008
Mensajes: 24
Antigüedad: 15 años, 10 meses
Puntos: 0
Comprobar archivos existentes FTP

Hola:

Estoy intentando comprobar si un archivo existe antes de subirlo al servidor mediante la función ftp_put de php

Para ello creo un formulario donde el usuario seleccionará el archivo a subir y luego pulsará aceptar.

Código PHP:
<form action="" method="post" enctype="multipart/form-data" name="form_ftp" id="form_ftp">

  <
div align="center">
    </
p>
  <
table width="763" border="0" align="center">
    <
tr>
      <
td width="439" height="37"><div align="right">Archivo
        
<input name="archivo" type="file" id="archivo" />
      </
div></td>
      <
td width="314"><div align="left"><font size="2" face="Verdana, Tahoma, Arial">
          <
input type="submit" name="Submit" value="Upload" />
      </
font></div></td>
    </
tr>
  </
table>
</
form
El formulario se reenvia a la misma url donde verificaremos si el archivo ya existe o no de la siguiente manera usando una librería que nos ayuda a la realización de la conexión al servidor


Código PHP:
 <?php
include('includes/ftpfunc.php'); //Incluye el archivo de funciones

    
if(!empty($HTTP_POST_FILES["archivo"]))
    {        
        
$id_ftp=ConectarFTP();
        
$ruta=ObtenerRuta();
        
$file $HTTP_POST_FILES["archivo"]["tmp_name"];//Es el archivo temporal creado en el hosting
        
$base_archivo basename($HTTP_POST_FILES["archivo"]["name"]);
        
$archivo $HTTP_POST_FILES["archivo"]["name"];
        
$dir $ruta.'/'.$_GET["dir"].'/'.$archivo;

        if(
file_exists('.'.$dir))
        {
?>
            El fichero ya existe, desea sobreescribirlo <a href="FTPExist.php?dir=<?php echo $dir ?>&file=<?php echo $file?>">SI</a> / <a href="claveftp.php?dir=<?php echo $_GET["dir"?>">NO</a>.
        <?php
        
}
        else
        {
            
$upload ftp_put($id_ftp$dir$fileFTP_BINARY);
            if (!
$upload)
            {
                
$status "Error al guardar: " $base_archivo;
                echo 
$status;
            }
            else
            {
                
$status "Éxito al guardar: " $base_archivo;
                echo 
$status;
            }
        }
        
        unset(
$HTTP_POST_FILES["archivo"]);
        
ftp_quit($id_ftp);
    }
    else
    {
        echo 
'ruta donde se subirá el archivo: '.$dir;
    }
Si el fichero no existe entonces se subirá al servidor pero si el fichero existe preguntará si se quiere sobreescribir. Si no se desea sobreescribir volverá a la url principal y si se desea sobreescribir se intentará subirlo desde otra url distinta llamada FileExist.php, a esta url le paso los parámetros que ftp_put requiere, es decir $dir y $file mediante $GET pero no los sube y siempre me da error.

Imagino que hay alguna solución para poder dejar que el usuario pueda o no sobreescribir el archivo, pero llevo horas buscando por internet y pegándome con el código pero no soy capaz.

Si alquien tiene alguna sujerencia, sería de agradecer.

Muchas gracias foreros del web.
  #2 (permalink)  
Antiguo 30/09/2008, 14:21
Avatar de c4_esp_VR  
Fecha de Ingreso: julio-2008
Mensajes: 24
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Comprobar archivos existentes FTP

Alguien tiene alguna idea de porqué puede pasar

Me está volviendo loco el problemita

Un saludete.
  #3 (permalink)  
Antiguo 30/09/2008, 14:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Comprobar archivos existentes FTP

El problema principal bajo el cual no te va a servir lo que planeas hacer, es porque una vez que envias el archivo y si le preguntas al usuario si lo desea reemplazar, se borra el archivo ya que solo existe por la instancia que se ejecuta el script.

Lo mejor que puedes hacer en este caso es antes de enviar realmente el archivo, via AJAX envies el nombre (ojo el nombre, ya que el archivo no lo puedes enviar via AJAX) del archivo a un script, este compruebe si ese nombre ya existe y presentarle la pantalla al usuario, si dice que si, entonces envias el formulario con el archivo completo y reemplazas.

Saludos.
  #4 (permalink)  
Antiguo 01/10/2008, 00:05
Avatar de c4_esp_VR  
Fecha de Ingreso: julio-2008
Mensajes: 24
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Comprobar archivos existentes FTP

Hola GatorV, gracias por la respuesta, al menos ya no me voy a rebanar más el coco, imaginaba que el porqué no salía vendría por lo que comentas pero como no estaba seguro pues seguía y seguía intentándolo.

El problema es que no tengo ni idea de AJAX, pero si me dices un par de líneas de código para ir viendo como se hace y buscarme luego las castañas antes de volver a preguntar, así aprendo un poco de AJAX que siempre he querido.

Muchas gracias por todo GatorV
  #5 (permalink)  
Antiguo 01/10/2008, 04:23
Avatar de c4_esp_VR  
Fecha de Ingreso: julio-2008
Mensajes: 24
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Comprobar archivos existentes FTP

Por el momento he conseguido enviar los datos necesarios via AJAX y método GET a otra url y esta se visualize en mi página "principal" de la siguiente manera.

Código PHP:
<script language="javascript">

function nuevoAjax(){
var xmlhttp=false;
 try {
  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) {
  try {
   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) {
   xmlhttp = false;
  }
 }

if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}



function cargarContenido(){
var t1, t2, contenedor;
contenedor = document.getElementById('contenedor');
t1 = document.getElementById('archivo').value;
t2 = document.getElementById('hiddenField').value;
ajax=nuevoAjax();
ajax.open("GET", "PruebaAJAXFTP.php?t1="+t1+"&t2="+t2,true);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
contenedor.innerHTML = ajax.responseText
}
}
ajax.send(null)
}
</script>

<form onSubmit="cargarContenido(); return false">
        <input name="hiddenField" type="hidden" value="<?php echo $_GET["dir"];?>" id="hiddenField"/>
        <input name="archivo" type="file" id="archivo" />
         <input type="submit" value="Upload" onPress="cargarContenido()" />
</form>

<div id="contenedor">div contenedor</div>
El código de la url PruebaAJAXFTP.php es el siguiente:

Código PHP:
<?
    
include('includes/ftpfunc.php'); //Incluye el archivo de funciones    
    
$id_ftp=ConectarFTP();
    
$ruta=ObtenerRuta();

    
$archivo $_GET["t1"];
    
$dir $ruta.'/'.$_GET["t2"].'/'.$archivo;
    
    if(
file_exists('.'.$dir))
    {
        echo 
'El fichero existe';
    }
    else
    {
    }    
    
ftp_quit($id_ftp);
?>
Donde si el fichero existe saca por pantalla 'El fichero existe'.

Primeramente estoy ilusionado por ver como es esta maravilla que no hace falta que recargue la página de nuevo es una pasada...

Pero ahora como hago para que el usuario seleccione SI o NO y luego suba el archivo via FTP ya que no sé como pasar variables de la url PruebaAJAXFTP a la url principal... estoy echo un lio

Gracias por la ayuda de antemano.
  #6 (permalink)  
Antiguo 01/10/2008, 05:32
Avatar de c4_esp_VR  
Fecha de Ingreso: julio-2008
Mensajes: 24
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Comprobar archivos existentes FTP

Me autorespondo

Crearíamos dos botones en el PruebaAJAXFTP de esta forma.

Código PHP:
if(file_exists('.'.$dir))
    {
        echo 
'El fichero ya existe, desea sobreescribir el fichero';
        echo 
'<p><input type="submit" onClick="confirmar_borrar();" value="Si" class="button"> <input type="submit" onClick="confirmar_no_borrar();" value="No" class="button"></p>';
        
    } 
Las funciones confirmar_borrar() y confirmar_no_borrar() estan definidas en el php principal el cual será el encargado de gestionar que hacemos con ello.

Una maravilla esto del AJAX...me estoy enamorando.

Gracias GatorV por la ayuda, aunque llevo 8 hora pegado en el ordenar hasta que lo he conseguido, pero he echo un curso rápido de AJAX.

Un saludete foreros del web.
  #7 (permalink)  
Antiguo 01/10/2008, 09:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Comprobar archivos existentes FTP

Que bueno que lo pudiste arreglar perfectamente, creo es la mejor forma de implementar para el usuario el sobre-escribir el archivo.

Saludos.
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 20:56.