Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/12/2008, 06:23
albertogarci86
 
Fecha de Ingreso: diciembre-2008
Mensajes: 122
Antigüedad: 15 años, 4 meses
Puntos: 0
Problema al Subir archivo mediante FTP

Hola a todos.
Estoy desarrollando una web en la existe una función para subir archivos a un servidor. Para ello lo voy a realizar mediante ftp.
Este es el código de mi formulario:

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

Y este es el código de mi archivo recibe.php que gestiona la subida del archivo.

<?php
// Primero creamos un ID de conexión a nuestro servidor
$cid = ftp_connect('localhost');
// Luego creamos un login al mismo con nuestro usuario y contraseña
$resultado = ftp_login($cid, "admin","pass");
// 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 ($cid, true) ;
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, "ArchivosFTP");
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/ArchivoFTP/" . $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);
?>


Bueno, en teoría pensaba que funcionaría pero el resultado que obtengo en el navegador es:

Conectado.
Cambio a modo pasivo
Cambiado al directorio necesario
a.html
C:\WINDOWS\Temp\php36.tmp
subiendo el archivo...
Excede el tamaño del archivo...
Ruta: /srv/www/htdocs/ArchivoFTP/a.html

No entiendo porque sale eso si el archivo no ocupa ni 1Kb!!!

¿¿Alguien me puede ayudar??
Muchas gracias,
¿por cierto la ruta que debe de aparecer es esa? ¿La ruta no debería ser c:/inetpub/ftproot/?

Bye