Foros del Web » Programando para Internet » PHP »

Funciones Ftp

Estas en el tema de Funciones Ftp en el foro de PHP en Foros del Web. Hola necesito usar funciones ftp en php, he leido que tengo que activar la libreria php_ftp.dll de mi php.ini pero no aparece, no esta. Que ...
  #1 (permalink)  
Antiguo 30/12/2005, 04:52
3ws
 
Fecha de Ingreso: diciembre-2005
Mensajes: 9
Antigüedad: 18 años, 2 meses
Puntos: 0
Funciones Ftp

Hola necesito usar funciones ftp en php, he leido que tengo que activar la libreria php_ftp.dll de mi php.ini pero no aparece, no esta.

Que debo hacer? mi versión de php es la 4.3.10

muchas gracias
  #2 (permalink)  
Antiguo 30/12/2005, 05:14
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 6 meses
Puntos: 19
No sé si tienes que activar alguna libreria. De todas formas aquí te paso una función que hice. Suerte.

Código PHP:
    // funcion que envia un fichero a un FTP
    
        
function file2FTP($file$fileName$ftp_server)
        {
        
// establecemos conexion
            
            
if( ($idConexion ftp_connect$ftp_server )) == false )
            {
                
$resultado FTP_ERROR_CONNECT;
            }
            
// inicio de sesion
            
else if( ftp_login$idConexionFTP_USERFTP_PASSWORD) == false )
                {
                    
$resultado FTP_ERROR_LOGIN;
                }
                
// subimos el fichero
                
else if( ftp_put$idConexion$fileName$fileFTP_BINARY) == false )
                    {
                        
$resultado FTP_ERROR_PUT_FILE;
                    }
                    
// cerramos la conexion
                    
else if( ftp_close$idConexion ) == false )
                        {
                            
$resultado FTP_ERROR_CLOSE;
                        }
                        else
                        {
                            
$resultado FTP_SEND_OK;
                        }
        
            return 
$resultado;
        } 
  #3 (permalink)  
Antiguo 30/12/2005, 06:39
3ws
 
Fecha de Ingreso: diciembre-2005
Mensajes: 9
Antigüedad: 18 años, 2 meses
Puntos: 0
Muchas gracias jerkan por la función, esta muy bien.

El problema es q me da este error

[function.ftp-put] failed to open stream: No such file or directory y creo q es por eso de la libreria. Si alguien sabe algo por favor.

muchas gracias
  #4 (permalink)  
Antiguo 30/12/2005, 07:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
No, el error no es por no tener instalado dicha extensión de PHP . .en tal caso te diría algo tipo "función tal no existe ..."

Indica el código que has probado concretamente y que datos usastes para referenciarte a tu archivo ..

Un saludo,
  #5 (permalink)  
Antiguo 30/12/2005, 07:22
3ws
 
Fecha de Ingreso: diciembre-2005
Mensajes: 9
Antigüedad: 18 años, 2 meses
Puntos: 0
Este es código que tengo.

Código PHP:
<?php //echo "<?xml version="1.0" encoding="iso-8859-1"?".">"; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>::..Funciones FTP..::</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>

<body>
<p align="center"><font size="5" face="Verdana, Tahoma, Arial"><strong><em>
Funciones FTP
</em></strong></font></p>
<p><font face="Verdana, Tahoma, Arial">

<?
include("inc/ftpfunc.php"); //Incluye el archivo de funciones
if(!empty($_POST["archivo"])){ //Comprueba si la variable "archivo" se ha definido
$b=chr(92);
$archivostr_replace($b.$b,'/',$archivo);
echo 
$archivo." Esto es la ruta de archivo<br>";
$archbasename($archivo);
echo 
$arch." Esto es el nombre del archivo";
SubirArchivo($arch,$archivo);
//basename obtiene el nombre de archivo sin la ruta
//unset($_POST["archivo"]); //Destruye la variable "archivo"
}
?>
<strong><font color="#000000" size="3">Subir Archivo</font></strong></font></p>
<hr />

