Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [FTP] Creare un semplice client FTP

    Salve a tutti, vi espongo subito il mio problema:

    vorrei implementare tramite php un semplice script che permetta ad un generico utente la visualizzazione, lo scaricamento e il caricamento di file all'interno della propria cartella FTP, presente sul server (il server FTP è Filezilla).

    Dopo l'inserimento di username e password tramite un form html viene visualizzata la pagina contenente la lista di tutti i file della cartella personale dell'utente, utilizzando la funzione php ftp_nlist().

    Mentre per l'upload di un file da locale esiste un'apposito campo dei form html, tramite il quale ricavare la path locale del file da caricare sul server, che sarà poi passata come argomento alla funzione ftp_put(), non so se un equivalente esista per il salvataggio di un file remoto sul computer locale.

    La mia idea sarebbe quella di rendere la lista dei file cliccabili, permettendo all'utente di salvarli sul proprio hd qualora vi cliccasse sopra.

    Tuttavia creando un semplice anchor del tipo filename.txt e cliccandolo, il browser chiede l'inserimento di nome utente e password di accesso al server ftp, essendo effettivamente la prima volta che una richiesta ftp perviene al browser.

    Sarebbe invece possibile gestire il tutto utilizzando la funzione ftp_get() di php, presentando all'utente la classica finestra "Salva con nome", magari implementata tramite un linguaggio di scripting lato client (sempre che questo sia possibile), e passando quindi la path locale scelta dall'utente alla funzione php di cui sopra?

    Grazie

  2. #2
    Se non ti servono più utenti, puoi crearne uno con nome "anonymous" e senza password: dal browser non sarà richiesto nulla, ma tutti potranno vedere gli stessi file...
    Main: Asus P5KR | Intel Q6600 G0 @ 3.6GHz | Kingston 2x1GB DDR-II @ 800MHz | POV GeForce 8800GT 512MB | Seagate Barracuda 7200.11 32MB 2x500GB RAID0 | Enermax Chakra 3052BS | Enermax Liberty 500W | Zerotherm Nirvana NV120 Premium || eee PC || Net: Atlantis Land WebShare 340 | Alice 19M/1M || Gentoo Linux | gtk-gnutella rulezz.

  3. #3
    Eheheh, grazie della risposta ma purtroppo non posso prescindere dalla multiutenza, con relativi account.

  4. #4
    Nisciuno?

  5. #5
    Visto che non sono esperto di FTP: puoi usare PHP SICURAMENTE se c'è un'opzione HTML tipo
    codice:
    <a href="ftp://example.com/file.txt/" name="utente" password="password">
    Se fosse così, sarebbe sufficiente fare scrivere al PHP "utente" e "password" pescando da variabili o cookie.

    Ma non so se esista qualcosa di simile...
    Se no, non vedo una soluzione: bisognerebbe che PHP montasse un estenzione per "FileZilla", penso... se esiste...
    Main: Asus P5KR | Intel Q6600 G0 @ 3.6GHz | Kingston 2x1GB DDR-II @ 800MHz | POV GeForce 8800GT 512MB | Seagate Barracuda 7200.11 32MB 2x500GB RAID0 | Enermax Chakra 3052BS | Enermax Liberty 500W | Zerotherm Nirvana NV120 Premium || eee PC || Net: Atlantis Land WebShare 340 | Alice 19M/1M || Gentoo Linux | gtk-gnutella rulezz.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    434
    ma fai fare il lavoro a php

    usi qualche funzione per ottenere il contenuto del file, ammettiamo che il file sia pagina.zip e che la variabile in cui salviamo sia $contenuto (naturalmente devi già sapere il tipo di file: se è binario o meno):

    Codice PHP:
    <?php
    /* uso un po' di codice da php.net */

    $local_file 'pagina.zip';
    $server_file 'pagina.zip';

    $conn_id ftp_connect($ftp_server);

    $login_result ftp_login($conn_id$ftp_user_name$ftp_user_pass);

    /* i file .zip sono file binari, quindi usiamo la modalità binaria */
    ftp_get($conn_id$local_file$server_fileFTP_BINARY);

    /* ora abbiamo in ./pagina.zip il file da inviare al browser */
    $fp fopen("pagina.zip""rb"); //usiamo b per leggere in modalità binaria
    $read fread($fpfilesize("pagina.zip")); // leggiamo
    fclose($fp); // chiudiamo
    unlink("pagina.zip"); // eliminiamo il file

    /**** inviamo il file al browser ****/
    header("Content-Type: application/octet-stream");
    header("Content-Length: ".strlen($read));
    header("Content-Disposition: attachment; filename=\"pagina.zip\"");
    header("Content-Transfer-Encoding: binary"); //vari header per l'invio
    echo $read// contenuto
    exit(0); // esce dallo script
    ?>
    Ciao

  7. #7
    Molto gentilissimo

    Ma ho un dubbio riguardante la funzione ftp_get.
    Il parametro $local_file non dovrebbe indicare la cartella di destinazione sul computer locale, ovvero sul pc dell'utente che sta tentando di scaricare il file?
    Dove andresti a salvarlo nel tuo esempio?

    Scusa l'ignoranza :P

    Grazie

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    434
    beh spiego il codice:
    nella prima parte viene recuperato il file specificato (usa GET per indicare il percorso del file), poi viene salvato in un file sul server e letto. una volta letto viene cancellato il file e vengono inviati l'header al client necessari all'identificazione come file al client, poi setti la modalità di invio e con l'echo invii il file
    È piuttosto scarna come spiegazione ma credo sia esauriente

  9. #9
    Aaaaah! Ora capisco!
    Nella mia immensa ignoranza credevo che ftp_get recuperasse il file e lo salvasse direttamente in locale sul pc dell'utente che sta navigando il server ftp. Ma giustamente il php è un linguaggio server, e finchè non spedisco qualcosa al browser dell'utente...

    Grazie mille, proverò immediatamente!

  10. #10
    Ok...

    Ma così non avviene un trasferimento FTP, vero?
    Ma solo in HTML, o no?

    Quindi i "vantaggi" sono perduti tipo affidabilità e server che può essere diverso...
    (resta che puoi personalizzare i download - ti pare poco??)
    Main: Asus P5KR | Intel Q6600 G0 @ 3.6GHz | Kingston 2x1GB DDR-II @ 800MHz | POV GeForce 8800GT 512MB | Seagate Barracuda 7200.11 32MB 2x500GB RAID0 | Enermax Chakra 3052BS | Enermax Liberty 500W | Zerotherm Nirvana NV120 Premium || eee PC || Net: Atlantis Land WebShare 340 | Alice 19M/1M || Gentoo Linux | gtk-gnutella rulezz.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.