Menú Principal

Crear WebFTP

Iniciado por Traca80, 9 Noviembre 2007, 22:07 PM

0 Miembros y 1 Visitante están viendo este tema.

Traca80

Hola a todos!

Hace poco he creado con mi portatil "viejo" un pequeño servidor con Ubuntu 7.10 y Xampp.

Ahora lo que quiero hacer es una WebFTP.

He mirado tutoriales y he encontrado este codigo:


<?php
// Primero creamos un ID de conexión a nuestro servidor
$cid ftp_connect("www.cg.edu.mx");
// Luego creamos un login al mismo con nuestro usuario y contraseña
$resultado ftp_login($cid"usuario","noteladigo");
// Comprobamos que se creo el Id de conexión y se pudo hacer el login
if ((!$cid) || (!$resultado)) {
echo "Fallo en la conexión"; die;
} else {
echo "Conectado.";
}
// Cambiamos a modo pasivo, esto es importante porque, de esta manera le decimos al 
//servidor que seremos nosotros quienes comenzaremos la transmisión de datos.
ftp_pasv ($cidtrue) ;
echo "<br> Cambio a modo pasivo<br />";
// Nos cambiamos al directorio, donde queremos subir los archivos, si se van a subir a la raíz
// esta por demás decir que este paso no es necesario. En mi caso uso un directorio llamado boca
ftp_chdir($cid"boca");
echo "Cambiado al directorio necesario";   
// Tomamos el nombre del archivo a transmitir, pero en lugar de usar $_POST, usamos $_FILES que le indica a PHP
// Que estamos transmitiendo un archivo, esto es en realidad un matriz, el segundo argumento de la matriz, indica
// el nombre del archivo
$local $_FILES["archivo"]["name"];
// Este es el nombre temporal del archivo mientras dura la transmisión
$remoto $_FILES["archivo"]["tmp_name"];
// El tamaño del archivo
$tama $_FILES["archivo"]["size"];
echo "<br />$local<br />";
echo "$remoto<br />";
echo "subiendo el archivo...<br />";
// Juntamos la ruta del servidor con el nombre real del archivo
$ruta "/srv/www/htdocs/boca/" $local;
// Verificamos si no hemos excedido el tamaño del archivo
if (!$tama<=$_POST["MAX_FILE_SIZE"]){
echo "Excede el tamaño del archivo...<br />";
} else {
// Verificamos si ya se subio el archivo temporal
if (is_uploaded_file($remoto)){
// copiamos el archivo temporal, del directorio de temporales de nuestro servidor a la ruta que creamos
copy($remoto$ruta);
}
// Sino se pudo subir el temporal
else {
echo "no se pudo subir el archivo " $local;
}
}
echo "Ruta: " $ruta;
//cerramos la conexión FTP
ftp_close($cid);
?>


No he conseguido hacerlo funcionar, alguien sabria decirme si esta bien escrito en PHP?

Que tengo que hacer? Crear un archivo "index.php" con este codigo exacto (cambiando eso si los parametros de IP, Usuario y Pass)

Alguien me puede ayudar?

Muchissimas gracias!!

alone-in-the-chat

Cual es el error que te lanza??
se un poco mas especifico


Saludos
Because maybe
You're gonna be the one that saves me
And after all
You're my wonderwall
d[n_n]b

Traca80

Hola,

He instalado en mi portatil Ubuntu 7.10 y Xampp, y he creado y ubi cado el archivo index.php en la carpeta donde tiene que estar en xampp (/opt/lampp/hdocs) pero cuando intento acceder con el explorador al archivo no me aparece nada.

Por una parte o puede ser que esta mal publicado o que el archivo no funciona correctamente.

Mi duda es si el codigo que he pegado es correcto y si es correcto, que tengo que hacer para crear el archivo "index.php" copio exactamente el codigo (cambiando la direccion del ftp, user y pass) y nada mas? tengo que poner <head> o <body> o algo similar?

alone-in-the-chat

si esta escrito en php ,
deberia lanzarte un mensaje dime que te sale al colocar la ruta??
lo de copiar y pegar igual si no debes colocar nada mas aunque ese archivo debes modificarlo aun pero primero lo primero , osea tu servidor funciona??

Código (php) [Seleccionar]

<?php
phpinfo
();
?>



copia ese codigo en un archivo info.php
y intenta acceder  a el como

http://localhost/info.php



Saludos
Because maybe
You're gonna be the one that saves me
And after all
You're my wonderwall
d[n_n]b

Traca80

He creado el info.php y lo he puesto en la raiz de xampp (/opt/lampp/hdocs)

voy al firefox y he puesto exactamente la url (http://localhost/info.php)

Y esto es lo que me sale:

CitarWarning: Unknown: failed to open stream: Permission denied in Unknown on line 0

Fatal error: Unknown: Failed opening required '/opt/lampp/htdocs/info.php' (include_path='.:/opt/lampp/lib/php') in Unknown on line 0

Alguna idea?

Muchas gracias!!

alone-in-the-chat

Dale permisos de lectura al grupo Others


:D


Saludos
Because maybe
You're gonna be the one that saves me
And after all
You're my wonderwall
d[n_n]b

Traca80

Permiso de lectura a la carpeta /hdocs o solo al archivo info.php (o en su defecto index.php)??

alone-in-the-chat

X) al archivo aunke si io fuese tu y trabajo en localhost tb le daria a toda la carpeta
*-)

