Muy bueno y completo, y a prueba de principiantes :) gracias.
Hola, muy bueno el tutorial.
Este error
"Parse error: parse error, unexpected T_DNUMBER, expecting ',' or ';' in /home/" es por el <?php echo "<?xml version="1.0" encoding="iso-8859-1"?".">"; ?>
se produce porque falta la barra invertida antes de las comillas, ya que se trata de la función echo.
Se soluciona dejando la linea asi:
<?php echo "<?xml version="1.0" encoding="iso-8859-1"?".">"; ?>
Saludos.
| Por: Daniel Izquierdo | | 22/5/06
|
Pues a mi me va todo bien, el unico error que le he encontrado es que la variable MODO no esta definida, esta mal puesta.
Teneis que cambiar:
define("PASV",true); //Activa modo pasivo
po esto otro:
define("MODO",true); //Activa modo pasivo
Asi me va todo perfecto.
Despues de muchas pruebas y devanarme la cabeza he encontrado lo siguiente: Primero que al formulario le falta enctype="multipart/form-data". Con eso las cosas empiezan a ir mejor. Pero el asunto seguia sin funcionar (ni en hosting Windows ni Linux). La idea de Pedro Castro me llamo la atencion y he probado con el plan $local = $_FILES["archivo"] en lugar de $local = $_POST["archivo"]. He buscado por ahi otras cosas y he adaptado un poco el tema. Por tanto: He quitado la funcion subir archivo y antes del formulario he puesto: include('ftpfunc.php'); //Incluye el archivo de funciones
if(!empty($_FILES["archivo"])){ //Comprueba si la variable "archivo" se ha definido
ftp_chdir($id_ftp, "public");
$local = $_FILES["archivo"]["name"];
$remoto = $_FILES["archivo"]["tmp_name"];
$tama = $_FILES["archivo"]["size"];
$ruta = "/inetpub/webs/archivoswebnet/public/" . $local;
if (is_uploaded_file($remoto)){
copy($remoto, $ruta);
}
else {
echo "no se pudo subir el archivo " . $local;
} }
ftp_close($id_ftp);
unset($_FILES["archivo"]); //Destruye la variable "archivo"
?>
El formulario y lo de despues sigue igual.
Esta adaptacion me funciona en Hosting Windows y en directorios que tengan permiso publico.Salu2.
Muy buen ejemplo justo lo que necesitaba, para evitar errores haganlo por partes y veran que funciona !
Bien amigos, si existen algunos errores en el código de ejemplo, pero son facilmente solucionables. Bien en principio como se advierte comentarios arriba el form debe contener:
enctype="multipart/form-data"
Para que funcione.
Por otra parte, en mi caso, retire function SubirArchivo(), porque existe un error en la forma en que esta pasa las variables al metodo ftp_put(), dejando inmediatamente abajo del include('ftpfunc.php'); el siguiente código:
if(!empty($HTTP_POST_FILES["archivo"])){
$file = $HTTP_POST_FILES["archivo"]["tmp_name"];
$base_archivo = basename($HTTP_POST_FILES["archivo"]["name"]);
$g_archivo = "[ruta de la carpeta para subir el archivo]" . $base_archivo;
$id_ftp=ConectarFTP();
$upload = ftp_put($id_ftp, $g_archivo, $file, FTP_BINARY);
if (!$upload) {
$status = "Error al guardar: " . $g_archivo;
} else {
$status = "Exito al gaurdar: " . $g_archivo;
}
unset($HTTP_POST_FILES["archivo"]);
ftp_quit($id_ftp);
en este caso la variable $status informa sobre el éxito o fracaso de subir el archivo. No es recomendable poner dentro de if e if else el comando echo. Busca ponerlo en la parte de abajo del código original fuera del table.
Recuerda que $_FILE y $HTTP_POST_FILES, se usan de manera indistinta, dependiendo de la versión de php en el servidor. Cosa muy importante es saber si tu servidor tiene habilitados los comandos ftp en el php.ini, o lo clasico en este caso el comando phpinfo(); para saber si tu server tiene habilitado los comandos ftp de php.
Saludos
ya me funciono.... al parecer es muy cierto... no hay que referenciar variables tipo file oomo $_POST["archivo"]) si no como
$HTTP_POST_FILES["archivo"] y tambien debe ponerse el enctype="multipart/form-data". las 2 cosas deben ser cambiadas...
para los que su codigo no HACE nada es por que no ponen el encytype a mi me paso.
y le hice unos cambios al codigo apoyado con otro codigo que encontre por ahi en otra portal.
en breve lo posteare.
referente a la carpeta.. no tengo ningun problema, me sube y me baja archivos en cualquier carpeta que seleccione como compartida desde el filezilla. checa tu configuracion de "Users" y en "shared folder" con "add"anexa la carpeta que quieres compartir y una vez adicionada, con un clic derecho sobre la ruta de la carpeta aceptada ponla como SET AS HOME DIR. para que sea la predeterminada.
En una conexion ftp cuando se tomara esta carpeta como la raiz y si ordenas con las funciones FTP en php que cambie de directorio u otra cosa y debes tener presente que la carpta onde estas parado inicialmente al conectarte FTP es la que seleccionaste como SET AS HOME.
ademas en esa misma seccion ("shared folder") puedes otorgar atributos de los usuarios sobre las carpetaas y los archivos.... seleccionas el usuario(si no existe lo agregas con add) y puedes posteriormente otorgarle atributos de borrado, creacion, escritura y actualizacion de ficheros, asi como creacion y borrado de carpetas entre otras cosas... si piensas administrar un grupo en vez de la opcoon user ve a la opcion group que es muy similar pero sirve para administrar grupos... no se como funcione lo estoy checando...
SUERTE y espero el comentario sirva.
da gusto encontrar este tipo de portales.... que digo tipo de portales.... mejor dicho portal, siempre que requiero algun tipo de informacion siempre encuentro asesoria en Desarrolloweb.. en hora buena...Creo vale la pena considerar comprar algun curso de los que tienen.
SALUDOS
Aqui tienen el codigo como me funciono a mi, no usando la funcion subir archivo, y poniendo un codigo en lugar de ello inmediatamendte despues del include, espero les sirva saludos
<?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('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);
}
?>
<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ño</strong></font></div></td>
<td width="30%"><div align="center"><font size="2" face="Verdana, Tahoma, Arial"><strong>Fec.
Modificació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=" ";
$fecha=" ";
}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>
| Por: Jhony Alexander Duque | | 23/5/07
|
Los felicito el ejemplo esta muy bueno.
voy a aclarar algo con lo que muchos han tenido problema y es con esta linea al principio del codigo del index;
<?php echo "<?xml version="1.0" encoding="iso-8859-1"?".">"; ?>
el problema es que si empezamos donde dice version con comillas dobles (""), pues estariamos cerrando el echo; yo lo solucione asi; cambiando las comillas dobles dentro del echo por comillas sencillas.
<?php echo "<?xml version='1.0' encoding='iso-8859-1'?".">"; ?>
bueno por ultimo coloco el codigo ya funcionando ( Como me funciono a mi).
index.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($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 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ño</strong></font></div></td>
<td width="30%"><div align="center"><font size="2" face="Verdana, Tahoma, Arial"><strong>Fec.
Modificació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=" ";
$fecha=" ";
}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>
ftpfun.php
<?
# 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
}
?>
recuerda colocar el archivo ftpfun.php en la carpeta inc.
bueno simplemente copias y pegas y listo ya funciona!!!!!
Utilizando el codigo que puso nuestro amigo ViK-ThOr el dia 24/12/06 me anduvo perfectamente!!!
Lo unico que me pasa es que cuando intento subir archivos muy pesados (20MB) no me los sube.
Alguna solucion a esto?
| Por: pedro morales glez | | 15/8/07
|
PONGO A SU DISPOSICIÓN EL CÓDIGO ARREGLADO PARA LA NUEVA VERSIÓN DE PHP Y QUE SÍ FUNCIÓNA,SOLAMENTE PARA UTILIZARLO QUITEN LOS SIGNOS DE # AL INICIO Y FINAL DEL CODIGO.
EL INDEX.PHP ES
#<?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('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);
}
?>
<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ño</strong></font></div></td>
<td width="30%"><div align="center"><font size="2" face="Verdana, Tahoma, Arial"><strong>Fec.
Modificació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=" ";
$fecha=" ";
}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>#
Y EL FTPFUNC.PHP ES EL SIGUIENTE
#<?
# FUNCIONES FTP
# CONSTANTES
# Cambie estos datos por los de su Servidor FTP
define("SERVER","AQUI SU DOMINIO"); //IP o Nombre del Servidor
define("PORT",21); //Puerto
define("USER","AQUI SU NOMBRE DE USUARIO"); //Nombre de Usuario
define("PASSWORD","AQUI VA LA CONTRASEÑA"); //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,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
ftp_quit($id_ftp); //Cierra la conexion FTP
return $Directorio; //Devuelve la ruta a la función
}
?>#
ESPERO LES SEA DE AGRADO Y UTILIDAD ES EL MISMO CODIGO QUE ARRIBA PERO ARREGLADO A FUNCIONAR A LA PRIMERA. SUERTE PROGRAMADORES PRINCIPIANTES!!!!
:)
Muy bueno el ejemplo. Me funcion perfecto.
Ahora me gustaria agregarle una pantallita previa para que el usuario ingrese un usuario y una contraseña. Alguien tiene un ejemplo?
Al principio podria ser una validacion en duro de usuario y contraseña... aunque lo definitivo es manejar una pequeña base de datos,
Saludos!!
| Por: Sergio Vladimir | | 23/10/07
|
Gracias por el codigo ami me funciono sin problemas. solo tengo una observacion mejor nombren el archivo FTPFUNC.PHP con minusculas por que ami no me reconocia promimero luego lo cambie por ftpfunc.php y corrio normal esto en el servidor de tripod.lycos.es
Gracias!!!
En lo personal me sirvió bastante este artículo y sólo si quieren agregar el cambio de directorio o algo parecido utilizan:
ftp_chdir($id_ftp, "/ruta/de/archivos");
en la función ConectarFTP() que tiene el código, la ruta la pueden pedir al usuario o definirla.
A mi no me funcionaba, y he cambiado $HTTP_POST_FILES por
$_FILES y ha funcionado correctamente.
Gracias poreste valioso código
miguel_... | FTP con PHP
| 24/4/09 |
Muchas gracias por el aporte tan util. Cuando intento subir por ejemplo un archivo de 32.4 MB lo subio con exito, pero al final despues de terminar la subida me aparecio el error de que se habian sobrepasado los 30 segundos de la conexion... alguien sabe como solucionarlo?