<!--Formulario para elejir el archivo a subir -->
<form action="" method="post" name="form_ftp" id="form_ftp" enctype="multipart/form-data">
<p><font size="2" face="Verdana, Tahoma, Arial"> Elegir archivo :
    <input name="archivo" type="file" id="archivo" />
<input name="Submit" type="submit" value="Subir Archivo" />
</font><font size="2" face="Verdana, Tahoma, Arial"> </font> </p>
</form>

<hr />
<p><font face="Verdana, Tahoma, Arial"><strong><font color="#000000" size="3">
Lista de Archivos
</font></strong></font></p>
<table width="69%" border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="48%"><div align="center"><font size="2" face="Verdana, Tahoma, Arial"><strong>Nombre</strong></font></div></td>
<td width="22%"><div align="center"><font size="2" face="Verdana, Tahoma, Arial"><strong>Tama&ntilde;o</strong></font></div></td>
<td width="30%"><div align="center"><font size="2" face="Verdana, Tahoma, Arial"><strong>Fec.
Modificaci&oacute;n</strong></font></div></td>
</tr>
<?
$id_ftp
=ConectarFTP(); //Obtiene un manejador y se conecta al Servidor FTP
$ruta=ObtenerRuta(); //Obtiene la ruta actual en el Servidor FTP
echo "<b>El directorio actual es: </b> ".$ruta;
$lista=ftp_nlist($id_ftp,$ruta); //Devuelve un array con los nombres de ficheros
$lista=array_reverse($lista); //Invierte orden del array (ordena array)
while ($item=array_pop($lista)) //Se leen todos los ficheros y directorios del directorio
{
$tamano=number_format(((ftp_size($id_ftp,$item))/1024),2)." Kb";
//Obtiene tamaño de archivo y lo pasa a KB
if($tamano=="-0.00 Kb"// Si es -0.00 Kb se refiere a un directorio
{
$item="<i>".$item."</i>";
$tamano="&nbsp;";
$fecha="&nbsp;";
}else{
$fecha=date("d/m/y h:i:s"ftp_mdtm($id_ftp,$item));
//Filemtime obtiene la fecha de modificacion del fichero; y date le da el formato de salida
}
?>

<tr>
<td><font size="2" face="Verdana, Tahoma, Arial"><? echo $item ?></font></td>
<td align="right"><font size="2" face="Verdana, Tahoma, Arial"><? echo $tamano ?></font></td>
<td align="right"><font size="2" face="Verdana, Tahoma, Arial"><? echo $fecha ?></font></td>
</tr>
<? ?>
</table>
</body>
</html>
//Este es la página que busca el archivo. y luego tengo esta que he metido las funciones.

Código PHP:
<?
# FUNCIONES FTP

# CONSTANTES
# Cambie estos datos por los de su Servidor FTP
define("SERVER","ftp.una.com"); //IP o Nombre del Servidor
define("PORT",21); //Puerto
define("USER","una.com"); //Nombre de Usuario
define("PASSWORD","000000"); //Contraseña de acceso
define("PASV",true); //Activa modo pasivo

# FUNCIONES

function ConectarFTP(){
//Permite conectarse al Servidor FTP
$id_ftp=ftp_connect(SERVER,PORT); //Obtiene un manejador del Servidor FTP
ftp_login($id_ftp,USER,PASSWORD); //Se loguea al Servidor FTP
ftp_pasv($id_ftp,PASV); //Establece el modo de conexión
return $id_ftp//Devuelve el manejador a la función
}

function 
SubirArchivo($archivo_local,$archivo_remoto){
//Sube archivo de la maquina Cliente al Servidor (Comando PUT)
$id_ftp=ConectarFTP(); //Obtiene un manejador y se conecta al Servidor FTP
ftp_put($id_ftp,$archivo_remoto,$archivo_local,FTP_BINARY);


//Sube un archivo al Servidor FTP en modo Binario
ftp_quit($id_ftp); //Cierra la conexion FTP
}

function 
ObtenerRuta(){
//Obriene ruta del directorio del Servidor FTP (Comando PWD)
$id_ftp=ConectarFTP(); //Obtiene un manejador y se conecta al Servidor FTP
$Directorio=ftp_pwd($id_ftp); //Devuelve ruta actual p.e. "/home/willy"
ftp_quit($id_ftp); //Cierra la conexion FTP
$Directorio=$Directorio.'/html/ensingular/prueba';
return 
$Directorio//Devuelve la ruta a la función
}
?>

Muchas gracias por todo , y a tod@s.

Última edición por Cluster; 30/12/2005 a las 07:29
  #6 (permalink)  
Antiguo 30/12/2005, 07:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Por favor .. usen el botón "PHP" para que el código quede coloreado (ahora lo haré yo . .pero para la próxima .. usenlo.).

Un saludo,
  #7 (permalink)  
Antiguo 30/12/2005, 07:29
3ws
 
Fecha de Ingreso: diciembre-2005
Mensajes: 9
Antigüedad: 18 años, 2 meses
Puntos: 0
Lo siento, soy nueva y novata en esto de los foros.
Pero la próxima vez lo haré.

Un saludo.
  #8 (permalink)  
Antiguo 30/12/2005, 07:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Nos faltaría lo que ya te pedí:

No sólo el código que usas sino también los datos de prueba que estás usando .. El código podría funcionar bien . .pero a lo mejor estás usandolo "mal" o es originado bajo cierta circustancia que dá los datos que usas de pruebas (el archivio de donde lo seleccionas .. etc).

Un saludo,
  #9 (permalink)  
Antiguo 30/12/2005, 07:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Con el código "coloreado" se ven algunos detalles a simple vista:

if(!empty($_POST["archivo"])){

El archivo en sí no sube por "$_POST" sino por $_FILES .. ese es un gran detalle.

Es decir, .. el archivo lo subes por HTTP en un principio y lo "mueves" hacia su destino definitivo (por qué PHP todo archivo que sube lo hace hacia un directorio temporal y de ahí lo mueves tu a donde gustes en tu sitio) en tu caso lo haces por FTP .. lo cual podría evitarse si los archivos realmente quedan en el mismo servidor que corres tus scripts PHP.

El uso de FTP solventa algunos problemas a nivel de "permisos" si corres PHP bajo "safe mode" aunque subas los archivos al mismo servidor que corre PHP. FTP lo deberías usar en ese caso o cuando los archivos definitivamente no van a quedar en el mismo servidor que ejecuta PHP.

Piensatelo . .por qué hay formas mas sencillas de subir un archivo al servidor via HTTP sólo con funciones básicas para "mover" el archivo:

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

Si quieres seguir usando FTP .. revisa este mensaje del cual salió un código que puedas usar:

http://www.forosdelweb.com/f18/imposible-subir-archivos-358291/

Un saludo,
  #10 (permalink)  
Antiguo 30/12/2005, 09:31
3ws
 
Fecha de Ingreso: diciembre-2005
Mensajes: 9
Antigüedad: 18 años, 2 meses
Puntos: 0
Muchas gracias, lo revisaré todo. y ya te cuento.

Feliz Año nuevo.
  #11 (permalink)  
Antiguo 03/01/2006, 04:05
3ws
 
Fecha de Ingreso: diciembre-2005
Mensajes: 9
Antigüedad: 18 años, 2 meses
Puntos: 0
subir a ftp

He cambiado el $_POST por $_FILES y tb he probado con $HTTP_POST_FILES por si es problema de la versión y con el código de los dos links que me dijiste, no se que hacer, pq sigue sin funcionar.

El primer código que utilicé estaba en
http://www.desarrolloweb.com/articul...2.php?manual=6

Por favor necesito ayuda.

Gracias.
  #12 (permalink)  
Antiguo 03/01/2006, 10:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Tienes que ir evaluando que sucede concretamente ...

Mira que valores tienes en $_FILES al subir tu archivo, por ahí podrás ver si el archivo subió o no a tu servidor ..

Mira si ves realmente los errores de PHP.

No te guies por ese ejemplo de desarrolloweb.com .. realmente no sé como funciona .. sólo me explico que funcione en "local" donde el archivo está en el mismo servidor que el cliente que ejeucta tu script. (por qué usa "POST" para indicar un nombre de archivo con ruta y lo toma de ahí mismo).

En las FAQ's de este foro y en el manual oficial de PHP donde te dejé el link tienes ejemplos para subir archivos.

Ya te hice mi comentario al respecto. Si los archivos van a quedar en el mismo servidor que los subes .. NO uses FTP (en principio).

Un saludo,
  #13 (permalink)  
Antiguo 16/01/2006, 04:48
3ws
 
Fecha de Ingreso: diciembre-2005
Mensajes: 9
Antigüedad: 18 años, 2 meses
Puntos: 0
Por fin consegui subir las imagenes a FTP

Este es el código php que he utilizado para subir las fotos.
Es un poco cutrecillo pero a mi me ha servido. El unico problema son los permisos que da en la ftp a las fotos, que son 600 y creo que deberian ser 664.
Estoy buscando la forma de cambiarlos.
Muchas gracias por la ayuda

Código PHP:
<?$id=$_REQUEST['id'];
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}

$editFormAction $_SERVER['PHP_SELF'];
if (isset(
$_SERVER['QUERY_STRING'])) {
  
$editFormAction .= "?" htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset(
$_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
  
$updateSQL sprintf("UPDATE eventos SET foto_g=%s,foto_p=%s WHERE id='$id'",
                        
GetSQLValueString($_FILES['foto_g']['name'], "text"),
                        
GetSQLValueString($_FILES['foto']['name'], "text"));

  
mysql_select_db($database_uno$uno);
  
$Result1 mysql_query($updateSQL$uno) or die(mysql_error());

    if ( isset (
$_POST['enviar'])){
        if (!empty (
$_FILES['foto']['tmp_name'])){
            
move_uploaded_file ($_FILES['foto']['tmp_name'],
            
"carpeta"$_FILES['foto']['name']);
        }
        if (!empty (
$_FILES['foto_g']['tmp_name'])){
            
move_uploaded_file ($_FILES['foto_g']['tmp_name'],
            
"carpeta"$_FILES['foto_g']['name']);
        }
    }
          if (isset(
$_SERVER['QUERY_STRING'])) {
            
$updateGoTo .= (strpos($updateGoTo'?')) ? "&" "?";
            
$updateGoTo .= $_SERVER['QUERY_STRING'];
          }
          
header(sprintf("Location: %s"$updateGoTo));
    }
}

mysql_select_db($database_ensingular$ensingular);
$query_sql "SELECT * FROM eventos";
$sql mysql_query($query_sql$ensingular) or die(mysql_error());
$row_sql mysql_fetch_assoc($sql);
$totalRows_sql mysql_num_rows($sql);
?>

    
<?php
mysql_free_result
($sql);
?>
  #14 (permalink)  
Antiguo 16/01/2006, 04:50
3ws
 
Fecha de Ingreso: diciembre-2005
Mensajes: 9
Antigüedad: 18 años, 2 meses
Puntos: 0
Sonrisa este es el html que hace falta

Yo lo puse justo antes del mysql_free_result.

Código HTML:
 <html>
	<head>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
	<title>Documento sin t&iacute;tulo</title>
	</head>
	
	<body>
	
	 <table width="46%" cellpadding="0" cellspacing="0">
	   <form action="<?php echo $editFormAction; ?>" method="POST" enctype="multipart/form-data" name="form1">
	  <tr>
	    <td colspan="3" align="left" class="txtgris">foto pequeña</td>
		<td width="75%">
				 <input name="foto" type="file" id="foto">
		</td>
		</tr>
		<tr>
		<td  colspan="3" align="left" class="txtgris">foto grande</td>
		<td><input name="foto_g" type="file" id="foto_g"> 
		</td>
		</tr>
		<tr>
		<td colspan="5" height="2" >
		</td>
		</tr>
		<tr>
		<td colspan="4">
			<input name="enviar" type="submit" id="enviar" value="Enviar">
 			 <input type="hidden" name="MM_insert" value="form1">
			
		</td>
		</tr>
		<input type="hidden" name="MM_update" value="form1">
	   </form>
	</table>
	</body>
	</html> 
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 08:53.