Saludos
Because maybe
You're gonna be the one that saves me
And after all
You're my wonderwall
d[n_n]b

Traca80

Muchas gracias Alone in the Chat!!

Ahora cuando clico en info.php sale toda una pagina, asi que todo esta correcto  :D

Ahora he creado un archivo (ftp2.php) con este codigo:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<?php
// Primero creamos un ID de conexión a nuestro servidor
$cid ftp_connect("midynds.com");
// Luego creamos un login al mismo con nuestro usuario y contraseña
$resultado ftp_login($cid"miuser","mypass");
// Comprobamos que se creo el Id de conexión y se pudo hacer el login
if ((!$cid) || (!$resultado)) {
echo "Fallo en la conexión"; die;
} else {
echo "Conectado.";
}
// Cambiamos a modo pasivo, esto es importante porque, de esta manera le decimos al 
//servidor que seremos nosotros quienes comenzaremos la transmisión de datos.
ftp_pasv ($cidtrue) ;
echo "<br> Cambio a modo pasivo<br />";
// Nos cambiamos al directorio, donde queremos subir los archivos, si se van a subir a la raíz
// esta por demás decir que este paso no es necesario. En mi caso uso un directorio llamado boca
ftp_chdir($cid"boca");
echo "Cambiado al directorio necesario";   
// Tomamos el nombre del archivo a transmitir, pero en lugar de usar $_POST, usamos $_FILES que le indica a PHP
// Que estamos transmitiendo un archivo, esto es en realidad un matriz, el segundo argumento de la matriz, indica
// el nombre del archivo
$local $_FILES["archivo"]["name"];
// Este es el nombre temporal del archivo mientras dura la transmisión
$remoto $_FILES["archivo"]["tmp_name"];
// El tamaño del archivo
$tama $_FILES["archivo"]["size"];
echo "<br />$local<br />";
echo "$remoto<br />";
echo "subiendo el archivo...<br />";
// Juntamos la ruta del servidor con el nombre real del archivo
$ruta "/srv/www/htdocs/boca/" $local;
// Verificamos si no hemos excedido el tamaño del archivo
if (!$tama<=$_POST["MAX_FILE_SIZE"]){
echo "Excede el tamaño del archivo...<br />";
} else {
// Verificamos si ya se subio el archivo temporal
if (is_uploaded_file($remoto)){
// copiamos el archivo temporal, del directorio de temporales de nuestro servidor a la ruta que creamos
copy($remoto$ruta);
}
// Sino se pudo subir el temporal
else {
echo "no se pudo subir el archivo " $local;
}
}
echo "Ruta: " $ruta;
//cerramos la conexión FTP
ftp_close($cid);
?>

</head>

<body>
<form name="enviador" method="post" action="recibe.php" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="1000">
Archivo: <input type="file" name="archivo">
<input type="submit">
</body>
</html>


Y lo he colgado, pero el firefox me devuelve este error:

Conectado.
Cambio a modo pasivo

Warning: ftp_chdir() [function.ftp-chdir]: boca: No such file or directory in /opt/lampp/htdocs/inc/ftp2.php on line 23
Cambiado al directorio necesario


subiendo el archivo...
no se pudo subir el archivo Ruta: /srv/www/htdocs/boca/


Traca80

#9
Hola,

Finalmente he optado por adaptar otro codigo, que este SI que funciona y es mucho mas facil.

Lo pongo aqui por si alguien le interesa este tema:

Crear 2 archivos:

index.php

Citar<?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($HTTP_POST_FILES["archivo"])){
$file = $HTTP_POST_FILES["archivo"]["tmp_name"];
$base_archivo = basename($HTTP_POST_FILES["archivo"]["name"]);
$id_ftp=ConectarFTP();
$upload = ftp_put($id_ftp, $base_archivo, $file, FTP_BINARY);
if (!$upload) {
$status = "Error al guardar: " . $base_archivo;
} else {
$status = "Exito al gaurdar: " . $base_archivo;
}
unset($HTTP_POST_FILES["archivo"]);
ftp_quit($id_ftp);
}
/*if(!empty($HTTP_POST_FILES["archivo"])){ //Comprueba si la variable "archivo" se ha definido
SubirArchivo($HTTP_POST_FILES["archivo"],basename($HTTP_POST_FILES["archivo"]));
//basename obtiene el nombre de archivo sin la ruta
unset($HTTP_POST_FILES["archivo"]); //Destruye la variable "archivo"
}*/
?>
<strong><font color="#000000" size="3">Subir Archivo</font></strong></font></p>
<hr />

<!--Formulario para elegir 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>

Crear en una subcarpeta llamada /inc crear el archivo ftpfun.php

Citar<?
# FUNCIONES FTP

# CONSTANTES
# Cambie estos datos por los de su Servidor FTP
define("SERVER","localhost"); //IP o Nombre del Servidor
define("PORT",21); //Puerto
define("USER","jhonyduque"); //Nombre de Usuario
define("PASSWORD","123456"); //Contraseña de acceso
define("MODO",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,MODO); //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
return $Directorio; //Devuelve la ruta a la función
}
?>

Y listo!

Super facil y funcionando!!

Muchas gracias por la ayuda  ;D