Programación Web y Scripting > PHP
Ftp En Php -subir Archivos-
Kyrylys:
hola me gustaia que me echaseis un ojo a esto a ver si entre todos encontramos una solución.
estoy haciendo la parte de subir archivos a un servidor en unix a través de php.
el problema es que sólo me sube el archivo si está en el mismo directorio que la web.
trabajo con wamp y el servidor tiene una version php 4.3.9
yo lo que quiero es que al pasarle un archivo mediante un input type="file"
me deje subirlo desde cualquier directorio de pc, que para algo deja examinar ;)
pero como digo solo me deja si esta en el mismo directorio.
--- Código: Text ---<?php require ("global.php");echo("conectando a ftp.........$ftp_server $ftp_user $ftp_pass"); $conn_id = ftp_connect($ftp_server); // login with username and password$login_result = ftp_login($conn_id, $ftp_user, $ftp_pass); if(!$login_result){ echo("no conecta");}else {echo("\n conecta!!!!!!!!<br>");}ftp_pasv($conn_id,TRUE);//root del server donde sta alojado$root=$HTTP_SERVER_VARS['DOCUMENT_ROOT']; $local_file=$_REQUEST["archivo"];echo $local_file; $server_path=$root; if (ftp_put($conn_id,"html/".$local_file,$local_file,FTP_BINARY)){ echo ("Se ha subido el archivo".$local_file);} else { echo ("\nWWWWWaaaaaacccccCCCCCKKKKkkkk<br>".$server_path."<br>".$local_file); }// close the connection*/ftp_close($conn_id);?>
he probado con dirname y basename y basename me lo identifica bien, pero de dirname me devuelve . -un punto-
alguna hipótesis?
gracias
su -:
Yo te puedo dar otra solucion mas linda pero es en Perl... no se si te sirva, pero primero:
No se supone que tienes que ir al directorio (cwd) antes de subier el fichero?
Si no conecta... por que el programa sigue corriendo y no para?
--- Código: Text ---#!/usr/bin/env perluse strict;use Net::FTP;my $ftp_server = "algun_servidor.com";my ($usuario, $password) = ('usuario', 'password123');my $ftp = Net::FTP->new($ftp_server, Debug => 0) or die "No se pudo conectar a $ftp_server: $@\n";$ftp->login($usuario, $password) ir die "Login error ", $ftp->message;$ftp->cwd("/html") or die "CWD /html : ", $ftp->message;$ftp->put("fichero") or die "put fichero: ", $ftp->message;$ftp->quit; Claro, esto no esta diseñado para CGI, habria que usar CGI (una 7 lineas mas o menos, no se)
Pero espero que te de una idea :)
Kyrylys:
gracias, pero aún no me he metido con perl :losiento:
de todas formas la conexión la hace sin ningún problema, el problema es que solo sube si el archivo está en el mismo directorio del gestor_ftp, si le dices que lo coja de otro directorio (escritorio, mis documentos, o la carpeta que sea) es cuando no lo sube y da el waaack!!
--- Citar ---No se supone que tienes que ir al directorio (cwd) antes de subier el fichero?
--- Fin de la cita ---
cwd?? no entendí esa parte. y si, lo que quiero es pasarle el directorio en el que esté el archivo dentro de todo el pc
-siento reiterarme-
su -:
Buno, lo de Perl no importa, solo era un ejemplo... solo queria mostrar la estructura.
CWD quiere decir change work directory pero para poner un fichero en X lugar se puede hacer (no se si con esa libreria de PHP) directamente con ftp_put puesto que tienes que dar el nombre local (del fichero) y el que tomara en el servidor ftp.
--- Código: Text ---<?php require ("global.php");echo("conectando a ftp... $ftp_server $ftp_user $ftp_pass"); //esto no es seguro!!!! $conn_id = ftp_connect($ftp_server); // login with username and password$login_result = ftp_login($conn_id, $ftp_user, $ftp_pass); if(!$login_result){ echo("no conecta"); //aqui deberi de terminal el programa, depronto con exit, no se como lo trabajes.}else {echo("\n conecta!!!!!!!!<br>");}ftp_pasv($conn_id,TRUE);//root del server donde sta alojado$root=$HTTP_SERVER_VARS['DOCUMENT_ROOT']; $local_file=$_REQUEST["archivo"];echo $local_file; $server_path=$root; if (ftp_put($conn_id,"html/".$local_file,$local_file,FTP_BINARY)) // mira bien esta parte...{ echo ("Se ha subido el archivo".$local_file);} else { echo ("\nWWWWWaaaaaacccccCCCCCKKKKkkkk<br>".$server_path."<br>".$local_file); //Nuevamente, el programa continua, y no muere... esto es un bug}// close the connection*/ftp_close($conn_id);?> Otra solucion ( en PHP :P )
http://inebria.com/phpftp/ftp.phps
Kyrylys:
gracias su - ahor te entiendo un poco mejor, gracias por aclararme lo de que seguia corriendo xd
y también por el link, mañana lo miraré con más detenimiento ^^
suelo tratarlo con
--- Código: Text ---die() ya le pondre, de hecho sé que el código necesita un poco de "brillo" por ahora sólo es un testeo.
El tema de la seguridad.. bueno lo trato desde otra página, más o menos la estructura es ésta:
hay un login que comprueba que exista un user y un pass, en caso de que esté setteado lo desssetea, si va mal die, si no sigue hasta una página que tiene un menú, en una de esas casillas esta el link que va a un formulario de subir archivos ( que es el que tiene el input type="file") y esto que he dejado aquí es el gestor del formulario.
en el formulario compruebo de nuevo que el user y el pass seteados estén en la bd
más tarde aunmentaré más la seguridad comprobando que no hay dos sesiones simultáneas del mismo user, que si haces 3 intentos de meter un user/pass válido te banee durante un periodo de tiempo...
Pero vámos que hoy por hoy me interesa esto, y lo demás poco a poco que bastante ambiciosos me salen los proyectos con el poco tiempo que llevo con php... XD
muchas gracias otra vez, espero sacar un hueco mañana para probar y decir como va
Navegación
[#] Página Siguiente
Ir a la versión completa